




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告课程名称操作系统实验实验项目名称操作系统的启动学号班级姓名专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师实验室名称地点计算机基础第七实验室21B475哈尔滨工程大学计算机科学与技术学院 一、实验概述1.实验名称操作系统的启动2.实验目的跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。Q查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。3.实验类型验证性实验4.实验内容调试EOS操作系统的启动过程包括:(1).使用Bochs做为远程目标机;(2).调试BIOS程序;(3).调试软盘引导扇区程序;(4).调试加载程序;(5).调
2、试内核;(6).查看EOS启动后的状态和行为二、实验环境EOS操作系统和配套的IDE集成开发环境。三、实验过程设计思路和流程图CPU从默认位置执行BIOS的开机自检和初始化程序,之后BIOS将软盘引导扇区加载到0 x7C00并执行。软盘引导扇区中的Boot程序开始执行,将软盘根目录中的Loader程序文件Loader.bin加载到0 x1000并执行Loader程序开始执行,先加载Kernel.dll,然后启动保护模式和分页机制,最后跳到Kernel.dll的入口点执行Kernel.dll开始执行,初始化EOS内核,EOS启动完毕图2-1.EOS操作系统的启动过程流程图算法实现:验证性试验,无
3、算法。需要解决的问题及解答(试验指导).为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使用一个可以吗?它们各自的主要功能是什么?如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节?答:boot文件夹包含了两个汇编文件boot.asm和loader.asm。这两个文件生成的二进制文件boot.bin和loader.bin会被写入软盘镜像文件。操作系统启动时boot.bin和loader.bin引导软盘加载程序,二者缺一不可。使用Boot.bin的主要功能是引导软盘;loader.bin的主
4、要功能是加载程序。如果把loader.bin功能移动到boot.bin程序中,必然导致程序规模扩大,可能使其大于512字节。.软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择将loader.bin加载到第一个可用区域的0 x1000处呢?这样做有什么好处?这样做会对loader.bin文件的大小有哪些限制。答:首先用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区,且空间大小比较小,适合容纳小文件,所以我们选择将占用空间小的loder.bin加载到第一用户区。优点:由低地址开始,便于检索查找。小文件占用小空间,节约资源。限制:loader.bin文件
5、必须小于lc00k.练习使用Bochs单步调试BIOS程序、软盘引导扇区程序和loader程序,加深对操作系统启动过程的理解。.仔细比较实验指导10-5图和图10-6,尝试说明哪个是应用程序的进程,它和系统进程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。答:图10-6是应用程序的进程,在进程列表中只有一个ID为1的系统进程,其优先级为24,包含有10个线程,其中的ID为2的线程是该进程的主线程,系统进程没有映像名称。在线程列表中有10个线程,它们都是系统线程。区别:主线程的优先级别高。存放在物理内存的低端。主要数据结构、实现代码及其说明:验证性实验,无此项目。源程序并附上注释:
6、验证性实验,无此项目。程序运行时的初值和运行结果,实验过程1.调试BIOS程序.在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,如图2-1。其中CS寄存器信息行中的“s=0 xf000”表示CS寄存器的值为0 xf000.输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值,如图10-3。其中“rip:0 x00000000:0000fff0”表示IP寄存器的值为0 xfff0。19回E3 B-nchafurTjndavj-CcnuletJnpIjtrFBefleBS-ht(wgc*r-BMr(wflPJ3*0 x00叫Be;D-UNUIWIIPB9
7、:e=D*0M9札FsiHaBBOQg&:QmSOSB,IdtrtfKVUtW也hUHUIHtHfSW,dLUKfltHWFrffvalid.tr:dh-HxUQmHhHfl.d.l-DHEHDf/lB24h(bocUl;胭0泗丽3泗80S他t0994009x990 xMHxMOUmU加眦HmUBABEWHHUCHJ山UkW9UKtiUBstHSBMliftBKraPjcR-iii0AflO8H(WfiHfllft叱跡*Hea弘彌0kMflxflB麻q号Uxa&thcos24=UhUMWkUHHxHH=DkMnscAINkAEWnflAMRiWi*為督ug*35:籾遗鼎iGUAMAxAAxdA
8、th日冃flxO&=企磴i。仙HkHUxUaxSHBxBBBxtH3BbcQMIflRnRMaWlre:CUflflHkQQHktlD甘的關盟67甘-缶湘KW8;粗Kt业1MxUUUmHHOxUMUjtHM16:flkflO口砂BjlMMBZO1UzxiMUxHUMkHUHxHHUxMU32iHxEKIHkHHOflAHwHAHxHRUzxUdUxtitJ4S:flxMlOkflAS6;0ZK0SMxBaaxm二1切吗42hL1h7c43HIkwluJtRkBWSBflWflW&71W*CbDswt*UvUddxtiH缶的OxUHHMBdtMIBiWEfVcChoguc+anoxoarmbbR
9、icfiWBWWfiBfift?riflho-giiaBx:0弧羽。弧丽UkUHHMHtflWHiMU?c18ChDUUUUUUUH0?c2tiCboua*Uk0BVxVBHkN9RxanHRBAFWAEK)R7c3UChouf*RhHH刃xHRBwRfl目胡跆B阳翻尅测07品日2调试软盘引导扇区程序输入调试命令vb0 x0000:0 x7c00,这样就在逻辑地址0 x0000:0 x7c00(相当于物理地址0 x7c00)处添加了一个断点。输入调试命令c继续执行,在0 x7c00处的断点中断。中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令,如下(0)0
10、x00007c000000:7c00(unk.ctxt):jmp.+0 x006d(0 x00007c6f);eb6d为了方便后面的使用,先在纸上分别记录下此条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的0 x00007c6f)。输入调试命令sreg验证CS寄存器(0 x0000)的值。输入调试命令r验证IP寄存器(0 x7c00)的值。BocMTnrIindowj-CojijnleCbach:ubHMaRaMSM7cBtiC畑Bi-trahpoint+317258in巧M朋;丽低応atS3筋海临CH)LHumKHTteUHlUW:7cMCunk.EtKt):jnp
11、.-*0Mfllted-0M0000.dh-0 xiW0fW3ffl.diixotnjee.0a00fffFtMild-1validw?aldd=l“mmualid-lIldfetr:3HKH(UWf(Lh-UKtllWUSUe,.dL-rHKHtrMlffrvalxnrJntJ-orS=HHPffiflffiinMIB-BtffiHHflFWakR剛酚阿骨金pa嗣即羽L的斷她0咱鸿脈ATHx&ttllMtHniM:HaUUKHMUQpHOBH0MUaHHUMUFtUMQ:flffli(WOfW恥师00嗣靳眄fffioeo即ofdfIFtfSFzfafj)fctf.由于BIOS程序此时已经执行
12、完毕,输入调试命令xp/1024b0 x0000验证此时BIOS中断向量表已经被载入。炳B-n-rlwforVinavsConsol*bnchE:”x|)yl024bBxIMeH(hiinlidl;泅即商阴观。的盹。減Cbutfu?*xffAx88MUtixUffidMHtimiUtdUMMUSaCbous-*fHxRBIhtJShuMiWtlWWRWRflniKOiuuus*pKrr弧盹旳tpMhUUHIWHIWUiMJHflWLStiiDus*_wfFnwaBBbtramHWHHMWtmun$*Nflf晞弗0Kf9wUMtJHUWUMHMCI2Sd?u3*_KffUmOBfctfBXHEW
13、AHAFWnBHFniH3lChnyiis*xff阳胸加捋泅砂恋胸翊Q的覘3抽bD?us*xff9mUHthcfSCDDfus*9测也00厲0酣盹酮*;lti4:32i4U:叭;&!64:?2:a如SxbJHz53flxiSQ:小Hk5Jax&?0k2caxiltfUxffAxffkixff0 xrntixffKff0Kf貼刖MkUHUKHWKHHk(0UkFRvFRHxfHBwfUHwfHSxfUSxu00k3Uw53曲;3ftx7畅539如x4dDxfeg.输入调试命令xp/512b0 x7c00显示软盘引导扇区程序的所有字节码。观察此 块内存最开始的两个字节分别为Oxeb和0 x6d,这
14、和引导程序第一条指令的字节码(eb6d)是相同的。h.输入调试命令xp/512b0 x0600验证图3-2中第一个用户可用区域是空白的。PQfhSf4TYindows.明利事Eht55Dxjabochs1:出胡團B她删前的哺昭bD-U3+UmUHxSUxUbdBwnpnHnnfwnmiwGnflcba-uc-+wBRBxM內3x80KeweeeeeoeeoeGie-Kfm0 xeUxW昭如RxfMiexee恢踽exse加测欧ee口前。UMeeflMeeAweeQxflOuKeeHflB。丽0exflopMeeUxUDBnWflUmWUBMnnSk90exaoflMaeexauexiin输入调试
15、命令xp/512b0 x7e00验证图3-2中第二个用户可用区域是空白的。3kOHUxOBHxBfl:lMEtk兰=12、XH/Sl21)0t7enH4抽aKanSnVD0M00BnCIB孤腼UmUUHxHn她DOxflSOkU0HkRHUkUHxfiHUhHUBxBWQxfleUvUMHxQFlUxtMU0MOUk00 x06d泗UkEWAxWUKtiUHxtw虹朝HxRA伽32北A他砂V2nBacMforItMows-CtnutiLe旦蛇酗H覘由加凶托曲wHHwUEtBmIMXflfWAFIfiranE!07tBfiCd仙”IrQ”Er则和呼x000i*0O0es7citixHUxH0Bx
16、INda24xflRAx00RxRflzQ泗0丽洲商酣即*2Pbo?U5*IkUUkHBOmIKI湖圜酗謂伽吧11尸kHBmOB關:K0fl解丽IH卿M阳科JQhog5*K0U弧餉thitttjxUmJHUtNdtiGHJH7e3bo?uE*icenDxBHBscBHxR邮HBHIWq丽冊匸锄*k09弘百&0mB&KUtWIMNIMMEWHr?eCbogus*X0HSxBB酝B8兀円腼BRflCWMEWtV?甲芝lifl*naa旺00胁腼肛的SwH0uKoaexsaj.自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是空白的。u厂Vindaws一CtansaleElhwa
17、BeBMBHHEMEniiE7C14g(i+QBQSmBOUWEOwflDHxflF)RxRf!liBMfMKbmclw:14*M;p/SlSbfcttfdffLb4chs=JeHxUiHUUUtK3MBtfVfdffogii3r+S=G91CHUUxUtlUxtl虹仙UxHOHxQ69BmBBBmB0HM0IWRIR80R0PI09fe07dvguuti-+M=400K009M0 x80OxsaUmSO0m0&MteWiimgusi:+14-IMUxiHU旳仙UxtfttBwOBBwMHxnmnHnmRraiffe17矶mu却二Hk$JRRxHRRxdRKe缶回刃盼盹HxUHdUEWtHMW
18、QfclfCbogg*32=虹圖HkHWUx43UUxUHUxHHUxeE)BmSDBxtWlnxBEHaiMBBHNVfe27;RxRflRxflRHxflHRmH9w096m00h0B测跑幅=x0她。驭仙001eaaxUHHhUSMhBEhXiHMEIMEk90E!a9fe37bo昌+S:(ixBflBxiBSOxMOmABRxHSHmHSBxXR9x60000000000?Fc3f=0jc688k0603SsaaixUUMmMHMxHEJk.输入调试命令xp/512bOxaOOOO验证图3-2中上位内存已经被系统占用。HOruSSOmUWnoBpflSboguaf瓠0 x/rxpSl2h
19、BxauUuUrharhEl:IlHff町HRwffoKrrBxffeKrfUwffBMrrBKFfArrBxffHxfFSxffOxfraxffOxffSxffflKfrKifKffflNf-fB心Rsff0JtfTHKff0MffdxfJfHxffQMxffUfFFUxff鹉fF3432勺少48&64BS899b10-ft*7QqclisfarVijidavs-ConfaloaBxffBxffEhtf屜师筒0丽胴0溯庇阳4boyUiExffaxrr9xftxHIWUHtllWUHHaHHiabDgan*xffBxffEhtJfR”(i胸HHflRRhig+BxrraxffexffMMlft
20、WtNWUHUiWaHlf4ibous*BwfFEhffBbtfFRwAMREIRFWhau;BHffaff0k1f日泅躍0泅aSQQtia胸卿bo?U3*MffUwffthcffAMFnnnflFK&WRaViMViboyus-KxffBxffBx/fBxaMBeQae000aoiaHxFfa0 xrrflxff0 xrrHxFf9xffQxffUxffflxfUxffnMrrMxfFHxfFuKrrfiKffHkfrUKftfHxffUxffnHffMfHkTFflMffUxfFHscfFBMffBwfffluffUMff自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用
21、。EBarMfBT-CcflalaEBarMfBT-Ccflala bochs:lbS1311BxDFfdff0 xdc0 x76叹60 x6AflxVc0 xcUEJkUcMH卑皿叶拠歸*flxrcBhccUmccHncccutrn0XCCHmccSk7RtfxWUkToDH6cQwlS吐铀KCG0MCGMkccUytltaMcfttHkM32iW-4A:84;RhB圜D湘脚B00iTdfFbngua*缶W触细岭阀UmUMJUHHEWUHUfFeMF/:0r37Hx2fflkFIHBufc皿咖04睥:缶7翻i:Hxlfi0 xffHxffetwt:RAMA;iRWB8x(306mHBHxff
22、Hmc?050 xSKi7aeibo匚hy;:L号m:卩/8h0 x1S%Lh0k1416LbochsJ*HxMHHUBeiHBiNI0161tiCJbogustBxc2Bw04调试加载程序Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行)。按照下面的步骤调试上述过程:在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令(第755行)7550000014FFF1517010080calldwordva_ImageEntry计算此条指
23、令的物理地址要复杂一些:偏移地址实际上是相对于节(节SECTION是NASM汇编中的概念)开始的。由于在boot.asm程序中只有一个节,所以之前计算的结果都是正确的,但是在loader.asm程序中有两个节,并且此条指令是在第二个节中。下面引用的代码是loader.lst中第一个节的最后一条指令(第593行)593000003C1C20600ret6因为第一个节中最后一条指令的偏移为0 x03c1,并占用了3个字节(字节码为C20600),所以可以计算出进入内核执行的指令所在的物理地址为0 x1513(0 x1000+0 x03c1+0 x3+0 x14f)。使用添加物理地址断点的调试命令p
24、b0 x1513添加一个断点。输入调试命令c继续执行,到断点处中断。在Console窗口中显示要执行的下一条指令(注意,此时的逻辑地址都为虚拟地址):(0)0 x000015130008:0000000080001513(unk.ctxt):calldwordptrds:0 x80001117;ff1517110080由于这里使用了函数指针的概念,所以,根据反汇编指令可以确定内核入口点函数的地址就保存在虚拟地址0 x8000117处的四个字节中。使用查看虚拟内存的调试命令x/1wx0 x80001117查看内存中保存的32位函数入口地址,在Console窗口中会输出类似下面的内容:0 x000
25、0000080001117:0 x800*记录下此块内存中保存的函数地址,后面的实验会验证内核入口点函数的地址与此地址是一致的。调试内核:.在OSLab的“项目管理器”窗口中打开ke文件夹中的start.c文件,此文件中只定义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。.在KiSystemStartup函数中的代码行(第61行)KiInitializePic();添加一个断点。.现在可以在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。.在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加
26、监视”,KiSystemStartup函数就被添加到了“监视”窗口中。在“监视”窗口中可以看到此函数地址为void(PVOID)0 x800*与在虚拟内存x80001117处保存的函数入口地址相同,说明的确是由Loader程序进入了操作系统内核。.按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。EOS启动后的状态和行为.在控制台中输入命令“ver”后按回车。.输出EOS版本后的控制台如图10-4所示。使用ver命令查看EOS的版本号。查看EOS启动后的进程和线程的信息:.在控制台中输入命令pt”后按回车。.输出的进程和线程信息如图所示。chsforiiidu日DiLsplayiCBlH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆第二师范学院《大数据与数据分析》2023-2024学年第二学期期末试卷
- 厂内运输合同范本
- 2025年度房地产开发项目贷款担保抵押合同
- 遗产赠予合同范本
- 14《小狗学叫》教学设计-2024-2025学年三年级上册语文统编版
- 人教版(三起)(2001)三年级上册《第14课 给图画添加文字》教学设计
- Unit2 English and Chinese Reading Room(教学设计)-2024-2025学年教科版(2024)英语三年级上册
- 杭州浙江杭州市钱塘区青少年宫招聘10人笔试历年参考题库附带答案详解
- 《农产品区域公用品牌监测技术规范》(征求意见稿)
- Unit 6 Lesson 31教学设计 -2024-2025学年冀教版八年级英语上册
- 培训课件:律师客户沟通技巧
- 2025年春新外研版(三起)英语三年级下册课件 Unit5第1课时Startup
- 2025年春新外研版(三起)英语三年级下册课件 Unit1第2课时Speedup
- 生物新教材培训的心得体会
- 中医预防流感知识讲座
- 上海市2024年中考英语试题及答案
- 临床患者体位管理
- 砂光机培训课件
- 米酒的制作流程
- 施工现场防高坠培训
- 船舶水下辐射噪声指南 2025
评论
0/150
提交评论