图形接口卡以及BIOS
|
setup
|
0x7c00
处
bootsect
被搬运
|
一部分保留BIOS用,另一方面linux内核的引导需要一些运行空间
|
内核映象
|
0x0
|
0x90000
|
0x92000
|
0x10000
|
0xa0000
|
0x100000
|
系统引导过程
当
BIOS
“引导”一个系统时,总是把引导扇区读入到基本内存中地址为
0x7c00
的地方。然后就跳转到
0x7c00
开始执行引导扇区的代码。
Cpu
在跳转到
bootsect
时尚处于
16
位实地址模式,然后在
setup
的执行过程中转入
32
位保护模式的段式寻址方式。在
bootsect
核
setup
的执行中,二者都利用
bios
提供的调用来完成一些比较大的操作,入读磁盘,取得
BIOS
在加电自检时搜集到的有关内存的信息等等。一旦转入内核映象本身的执行,就与
BIOS
分道扬镳,不再使用
BIOS
调用了。
辅助程序
setup
为内核映象的执行作好了准备(包括解除压缩)以后,就跳转到
ox10000
开始内核本身的执行,此后就时内核的初始化,例如页式映射的建立;第二阶段主要式系统中的一些基础设施的初始化,例如内存管理核进程管理的建立核初始化;最后则是“上层建筑”的初始化,如跟设备的安装和外部设备的初始化等等。
在
Bootsect
代码执行期间,它会将自己移动到内存绝对地址
0x90000
开始处继续执行。该程序的主要作用是首先把从磁盘第
2
个扇区开始的
4
隔山去的
setup
模块加载到内存紧接着
bootsect
后面位置处,然后利用
bios
中断
0x13
取磁盘参数表中当前驱动引导盘的参数,接着在屏幕上显示“
Load system……
”字符串。再者把磁盘上
setup
模块后面的
sysytem
模块加载到内存
0x10000
开始的地方。随后确定根文件系统的设备号,若没有制定,则根据所保存的引导盘的每磁道扇区数判断出盘的类型和种类并保存其设备号于
root_dev
(引导块的
508
地址处),最后长跳转到
setup
程序的开始处(
0x90200
)执行
setup
程序。