操作系统的启动_第1页
操作系统的启动_第2页
操作系统的启动_第3页
操作系统的启动_第4页
操作系统的启动_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、探作集傥实验报告课程名称操作系统实验课程编号实验项目名称操作系统的启动学号班级姓名专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师王红滨实验室名称地点21B 475哈尔滨工程大学计算机科学与技术学院一、实验概述1. 实验名称操作系统的启动2. 实验目的1)跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解 操作系统的启动过程。2)查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。3. 实验类型验证型实验4. 实验内容1)准备实验生成 EOS Kernel 项 U,查看 boot.asm 和 loader.asm 生成的 boot.bin 文件和loader.bin

2、文件的大小。2)调试EOS操作系统的启动过程1使用Bochs做为远程目标机2调试BIOS程序3调试软盘引导扇区程序4调试加载程序5调试内核6 EOS启动后的状态和行为二、实验环境操作系统:Windows操作系统编译器:集成开发环境OSLab工具:Floppy Image Editor 111具、Bochs 模拟器语言:C语言、NASM汇编三、实验过程1. 设计思路和流程图EOS操作系统的启动过程流程如图1所示:CPU从默认位置执行BIOS的开机自检和初始化程序.之后BIOS将软盘引导扇区加裁到0x7C00并执行J厂、软盘引导国区丰的Boot程序开始执行.将软盘根目录中的Loader程序文件Lo

3、ader.bin 加载到0x1000并执行<Loader程序开始执 行.先加栽 Kernel, dl I.然后启 动保护模式和分页机 制,最后跳到Kernel, dl I 的入口 点执行8 / 8图1操作系统的启动流程EOS操作系统的启动过程的调试如图2所示:使用Bochs做为远程目标机调试BIOS程序调试软盘引调试加栽程 导扇区程序1序调试内核EOS启动后的状态和行为图2调试过程2. 需要解决的问题及解答1)为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程 序?使用一个可以吗?它们各自的主要功能是什么?如果将loader.bin的功能移 动到boot.

4、bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节?答:BIOS将软盘引导扇区加载到0x7c00并开始执行后,软盘引导扇区中的 boot.bin开始执行,并将软盘根LI录总的loader.bin加载到0x1000并执行; loader.bin的主要功能是加载程序,先加载Kernel.dll,然后启动保护模式和分页 机制,最后跳到Kernel.dll的入口点执行。如果将loader.bin功能移动到boot.bin 文件中,会使程序规模扩大,可能使boot.bin文件的大小大于512字节。2)软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引 导扇区程序选择将lo

5、ader.bin加载到第一个可用区域的0x1000处呢?这样做有什 么好处?这样做会对文件的大小有哪些限制。答:用户只用两个可用区域,第一个可用用户区是低地址区,地址范围为 0x06000x7c00,空间大小比较小,可以容纳loader.bin,所以我们选择loder.bin 加载到较小的第一用户区。这样做的好处是loader.bin占用小空间,节约资源。 限制是loader.bin文件必须小于30208字节。3)根据之前记录的loader.bin文件的大小,自己设计一个査看内存的调试 命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指 令的字节码比较,验证

6、loader程序被完全加载到了正确的位置答:loader.bin的文件大小为1566字节,转换为16进制则为0x6le字节, loader.bin被加载到Ox 1000处执行,则loader的结束位置应该为0x1000+0x6le 即为0xl61e处,如果查看最后8字节的话,应该在结尾位置向上偏移8字节, 即 0X1616,命令为 xp/8b 0x1616。4)仔细比较实验指导10-5图和图106,尝试说明哪个是应用程序的进程, 它和系统进程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。答:图10-6中ID为31的进程是应用程序的进程,ID为1的进程为系统进 程,ID为33的线程

7、为应用程序的主线程,ID为2的线程是系统进程的主线程, 系统线程的优先级别高,存放在物理内存的低端。3. 程序运行时的初值和运行结果1)调试BIOS在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段 寄存器的值,输入调试命令r后按回车,显示当前CPU中各个通用寄存器的 值,输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。在Console中输出的这1K物理内存的值都为0,说明BIOS中断I可量表还没有被 加载到此处。衣 Duchs for Vixidovs - Console<«> rRxffffffffil<

8、unk. ctxt>: jnp far f«nn:e«Sb<hoch5? :1 > si'eg c ccc dh=0x££0093££.dh-8x00009300,dh-0x00009300.dh-0x00002300,(111-0x00009300.dh=0x00009300.dl=0x0000££f£, dl-Ox0000££f£, dl-0X0000ffff. dl-0X0000ffff. dl-0X0000ffff, dl=0X0000fff

9、f,valid =7 valid =7 valid-? valid-? ualid-7 ualid=7cc =0x£000>.do =3-0x0000,S3 : 3-0x0000es =5-0x0000. fs :s-0x0000,.gs:s=0x0000-ldtr:s =0x(1000, dh=0xaUM082UM, dl=Ux00B0ffff, ualid=l tr:s=0xWMWM, dhWx牝dl=WxUMMWffff, ualid=l gdtr:base=0x00000000, limit=0xffffidtr:base =0x00000000. limit fff图

10、3 CPU各个段寄存器值<bochs:2> rrax: vdx: vsp: i*e i: i*8:i*10: vl2: vl4: jrip:rex: pbx: y*hp: i»di: 厂9 : rll: rl3: "5:弘耐脯附附:RR«flRf2fi0x00000000-0G0Q0Q0Q0x00000000:000000000x00000000:000000000X00080800=000000000X00000000:000000000X00000000:0000fff0RxRAnnnfWR:胸阳胴胴6x60000000:000000000x000

11、00000:000000000x00000000:006000000x00008080:000000000x00000080:00000000eflags 0x00000002 id vip uif ac um rf nt. IOPL-0 <bochs:3xp /JL024b 0x0800图4 CPU中各个通用寄存器的值Kbochsxp /1024b 0x06008 <bogus*WxUWMxMUWxUUMxUUUxMMHxUU0x0®0x55550® <bogus*1MU8>:UxUMMxMWMxUMWxUU0xUUUxUU0x0匕0x00

12、1;00000UM0UW3f8 bogus*1016>:Wx0«0X00«xBM0xU00x00OxUMkbochs图5 BIOS中断冋量表未加载2)调试软盘引导扇区程序软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理 内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处 的指令)继续执行loader程序。按照下面的步骤调试此过程:输入调试命令vb 0x0000:0x7d81添加一个断点。输入调试命令c继续执行, 到断点处中断。在Console窗口中显示;eaO010000O<bochs:15> u

13、b 0x0000:0x7(181<bochs :16> c<0> Breakpoint 4317298 in B00a:7d81 C0x0008?d81)Next d t-81925326<0> (0x0000?d8il 000U:7d8i <unk ctxt>: jnp Far 6000:1060 <bochs:17>图6查看boot结束后的跳转地址此条指令会跳转到物理内存0x1000处(即Loader程序的第一条指令)继续执 行。3)调试加载程序Loader程序的主要任务是将操作系统内核(kemel.dll文件)加载到内存中, 然

14、后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行 (跳转到kernel.dll的入口点执行)。01532331341按照打开boot.1st文件的方法打开loader. 1st文件,并在此文件中查找到 loader程序的第一条指令(第33行)org 0x1000 jmp Start3233 00000000 E9180134图7查看loader程序的第一条指令输入调试命令xp/8b 0x1000查看内存0x1000处的数据,验证此块内存的前 三个字节和loader.lst文件中的第一条指令的字节码是相同的。根据之前记录的loader.bin文件的大小,自己设计一个查看内存的

15、调试命 令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令 的字节码比较,验证loader程序被完全加载到了正确的位置。因为loader.bin的文件大小为1566字节,转换为16进制则为0x61e字节, loader.bin被加载到Ox 1000处执行,则loader的结束位置应该为0x1000+0x6le, 即为0xl61e处,如果查看最后8字节的话,应该在结尾位置向上偏移8字节, 即 0x1616,命令为 xp/8b0xl616o<hochs:21> xp /8b 0x1616hochsJ:0x0000000000001616 <bo

16、gus+0>:0x93 0xffOxff0xff 0xc90“20x040x00<hochs:22>W Ve I 8T&87687787700000247816DF8280000008T8878000002如FF4DFCS79:87900000251E993FFFFFF280:880881;881882 88200000256C9883 88300000257C20400884 8848851 I图8查看0x1000处的数据.CONTINUE:sub <lvord ebp 十 pSectionKeaderl, 0x28 . pSectionHeader - de

17、c dvard cbp + dxScctions. wfkiwbcrOfScctions -jmp LOJPBREAK:leaveret 4:图9 loader程序结束位置的字节码在0x1513添加断点,继续运行在断点处中断,在Console窗口显示要执行的下一条命令,查看内存中保存的32位函数入口地址,记录函数地址。<bochs:22> pb 0x1513<bochs:23> cBveakpoint 2,512 in ? <>Next at 1=104959146<0> 0x000015133 0008:0000000080001513 <

18、;unk. ctxt>: call dword ptr de=0x80001117; ;££1517110080<bochs:24> x Zv/x 0x80001117buulis :0X0000000080901117 <bogus*0>:0x80018130<bochs:25> .图10函数入口地址4) 调试内核为start.c源代码文件中KiSystemStartup函数添加监视,与所记录的虚拟内存 0x80018130处保存的入口地址一致,说明的确与loader程序进入操作系统内核。名称值丄类型KiSystemStartup

19、void (PVOID) 0x80018130 KKiSystemStartupvoid (FVOID) I图11确认函数地址继续执行,启动EOS。5) EOS启动后的状态和行为查看EOS的版本号,在控制台中输入命令“ver”后按回车。输出EOS版 本号后的控制台如图12所示。图12 EOS的版本号查看EOS启动后的进程和线程的信息,在控制台中输入命令“pL后按回 车,输岀的进程和线程信息如图13所示。<2 Bochs for Tindows - Disrl ay旦区JSEP _£>py Pos+e 空flipJt !» |Pown孟11阖瞬臼白®CO

20、MSOLE-l (Press CtrHFlFS to switch console uindou.)Wc Iconic tu EOS shel 1>verTcvat ion EOS Ucrsion number 1.1J >Ptkxxxxxxk Process List (1. Process) kxxxxxxk* Thrrad System?;Y20Z1ZZ232425262?28t r 44-4444444.3 O)2ZZ22Z22Z 1 i 0L rState !ParentProcessIDReady1Waiting1Bunn 1 ng1Waiting1Waiting1Wa

21、iting1Waiting1Waiting1Wait inq1Ualtlng1Thread) 处代穴穴待穴穴穴i StartAddressGx8eO181?C 0xOOO15E9ft 9x80618Z6D 0x8OG18Z6D 0X8001826D 0x60010260 0X8O018Z6D 0X80G1826D OxOOOlOZGD 0X8O018Z6DID I System? I Priority I ThrcadCuunt I PrimaryTlircad ID I ImageNamc IYZ410ZNACTBL & 3M bullon enabLes moase IPS KK3

22、W5, X 1恻 CAR 3CRL ItD.OF图13 EOS启动后进程和线程的信息在OS Lab中选择“调试”菜单中的“停止调试”,结束之前的调试。在OS Lab "项目管理器”窗口中双击Floppy.img文件,使用FloppylmageEditor工具打 开此软盘镜像文件。打开配套资源“学生包”,在其中找到本实验对应的文件夹。 将本实验文件夹中的Hcllo.exe文件拖动到FloppylmageEditor工具窗口的文 件列表中释放,Hello.exe文件即被添加到软盘镜徹文件中。Hello.exe 个EOS 应用程序,在FloppylmageEditor中选择“文件”菜单中的“保存”后关闭 FloppylmageEditoro按F5启动调试。待EOS启动完毕,在EOS控制台中输 入命令“hello”后按回车。此时Hello.exe应用程序就开始执行。迅速按Ctrl+F2 切换到控制台2,并输入命令“pt”后按回车。输出的进程和线程信息如图15 所示。Hochs for Windows - Displ ayji®图14控制台he

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论