(1)x86PC刚开机时CPU处于实模式(和保护模式对应),寻址方式为CS左移四位+IP以下摘自《Linux内核完全注释》
(2)开机时,CS = 0xFFFF;IP = 0X0000
(3)寻址0xFFFF0(ROM BIOS映射区)
开机时内存中唯一有代码的地方(4)查抄RAM,键盘,表现器,软硬磁盘
(5)将磁盘0磁道0扇区(引导扇区,操作体系的第一段代码bootsect.s)读入0x7c00处
一个扇区512字节(6)设置cs = 0x7c0,ip = 0x0000
.s 汇编代码
这里先总的说明一下 Linux 操作体系启动部门的主要执行流程。当 PC 的电源打开后,80x86 结构的 CPU 将自动进入实模式,并从地点 0xFFFF0 开始自动执行程序代码,这个地点通常是 ROM-BIOS 中的 地点。PC 机的 BIOS 将执行某些体系的检测,并在物理地点 0 处开始初始化中断向量。今后,它将可启 动设备的第一个扇区(磁盘引导扇区,512 字节)读入内存绝对地点 0x7C00 处,并跳转到这个地方。启 动设备通常是软驱或是硬盘。这里的叙述是非常简朴的,但这已经足够理解内核初始化的工作过程了。
Linux 的最最前面部门是用 8086 汇编语言编写的(boot/bootsect.s),它将由 BIOS 读入到内存绝对地 址 0x7C00(31KB)处,当它被执行时就会把自己移到绝对地点 0x90000(576KB)处,并把启动设备中后 2kB 字节代码(boot/setup.s)读入到内存 0x90200 处,而内核的其它部门(system 模块)则被读入到从地点 0x10000 开始处,因为当时 system 模块的长度不会超过 0x80000 字节大小(即 512KB),所以它不会覆 盖在 0x90000 处开始的 bootsect 和 setup 模块。后面 setup 程序将会把 system 模块移动到内存起始处,这 样 system 模块中代码的地点也即等于实际的物理地点,便于对内核代码和数据的操作。图 3-1 清晰地显 示出 Linux 体系启动时这几个程序或模块在内存中的动态位置。其中,每一竖条框代表某一时候内存中各程序的映像位置图。在体系加载期间将表现信息"Loading..."。然后控制权将传递给 boot/setup.s 中的代 码,这是另一个实模式汇编语言程序。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |