- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从开机加电到Main函数执行前笔记内内容课案
Linux内核设计的艺术 1
( 1
基础知识 1
( 2
1 BIOS启动 2
2 建立中断向量表和中断服务程序 2
(二)加载bootsect---(int19中断,启动加载服务程序) 2
(三)运行bootsect,加载setup--(int13中断)和系统模块(调用read_it) 2
1 规划内存 2
2 复制bootsect 3
3 将setup加载到内存 3
4 加载系统模块 3
(四)执行setup程序 4
1提取机器系统数据 4
2 开始向32位模式转变(保护模式下) 4
(2.1)关中断cli,将内核移动到内存地址的起始位置0x00000 4
(2.2)设置中断描述符表和全局描述符表 5
(2.3)打开A20,实现32位寻址 5
(2.4)为在保护模式下执行Head.s做准备 5
( 6
1 head执行整体策略 6
2 建立页目录表 6
3 创建分页机制 7
Linux内核设计的艺术
硬件设计-加电进入实模式,加电瞬间指向BIOS入口
基础知识
1. Intel 80X86系列的CPU可以分别在16位实模式和32位保护模式下运行,但为了兼容,解决最开始的启动问题,Intel将所有 80X86系列的CPU的硬件都设计为加电进入16位实模式状态运行。
2. 还有一个硬件逻辑设计为加电瞬间强行设置CS和IP的值,使得执行BIOS入口0xFFFF0。BIOS固化在计算机主机板上的ROM芯片,只有8KB,所占地址段为0xFE000---0xFFFFF。
3. LINUX 0.11 在实模式状态下,寻址的最大范围是2^20=1M(1048576).
4.各个寄存器详解
1 CS 代码段寄存器,指向CPU当前执行代码在内存中的区域 2 IP 指令指针寄存器,记录要执行的指令在代码段内的便宜地址。 3 4 5 6
加载BIOS,建立中断向量表和中断服务程序
1 BIOS启动
BIOS启动,会检测显卡,内存...,有一项工作是 会在内存中建立中断向量表及中断服务程序,对启动boot也就是之后的操作系统至关重要。
2 建立中断向量表和中断服务程序
首先,在内存最开的位置0x00000--0x003FF,1KB(256个中断向量表,每个占4字节),构建中断向量表。
然后,紧挨着的256字节,构建BIOS数据区0x00400--0x004FF.
其次,大约56KB之后,0x0E2CE,加载8KB的中断服务程序。
之后会用这些中断服务程序将软盘中的操作系统加载到内存中。
(二)加载bootsect---(int19中断,启动加载服务程序)
计算机硬件与BIOS联手操作,让CPU收到int0x19中断,CPU会在中断向量表中找到该中断向量,然后中断向量把CPU指向对应的中断服务程序0x0E6F2。该服务程序的作用是将软盘第一扇区的程序(bootsect.s )512B加载到内存中指定的位置0x07C00。
(三)运行bootsect,加载setup--(int13中断)和系统模块(调用read_it)
执行bootsect.s,然后将软盘中的其他代码载入内存。
1 规划内存
SYSSIZE = 0x3000 (120K)
SETUPLEN = 4! 要加载的setup程序的扇区数
BOOTSEG = 0x07c0 ! bootsect原始的位置
INITSEG = 0x9000 ! bootsect将要移动的新位置
SETUPSEG = 0x9020! setup 程序加载的位置
SYSSEG = 0x1000! 内核被加载的位置
ENDSEG = SYSSEG + SYSSIZE ! 内核的末尾位置
ROOT_DEV = 0x306 !根文件系统设备设置为第二个硬盘第一个分区
2 复制bootsect
执行指令的过程是CS和IP不断变化的过程。复制完代码后直接跳到新的位置接着执行之后的代码。0x90000---0x90200
复制完之后 设置ds,es,ss,sp的值。sp的值设置为0xFF00,则cs:sp=0x9ff00.是栈的起始位置。数据压栈是由高到底的方向。
3 将setup加载到内存
计算机硬件与BIOS联手操作,让CPU收到int0x13中断,CPU会在中断向量表中找到该中断向量,然后中断向量把CPU指向对应的中断服务程序0x0E3FE。该服务程序的作用是将指定扇区的代码加载到内存中指定的位置。因此要事先给服务程序传递扇区数及加载到的内存位置0x90200--0x90A00。
4 加载系统模块
加载的扇区数是240个,时间比较长,因此会打印一些信息,主要是bootsect调用read_it实现,加载到0x10000,120KB。
5 再次确定一下根设备
文档评论(0)