操作系統(tǒng)的啟動_第1頁
操作系統(tǒng)的啟動_第2頁
操作系統(tǒng)的啟動_第3頁
操作系統(tǒng)的啟動_第4頁
操作系統(tǒng)的啟動_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、探作集儻實驗報告課程名稱操作系統(tǒng)實驗課程編號實驗項目名稱操作系統(tǒng)的啟動學(xué)號班級姓名專業(yè)計算機科學(xué)與技術(shù)學(xué)生所在學(xué)院計算機科學(xué)與技術(shù)學(xué)院指導(dǎo)教師王紅濱實驗室名稱地點21B 475哈爾濱工程大學(xué)計算機科學(xué)與技術(shù)學(xué)院一、實驗概述1. 實驗名稱操作系統(tǒng)的啟動2. 實驗?zāi)康?)跟蹤調(diào)試EOS在PC機上從加電復(fù)位到成功啟動的全過程,了解 操作系統(tǒng)的啟動過程。2)查看EOS啟動后的狀態(tài)和行為,理解操作系統(tǒng)啟動后的工作方式。3. 實驗類型驗證型實驗4. 實驗內(nèi)容1)準備實驗生成 EOS Kernel 項 U,查看 boot.asm 和 loader.asm 生成的 boot.bin 文件和loader.bin

2、文件的大小。2)調(diào)試EOS操作系統(tǒng)的啟動過程1使用Bochs做為遠程目標機2調(diào)試BIOS程序3調(diào)試軟盤引導(dǎo)扇區(qū)程序4調(diào)試加載程序5調(diào)試內(nèi)核6 EOS啟動后的狀態(tài)和行為二、實驗環(huán)境操作系統(tǒng):Windows操作系統(tǒng)編譯器:集成開發(fā)環(huán)境OSLab工具:Floppy Image Editor 111具、Bochs 模擬器語言:C語言、NASM匯編三、實驗過程1. 設(shè)計思路和流程圖EOS操作系統(tǒng)的啟動過程流程如圖1所示:CPU從默認位置執(zhí)行BIOS的開機自檢和初始化程序.之后BIOS將軟盤引導(dǎo)扇區(qū)加裁到0x7C00并執(zhí)行J廠、軟盤引導(dǎo)國區(qū)豐的Boot程序開始執(zhí)行.將軟盤根目錄中的Loader程序文件Lo

3、ader.bin 加載到0x1000并執(zhí)行<Loader程序開始執(zhí) 行.先加栽 Kernel, dl I.然后啟 動保護模式和分頁機 制,最后跳到Kernel, dl I 的入口 點執(zhí)行8 / 8圖1操作系統(tǒng)的啟動流程EOS操作系統(tǒng)的啟動過程的調(diào)試如圖2所示:使用Bochs做為遠程目標機調(diào)試BIOS程序調(diào)試軟盤引調(diào)試加栽程 導(dǎo)扇區(qū)程序1序調(diào)試內(nèi)核EOS啟動后的狀態(tài)和行為圖2調(diào)試過程2. 需要解決的問題及解答1)為什么EOS操作系統(tǒng)從軟盤啟動時要使用boot.bin和loader.bin兩個程 序?使用一個可以嗎?它們各自的主要功能是什么?如果將loader.bin的功能移 動到boot.

4、bin文件中,則boot.bin文件的大小是否仍然能保持小于512字節(jié)?答:BIOS將軟盤引導(dǎo)扇區(qū)加載到0x7c00并開始執(zhí)行后,軟盤引導(dǎo)扇區(qū)中的 boot.bin開始執(zhí)行,并將軟盤根LI錄總的loader.bin加載到0x1000并執(zhí)行; loader.bin的主要功能是加載程序,先加載Kernel.dll,然后啟動保護模式和分頁 機制,最后跳到Kernel.dll的入口點執(zhí)行。如果將loader.bin功能移動到boot.bin 文件中,會使程序規(guī)模擴大,可能使boot.bin文件的大小大于512字節(jié)。2)軟盤引導(dǎo)扇區(qū)加載完畢后內(nèi)存中有兩個用戶可用的區(qū)域,為什么軟盤引 導(dǎo)扇區(qū)程序選擇將lo

