下载后可任意编辑简析 linux 内核的执行流程----从 bootsect
s 到 main
c(内核版本 0
11)Linux 启动的第一阶段(从开机到 main
c)3 个任务:A、启动 BIOS,准备实模式下的中断向量表和中断服务程序
B、从启动盘加载操作系统程序到内存
C、为执行 32 的 main 函数做过渡准备
内存变化如下:① 、0xFE000 到 0xFFFFF 是 BIOS 启动块,其中上电后第一条指令在 0xFFFF0
② 、而后 0x00000 到 0x003FF 总共 1KB 存放中断向量表,而接下去的地址到 0x004FF 共 256B 存放 BIOS 数据,从 0x0E05B 开始的约 8KB 的内存中存放中断服务程序
③ 、利用 BIOS 中断 0x19h 把硬盘的第一扇区 bootsect
s 的代码加载到内存中,即 0x07c00 处,后转到该处执行
④ 、将 bootsect
s 的代码复制到 0x90000 处
⑤ 、利用中断 0x13h 将 setup
s 程序加载到内存 0x90200 处
⑥ 、再将剩余的约 240 个扇区的内容加载到 0x10000~0x2EFFF处
⑦ 、开始转到 setup
s 处执行,第一件事就利用 BIOS 提供的中断服务程序从设备上猎取内核运行的所需系统数据并存在 0x90000的地址处,这时将原来 bootsect
s 的代码覆盖得只剩 2Byte 的空间
⑧ 、关中断并将系统代码复制到 0x00000 处,将原来放在这里的中断向量表与 BIOS 数据区覆盖掉,地址范围是0x00000~0x1EFFF
同时制作两表与两寄存器
⑨ 开地址线 A20,寻址空间达到 4GB,后对 8259 重新编程,改变中断号
⑩ 、转到 head
s(大小是 25K+184B)执行,执行该程序完后是这样的:0x0000