linux学习笔记
一:从开机到main函数过程:
1:启动BIOS
2:从启动盘加载操作系统程序到内存
3:为执行32位main函数做过渡准备
【1.1】
启动BIOS,准备实模式下得中断向量表和中断服务程序
1.1.1
BIOS启动原理:加电后强制执行CS:IP,另CPU指向BIOS程序入口
(CS:当前执行代码在内存所在区域;IP/EIP:将要执行的指令在代码段内的偏移位置。)
1.1.2
BIOS在内存中加载中断向量表和中断服务程序:1.构建中断向量表;2.构建BIOS数据区;3.加载中断服务程序。
【1.2】
加载操作系统内核程序并为包含模式做准备
分三批加载:第一批由BIOS中断int 0x19把第一扇区bootsect的内容加载到内存;
第二批和第三批在bootsect的指挥下,分别把其后的四个扇区和随后的240个扇区的内容加载至内存。
BIOS与硬件联手将bootsect写入内存
bootsect将二、三批代码写入内存
1.2.1
加载第一部分代码---引导程序(bootsect)
自检--硬件与BIOS联手--CPU收到int 0x19中断--CPU执行指令--在中断向量表中找到对应的向量--将CPU指向0x0E6F2(中断服务程序)
操作系统的启动代码是用汇编语言写的
1.2.2
加载第二部分代码---setup
1.bootsect对内存进行规划;2.bootsect进行自我复制;3.将setup加载到内存。
1.2.3
加载第三部分代码---system模块
bootsect借着BIOS中断int 0x13,将240个扇区的system模块加载到内存当中,加载时工作主要是由bootsect调用read_it子程序完成的。
linux启动需要两部分数据:系统内核镜像和根文件系统
BIOS提取的机器系统数据将覆盖bootsect程序所在的部分区域(操作系统对内存的使用十分谨慎)
系统通过已经加载到内存中代码,将实现从实模式到保护模式的转变,使linux0.11成为真正的现代操作系统
【1.3】
开始向32位模式转变,为main函数调用做准备
打开32位的寻址空间、打开保护模式、建立保护模式下的中断响应机制等与保护模式配套的相关工作、建立内存分页机制、以及做好调用main函数的准备
1.3.1
关中断并将system移动到内存地址起始位置0x00000
setup程序将位于0x10000的内核程序拷贝到内核地址起始位置0x00000处
这个复制动作将BIOS中断向量表和BIOS数据区完全覆盖,直到新的中断服务体系构建完毕之前,操作系统不再具备响应并处理中断的能力(此前是中断向量是有BIOS提供的)。
1.3.2
设置中断描述表和全局描述表
此时要通过setup程序自身提供的数据信息对中断寄存器IDTR和全局描述符表寄存器GDTR进行初始化设置
...明天待续