5、ader.bin加載到第一個可用區(qū)域的0x1000處呢?這樣做有什 么好處?這樣做會對文件的大小有哪些限制。答:用戶只用兩個可用區(qū)域,第一個可用用戶區(qū)是低地址區(qū),地址范圍為 0x06000x7c00,空間大小比較小,可以容納loader.bin,所以我們選擇loder.bin 加載到較小的第一用戶區(qū)。這樣做的好處是loader.bin占用小空間,節(jié)約資源。 限制是loader.bin文件必須小于30208字節(jié)。3)根據(jù)之前記錄的loader.bin文件的大小,自己設(shè)計一個査看內(nèi)存的調(diào)試 命令,查看內(nèi)存中l(wèi)oader程序結(jié)束位置的字節(jié)碼,并與loader.lst文件中最后指 令的字節(jié)碼比較,驗證

6、loader程序被完全加載到了正確的位置答:loader.bin的文件大小為1566字節(jié),轉(zhuǎn)換為16進制則為0x6le字節(jié), loader.bin被加載到Ox 1000處執(zhí)行,則loader的結(jié)束位置應(yīng)該為0x1000+0x6le 即為0xl61e處,如果查看最后8字節(jié)的話,應(yīng)該在結(jié)尾位置向上偏移8字節(jié), 即 0X1616,命令為 xp/8b 0x1616。4)仔細比較實驗指導(dǎo)10-5圖和圖106,嘗試說明哪個是應(yīng)用程序的進程, 它和系統(tǒng)進程有什么區(qū)別,哪個是應(yīng)用程序的主線程,它和系統(tǒng)線程有什么區(qū)別。答:圖10-6中ID為31的進程是應(yīng)用程序的進程,ID為1的進程為系統(tǒng)進 程,ID為33的線程

7、為應(yīng)用程序的主線程,ID為2的線程是系統(tǒng)進程的主線程, 系統(tǒng)線程的優(yōu)先級別高,存放在物理內(nèi)存的低端。3. 程序運行時的初值和運行結(jié)果1)調(diào)試BIOS在Console窗口中輸入調(diào)試命令sreg后按回車,顯示當前CPU中各個段 寄存器的值,輸入調(diào)試命令r后按回車,顯示當前CPU中各個通用寄存器的 值,輸入調(diào)試命令xp /1024b 0x0000,查看開始的1024個字節(jié)的物理內(nèi)存。在Console中輸出的這1K物理內(nèi)存的值都為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)調(diào)試軟盤引導(dǎo)扇區(qū)程序軟盤引導(dǎo)扇區(qū)程序的主要任務(wù)就是將軟盤中的loader.bin文件加載到物理 內(nèi)存的0x1000處,然后跳轉(zhuǎn)到loader程序的第一條指令(物理地址0x1000處 的指令)繼續(xù)執(zhí)行l(wèi)oader程序。按照下面的步驟調(diào)試此過程:輸入調(diào)試命令vb 0x0000:0x7d81添加一個斷點。輸入調(diào)試命令c繼續(xù)執(zhí)行, 到斷點處中斷。在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結(jié)束后的跳轉(zhuǎn)地址此條指令會跳轉(zhuǎn)到物理內(nèi)存0x1000處(即Loader程序的第一條指令)繼續(xù)執(zhí) 行。3)調(diào)試加載程序Loader程序的主要任務(wù)是將操作系統(tǒng)內(nèi)核(kemel.dll文件)加載到內(nèi)存中, 然

