2012年2月13日

摘要: Linux 内存管理主要是32保护模式下,段页式内存管理。如何处理内存相关的寄存器,使得程序可以读写超过4G的内存。x86这个CPU框架,会根据寄存器的值和段页式规则来进行地址变换,进行内存访问。其中,也会进行权限验证等附加判断。几个概念:保护模式vs实模式保护模式下的:虚地址:程序产生的段选择符,段内偏移地址两部分组成。要经过分段地址变换处理后,才对应到屋里地址。逻辑地址:在Intel86保护模式下,就是指程序执行代码段限长内的偏移地址。线性地址:虚拟地址到物理地址变换的中间层。如果没有启用分页机制,线性地址就是物理地址。在保护模式下,读取内存很费周章。如下图,需要先找到GDT,然后找到LD 阅读全文

posted @ 2012-02-13 19:30 Teddy Yan 阅读(293) 评论(0) 推荐(0) 编辑

摘要: bootsect.s 我们实验环境中,Image 就是一个软盘镜像,bootsect.s就在软盘的第一个扇区中(引导扇区,0磁道,0磁头,第一个扇区)硬盘有一个单独的镜像文件BIOS ROM如果设置成软盘启动,就把引导扇区的代码加载到0x7C00开始处执行。因为前面的内存保存有有用的信息。如果是从硬盘启动系统,就不执行bootsect.s。LILO, Grub等多操作系统引导程序来完成bootsect.s的任务。setup.s利用BIOS ROM中断读取硬件的系统数据,并将保存在0x90000的内存,覆盖掉bootsect.s 并将system模块(不超过512K)移动到0x00000处,加载 阅读全文

posted @ 2012-02-13 19:30 Teddy Yan 阅读(715) 评论(0) 推荐(0) 编辑


Copyright © 2024 Teddy Yan
Powered by .NET 9.0 on Kubernetes