- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1为什么计算机启动最开始的时候执行的是BIOS代码而不是操作系统自身的代码?计算机启动的时候,内存未初始化, CPU不能直接从外设运行操作系统,所以必须将操作系统加载至内存中。而这个工作最开始的部分,BIOS需要完成一些检测工作,和设置实模式下的中断向量表和服务程序,并将操作系统的引导扇区加载值 0x7C00 处,然后将跳转至 0x7C00。这些就是由bios程序来实现的。所以计算机启动最开始执行的是bios代码。2.为什么BIOS只加载了一个扇区,后续扇区却是由bootsect代码加载?为什么BIOS没有把所有需要加载的扇区都加载?对BIOS而言,“约定”在接到启动操作系统的命令后,“定位识别”只从启动扇区把代码加载到0x7c00这个位置。后续扇区则由bootsect代码加载,这些代码由编写系统的用户负责,与BIOS无关。这样构建的好处是站在整个体系的高度,统一设计和统一安排,简单而有效。BIOS和操作系统的开发都可以遵循这一约定,灵活地进行各自的设计。操作系统的开发也可以按照自己的意愿,内存的规划,等等都更为灵活3.为什么BIOS把bootsect加载到0x07c00,而不是0x00000?加载后又马上挪到0x90000处,是何道理?为什么不一次加载到位?1)因为BIOS将从0x00000开始的1KB字节构建了了中断向量表,接着的256KB字节内存空间构建了BIOS数据区,所以不能把bootsect加载到0x00000. 0X07c00是BIOS设置的内存地址,不是bootsect能够决定的。2)首先,在启动扇区中有一些数据,将会被内核利用到。其次,依据系统对内存的规划,内核终会占用0x0000其实的空间,因此0x7c00可能会被覆盖。将该扇区挪到0x90000,在setup.s中,获取一些硬件数据保存在0x90000~0x901ff处,可以对一些后面内核将要利用的数据,集中保存和管理。4.bootsect、setup、head程序之间是怎么衔接的?给出代码证据。1)bootsect跳转到setup程序: jmpi 0,SETUPSEG;这条语句跳转到0x90200处,即setup程序加载的位子,CS:IP指向setup程序的第一条指令,意味着setup开始执行。2)setup跳转到head程序:CPU工作模式首先转变为保护模式然后执行 jmpi 0,80指的是段内偏移,8是保护模式下的段选择符:01000,其中后两位表示内核特权级,第三位0代表GDT,1则表示GDT表中的第一项,即内核代码段,段基质为0x0000000,而head程序地址就在这里,意味着head程序开始执行。5.setup程序里的cli是为了什么?cli为关中断,以为着程序在接下来的执行过程中,无论是否发生中断,系统都不再对此中断进行响应。因为在setup中,需要将位于 0x10000 的内核程序复制到 0x0000 处,bios中断向量表覆盖掉了,若此时如果产生中断,这将破坏原有的中断机制会发生不可预知的错误,所以要禁示中断。6.setup程序的最后是jmpi 0,8 为什么这个8不能简单的当作阿拉伯数字8看待?这里8要看成二进制1000,最后两位00表示内核特权级,第三位0表示GDT表,第四位1表示所选的表(在此就是GDT表)的1项来确定代码段的段基址和段限长等信息。这样,我们可以得到代码是从段基址0偏移为0处开始执行的,即head的开始位置。注意到已经开启了保护模式的机制,所以这里的8不能简单的当成阿拉伯数字8来看待。7.打开A20和打开pe究竟是什么关系,保护模式不就是32位的吗?为什么还要打开A20?有必要吗?1、打开A20仅仅意味着CPU可以进行32位寻址,且最大寻址空间是4GB。打开PE是进入保护模式。A20是cpu的第21位地址线,A20未打开的时候,实模式中cs:ip最大寻址为1MB+64KB,而第21根地址线被强制为0,所以相当于cpu“回滚”到内存地址起始处寻址。当打开A20的时候,实模式下cpu可以寻址到1MB以上的高端内存区。A20未打开时,如果打开pe,则cpu进入保护模式,但是可以访问的内存只能是奇数1M段,即0-1M,2M-3M,4-5M等。A20被打开后,如果打开pe,则可以访问的内存是连续的。打开A20是打开PE的必要条件;而打开A20不一定非得打开PE。2、有必要。打开PE只是说明系统处于保护模式下,但若真正在保护模式下工作,必须打开A20,实现32位寻址。?8.Linux是用C语言写的,为什么没有从main还是开始,而是先运行3个汇编程序,道理何在?main 函数运行在 32 位的保护模式下,但系统启动时默认为 16 位的实模式,开机时的 16 位实模式与 main 函数执行需要的 32 位保护
您可能关注的文档
最近下载
- 数字城市CIM管理平台设计方案.docx VIP
- 山东省2016版安装工程消耗量定额.pdf VIP
- 工学一体化课程《小型网络管理与维护》任务4单元3教学单元活动方案.docx VIP
- 葡萄酒工厂设计说明书.doc VIP
- 某高速公路隧道工程施工安全总体风险评估报告.pdf VIP
- 基于地理集成机器学习的海洋中深层流速数据重构方法.pdf VIP
- DB62T 2992-2019 黄土地区高速公路路基施工技术规范.pdf VIP
- 细胞生物学(第五版)-第15章细胞死亡与细胞衰老.ppt VIP
- 工学一体化课程《小型网络管理与维护》任务4单元6教学单元活动方案.docx VIP
- 中职新生主题班会-开学第一课-:新的起点-课件-(30张PPT).pptx VIP
文档评论(0)