14、后讓CPU進入保護模式并且啟用分頁機制,最后進入操作系統(tǒng)內(nèi)核開始執(zhí)行 (跳轉(zhuǎn)到kernel.dll的入口點執(zhí)行)。01532331341按照打開boot.1st文件的方法打開loader. 1st文件,并在此文件中查找到 loader程序的第一條指令(第33行)org 0x1000 jmp Start3233 00000000 E9180134圖7查看loader程序的第一條指令輸入調(diào)試命令xp/8b 0x1000查看內(nèi)存0x1000處的數(shù)據(jù),驗證此塊內(nèi)存的前 三個字節(jié)和loader.lst文件中的第一條指令的字節(jié)碼是相同的。根據(jù)之前記錄的loader.bin文件的大小,自己設(shè)計一個查看內(nèi)存的

15、調(diào)試命 令,查看內(nèi)存中l(wèi)oader程序結(jié)束位置的字節(jié)碼,并與loader.lst文件中最后指令 的字節(jié)碼比較,驗證loader程序被完全加載到了正確的位置。因為loader.bin的文件大小為1566字節(jié),轉(zhuǎn)換為16進制則為0x61e字節(jié), loader.bin被加載到Ox 1000處執(zhí)行,則loader的結(jié)束位置應(yīng)該為0x1000+0x6le, 即為0xl61e處,如果查看最后8字節(jié)的話,應(yīng)該在結(jié)尾位置向上偏移8字節(jié), 即 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處的數(shù)據(jù).CONTINUE:sub <lvord ebp 十 pSectionKeaderl, 0x28 . pSectionHeader - de

17、c dvard cbp + dxScctions. wfkiwbcrOfScctions -jmp LOJPBREAK:leaveret 4:圖9 loader程序結(jié)束位置的字節(jié)碼在0x1513添加斷點,繼續(xù)運行在斷點處中斷,在Console窗口顯示要執(zhí)行的下一條命令,查看內(nèi)存中保存的32位函數(shù)入口地址,記錄函數(shù)地址。<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函數(shù)入口地址4) 調(diào)試內(nèi)核為start.c源代碼文件中KiSystemStartup函數(shù)添加監(jiān)視,與所記錄的虛擬內(nèi)存 0x80018130處保存的入口地址一致,說明的確與loader程序進入操作系統(tǒng)內(nèi)核。名稱值丄類型KiSystemStartup

19、void (PVOID) 0x80018130 KKiSystemStartupvoid (FVOID) I圖11確認函數(shù)地址繼續(xù)執(zhí)行,啟動EOS。5) EOS啟動后的狀態(tài)和行為查看EOS的版本號,在控制臺中輸入命令“ver”后按回車。輸出EOS版 本號后的控制臺如圖12所示。圖12 EOS的版本號查看EOS啟動后的進程和線程的信息,在控制臺中輸入命令“pL后按回 車,輸岀的進程和線程信息如圖13所示。<2 Bochs for Tindows - Disrl ay旦區(qū)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中選擇“調(diào)試”菜單中的“停止調(diào)試”,結(jié)束之前的調(diào)試。在OS Lab "項目管理器”窗口中雙擊Floppy.img文件,使用FloppylmageEditor工具打 開此軟盤鏡像文件。打開配套資源“學(xué)生包”,在其中找到本實驗對應(yīng)的文件夾。 將本實驗文件夾中的Hcllo.exe文件拖動到FloppylmageEditor工具窗口的文 件列表中釋放,Hello.exe文件即被添加到軟盤鏡徹文件中。Hello.exe 個EOS 應(yīng)用程序,在FloppylmageEditor中選擇“文件”菜單中的“保存”后關(guān)閉 FloppylmageEditoro按F5啟動調(diào)試。待EOS啟動完畢,在EOS控制臺中輸 入命令“hello”后按回車。此時Hello.exe應(yīng)用程序就開始執(zhí)行。迅速按Ctrl+F2 切換到控制臺2,并輸入命令“pt”后按回車。輸出的進程和線程信息如圖15 所示。Hochs for Windows - Displ ayji®圖14控制臺he

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論