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进行初始化设置 ...明天待续
posted @ 2012-01-14 19:15  二手产品经理  阅读(184)  评论(0编辑  收藏  举报