linux内核设计的艺术

1.1 启动bios

CPU启动时,CS = 0xFFFF, IP = 0x0000,初始地址为CS:IP = 0xFFFF0,即bios的起始地址为0xFFFF0。

bios至关重要的作用,建立中断向量表和中断服务程序。

image-20221206220741707

1.2 加载操作系统内核程序并为保护模式做准备

​ 对于 Linux 0.11 操作系统而言 计算机将分三批 逐次加载操作 系统的 内 核代码。第一批 由BIOS 中int 0x19 把第一扇 bootsect 的内容加载到 内存 ; 第二批,第三批bootsect 的指挥, 分别把其后4 个遍和随后240 个区的内容加载至内存。

1.2.1 加载第一部分代码——引导程序(bootsect)

将第一扇区的内容装载到内存0x7C00处

1.2.2 加载第二部分代码——setup

1. bootsect对内存的规划

bootsect对于内存规划如下:

​ SETUPLEN = 4

​ BOOTSEG = 0x07c0

​ INITSEG = 0x9000

​ SETUPSEG = 0x9020

​ SYSSEG = 0x1000

​ ENDSEG = SYSSEG +SYSSIZE

2. 复制bootsect

bootsect将本身(此时512Byte)从0x7C00复制到0x90000.