




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
操作系統(tǒng)實(shí)驗(yàn)報(bào)告課程名稱操作系統(tǒng)實(shí)驗(yàn)課程編號(hào)0920311實(shí)驗(yàn)工程名稱操作系統(tǒng)的啟動(dòng)學(xué)號(hào)年級(jí)2011級(jí)姓名專業(yè)軟件工程學(xué)生所在學(xué)院軟件學(xué)院指導(dǎo)教師王紅濱實(shí)驗(yàn)室名稱地點(diǎn)軟件工程實(shí)驗(yàn)室21B282哈爾濱工程大學(xué)軟件學(xué)院
第二講實(shí)驗(yàn)系統(tǒng)的啟動(dòng)一、實(shí)驗(yàn)概述1.實(shí)驗(yàn)名稱實(shí)驗(yàn)系統(tǒng)的啟動(dòng)2.實(shí)驗(yàn)?zāi)康母櫿{(diào)試EOS在PC機(jī)上從加電復(fù)位到成功啟動(dòng)的全過(guò)程,了解操作系統(tǒng)的啟動(dòng)過(guò)程。查看EOS啟動(dòng)后的狀態(tài)和行為,理解操作系統(tǒng)啟動(dòng)后的工作方式。3.實(shí)驗(yàn)類型〔驗(yàn)證、設(shè)計(jì)〕驗(yàn)證4.實(shí)驗(yàn)內(nèi)容調(diào)試EOS操作系統(tǒng)的啟動(dòng)過(guò)程包括:〔1〕.使用Bochs做為遠(yuǎn)程目標(biāo)機(jī);〔2〕.調(diào)試BIOS程序;〔3〕.調(diào)試軟盤(pán)引導(dǎo)扇區(qū)程序;〔4〕.調(diào)試加載程序;〔5〕.調(diào)試內(nèi)核;〔6〕.查看EOS啟動(dòng)后的狀態(tài)和行為二、實(shí)驗(yàn)環(huán)境操作系統(tǒng):windowsxp編譯環(huán)境:OSLab三、實(shí)驗(yàn)過(guò)程1.設(shè)計(jì)思路和流程圖CPU從默認(rèn)位置執(zhí)行BIOS的開(kāi)機(jī)自檢和初始化程序,之后BIOS將軟盤(pán)引導(dǎo)扇區(qū)加載到0x7C00并執(zhí)行。CPU從默認(rèn)位置執(zhí)行BIOS的開(kāi)機(jī)自檢和初始化程序,之后BIOS將軟盤(pán)引導(dǎo)扇區(qū)加載到0x7C00并執(zhí)行。軟盤(pán)引導(dǎo)扇區(qū)中的Boot程序開(kāi)始執(zhí)行,將軟盤(pán)根目錄中的Loader程序文件Loader.bin加載到0x1000并執(zhí)行軟盤(pán)引導(dǎo)扇區(qū)中的Boot程序開(kāi)始執(zhí)行,將軟盤(pán)根目錄中的Loader程序文件Loader.bin加載到0x1000并執(zhí)行Loader程序開(kāi)始執(zhí)行,先加載Kernel.dll,然后啟動(dòng)保護(hù)模式和分頁(yè)機(jī)制,最后跳到Kernel.dll的入口點(diǎn)執(zhí)行Loader程序開(kāi)始執(zhí)行,先加載Kernel.dll,然后啟動(dòng)保護(hù)模式和分頁(yè)機(jī)制,最后跳到Kernel.dll的入口點(diǎn)執(zhí)行Kernel.dll開(kāi)始執(zhí)行,初始化EOS內(nèi)核,EOS啟動(dòng)完畢Kernel.dll開(kāi)始執(zhí)行,初始化EOS內(nèi)核,EOS啟動(dòng)完畢圖2-1.EOS操作系統(tǒng)的啟動(dòng)過(guò)程流程圖2.需要解決的問(wèn)題及解答(1).為什么EOS操作系統(tǒng)從軟盤(pán)啟動(dòng)時(shí)要使用boot.bin和loader.bin兩個(gè)程序?使用一個(gè)可以嗎?它們各自的主要功能是什么?如果將loader.bin的功能移動(dòng)到boot.bin文件中,則boot.bin文件的大小是否仍然能保持小于512字節(jié)?答:boot文件夾包含了兩個(gè)匯編文件boot.asm和loader.asm。這兩個(gè)文件生成的二進(jìn)制文件boot.bin和loader.bin會(huì)被寫(xiě)入軟盤(pán)鏡像文件。操作系統(tǒng)啟動(dòng)時(shí)boot.bin和loader.bin引導(dǎo)軟盤(pán)加載程序,二者缺一不可。使用Boot.bin的主要功能是引導(dǎo)軟盤(pán);loader.bin的主要功能是加載程序。如果把loader.bin功能移動(dòng)到boot.bin程序中,必然導(dǎo)致程序規(guī)模擴(kuò)大,可能使其大于512字節(jié)。(2).軟盤(pán)引導(dǎo)扇區(qū)加載完畢后內(nèi)存中有兩個(gè)用戶可用的區(qū)域,為什么軟盤(pán)引導(dǎo)扇區(qū)程序選擇將loader.bin加載到第一個(gè)可用區(qū)域的0x1000處呢?這樣做有什么好處?這樣做會(huì)對(duì)loader.bin文件的大小有哪些限制。答:首先用戶只用兩個(gè)可用區(qū)域,加載位置非此即彼。第一個(gè)可用用戶區(qū)是低地址區(qū),且空間大小比擬小,適合容納小文件,所以我們選擇將占用空間小的loder.bin加載到第一用戶區(qū)。優(yōu)點(diǎn):由低地址開(kāi)始,便于檢索查找。小文件占用小空間,節(jié)約資源。限制:loader.bin文件必須小于1c00k.(3).練習(xí)使用Bochs單步調(diào)試BIOS程序、軟盤(pán)引導(dǎo)扇區(qū)程序和loader程序,加深對(duì)操作系統(tǒng)啟動(dòng)過(guò)程的理解。(4).仔細(xì)比擬實(shí)驗(yàn)指導(dǎo)10-5圖和圖10-6,嘗試說(shuō)明哪個(gè)是應(yīng)用程序的進(jìn)程,它和系統(tǒng)進(jìn)程有什么區(qū)別,哪個(gè)是應(yīng)用程序的主線程,它和系統(tǒng)線程有什么區(qū)別。答:圖10-6是應(yīng)用程序的進(jìn)程,在進(jìn)程列表中只有一個(gè)ID為1的系統(tǒng)進(jìn)程,其優(yōu)先級(jí)為24,包含有10個(gè)線程,其中的ID為2的線程是該進(jìn)程的主線程,系統(tǒng)進(jìn)程沒(méi)有映像名稱。在線程列表中有10個(gè)線程,它們都是系統(tǒng)線程。區(qū)別:主線程的優(yōu)先級(jí)別高。存放在物理內(nèi)存的低端。3.程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果1.調(diào)試BIOS程序(1).在Console窗口中輸入調(diào)試命令sreg后按回車,顯示當(dāng)前CPU中各個(gè)段存放器的值。其中CS存放器信息行中的“s=0xf000〞表示CS存放器的值為0xf000.(2).輸入調(diào)試命令r后按回車,顯示當(dāng)前CPU中各個(gè)通用存放器的值。其中“rip:0x00000000:0000fff0〞表示IP存放器的值為0xfff0。(3).輸入調(diào)試命令xp/1024b0x0000,查看開(kāi)始的1024個(gè)字節(jié)的物理內(nèi)存。在Console中輸出的這1K物理內(nèi)存的值都為0,說(shuō)明BIOS中斷向量表還沒(méi)有被加載到此處。.輸入調(diào)試命令xp/512b0x7c00,查看軟盤(pán)引導(dǎo)扇區(qū)應(yīng)該被加載到的內(nèi)存位置。輸出的內(nèi)存值都為0,說(shuō)明軟盤(pán)引導(dǎo)扇區(qū)還沒(méi)有被加載到此處。2.調(diào)試軟盤(pán)引導(dǎo)扇區(qū)程序a.輸入調(diào)試命令vb0x0000:0x7c00,這樣就在邏輯地址0x0000:0x7c00〔相當(dāng)于物理地址0x7c00〕處添加了一個(gè)斷點(diǎn)。b.輸入調(diào)試命令c繼續(xù)執(zhí)行,在0x7c00處的斷點(diǎn)中斷。中斷后會(huì)在Console窗口中輸出下一個(gè)要執(zhí)行的指令,即軟盤(pán)引導(dǎo)扇區(qū)程序的第一條指令,如下(0)[0x00007c00]0000:7c00(unk.ctxt):jmp.+0x006d(0x00007c6f);eb6dc.為了方便后面的使用,先在紙上分別記錄下此條指令的字節(jié)碼〔eb6d〕和此條指令要跳轉(zhuǎn)執(zhí)行的下一條指令的地址〔括號(hào)中的0x00007c6f〕。d.輸入調(diào)試命令sreg驗(yàn)證CS存放器〔0x0000〕的值。e.輸入調(diào)試命令r驗(yàn)證IP存放器〔0x7c00〕的值。f.由于BIOS程序此時(shí)已經(jīng)執(zhí)行完畢,輸入調(diào)試命令xp/1024b0x0000驗(yàn)證此時(shí)BIOS中斷向量表已經(jīng)被載入。g.輸入調(diào)試命令xp/512b0x7c00顯示軟盤(pán)引導(dǎo)扇區(qū)程序的所有字節(jié)碼。觀察此塊內(nèi)存最開(kāi)始的兩個(gè)字節(jié)分別為0xeb和0x6d,這和引導(dǎo)程序第一條指令的字節(jié)碼〔eb6d〕是相同的。h.輸入調(diào)試命令xp/512b0x0600驗(yàn)證圖3-2中第一個(gè)用戶可用區(qū)域是空白的。i.輸入調(diào)試命令xp/512b0x7e00驗(yàn)證圖3-2中第二個(gè)用戶可用區(qū)域是空白的。j.自己設(shè)計(jì)兩個(gè)查看內(nèi)存的調(diào)試命令,分別驗(yàn)證這兩個(gè)用戶可用區(qū)域的高地址端也是空白的。k.輸入調(diào)試命令xp/512b0xa0000驗(yàn)證圖3-2中上位內(nèi)存已經(jīng)被系統(tǒng)占用。l.自己設(shè)計(jì)一個(gè)查看內(nèi)存的調(diào)試命令,驗(yàn)證上位內(nèi)存的高地址端已經(jīng)被系統(tǒng)占用。查看boot.lst文件(1).在“工程管理器〞窗口中,右鍵點(diǎn)擊“boot〞文件夾中的boot.asm文件。(2).在彈出的快捷菜單中選擇“翻開(kāi)生成的列表文件〞,在源代碼編輯器中就會(huì)翻開(kāi)文件boot.lst。(3).將boot.lst文件和boot.asm文件比照可以發(fā)現(xiàn),此文件包含了boot.asm文件中所有的匯編代碼,同時(shí)在代碼的左側(cè)又添加了更多的信息。(4).在boot.lst中查找到軟盤(pán)引導(dǎo)扇區(qū)程序第一條指令所在的行〔第73行〕7300000000EB6DjmpshortStart此行包含的信息有:73是行號(hào)。00000000是此條指令相對(duì)于程序開(kāi)始位置的偏移〔第一條指令應(yīng)該為0〕。EB6D是此條指令的字節(jié)碼,和之前記錄下來(lái)的指令字節(jié)碼是一致的。軟盤(pán)引導(dǎo)扇區(qū)程序的主要任務(wù)就是將軟盤(pán)中的loader.bin文件加載到物理內(nèi)存的0x1000處,然后跳轉(zhuǎn)到loader程序的第一條指令〔物理地址0x1000處的指令〕繼續(xù)執(zhí)行l(wèi)oader程序。按照下面的步驟調(diào)試此過(guò)程:(1).在boot.lst文件中查找到加載完畢loader.bin文件后要跳轉(zhuǎn)到loader程序中執(zhí)行的指令〔第278行〕27800000181EA00100000jmp0:LOADER_ORG根據(jù)此指令相對(duì)于程序開(kāi)始〔0x7C00〕的偏移〔0x0181〕可以得到此指令的邏輯地址為0x0000:7D81。(2).輸入調(diào)試命令vb0x0000:0x7d81添加一個(gè)斷點(diǎn)。(3).輸入調(diào)試命令c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在Console窗口中顯示(0)[0x00007d81]0000:7d81(unk.ctxt):jmpfar0000:1000;ea00100000此條指令會(huì)跳轉(zhuǎn)到物理內(nèi)存0x1000處〔即Loader程序的第一條指令〕繼續(xù)執(zhí)行。(4).按照翻開(kāi)boot.lst文件的方法翻開(kāi)loader.lst文件,并在此文件中查找到loader程序的第一條指令〔第33行〕3300000000E91801jmpStart(5).輸入調(diào)試命令xp/8b0x1000查看內(nèi)存0x1000處的數(shù)據(jù),驗(yàn)證此塊內(nèi)存的前三個(gè)字節(jié)和loader.lst文件中的第一條指令的字節(jié)碼是相同的。(6).根據(jù)之前記錄的loader.bin文件的大小,自己設(shè)計(jì)一個(gè)查看內(nèi)存的調(diào)試命令,查看內(nèi)存中l(wèi)oader程序結(jié)束位置的字節(jié)碼,并與loader.lst文件中最后指令的字節(jié)碼比擬,驗(yàn)證loader程序被完全加載到了正確的位置。調(diào)試加載程序Loader程序的主要任務(wù)是將操作系統(tǒng)內(nèi)核〔kernel.dll文件〕加載到內(nèi)存中,然后讓CPU進(jìn)入保護(hù)模式并且啟用分頁(yè)機(jī)制,最后進(jìn)入操作系統(tǒng)內(nèi)核開(kāi)始執(zhí)行〔跳轉(zhuǎn)到kernel.dll的入口點(diǎn)執(zhí)行〕。按照下面的步驟調(diào)試上述過(guò)程:(1).在loader.lst文件中查找到準(zhǔn)備進(jìn)入EOS操作系統(tǒng)內(nèi)核執(zhí)行的指令〔第755行〕7550000014FFF15[17010080]calldword[va_ImageEntry](2).計(jì)算此條指令的物理地址要復(fù)雜一些:偏移地址實(shí)際上是相對(duì)于節(jié)〔節(jié)SECTION是NASM匯編中的概念〕開(kāi)始的。由于在boot.asm程序中只有一個(gè)節(jié),所以之前計(jì)算的結(jié)果都是正確的,但是在loader.asm程序中有兩個(gè)節(jié),并且此條指令是在第二個(gè)節(jié)中。下面引用的代碼是loader.lst中第一個(gè)節(jié)的最后一條指令〔第593行〕593000003C1C20600ret6因?yàn)榈谝粋€(gè)節(jié)中最后一條指令的偏移為0x03c1,并占用了3個(gè)字節(jié)〔字節(jié)碼為C20600〕,所以可以計(jì)算出進(jìn)入內(nèi)核執(zhí)行的指令所在的物理地址為0x1513〔0x1000+0x03c1+0x3+0x14f〕。(3).使用添加物理地址斷點(diǎn)的調(diào)試命令pb0x1513添加一個(gè)斷點(diǎn)。(4).輸入調(diào)試命令c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在Console窗口中顯示要執(zhí)行的下一條指令〔注意,此時(shí)的邏輯地址都為虛擬地址〕:(0)[0x00001513]0008:0000000080001513(unk.ctxt):calldwordptrds:0x80001117;ff1517110080由于這里使用了函數(shù)指針的概念,所以,根據(jù)反匯編指令可以確定內(nèi)核入口點(diǎn)函數(shù)的地址就保存在虛擬地址0x8000117處的四個(gè)字節(jié)中。(5).使用查看虛擬內(nèi)存的調(diào)試命令x/1wx0x80001117查看內(nèi)存中保存的32位函數(shù)入口地址,在Console窗口中會(huì)輸出類似下面的內(nèi)容:0x0000000080001117<bogus+0>:0x800*****記錄下此塊內(nèi)存中保存的函數(shù)地址,后面的實(shí)驗(yàn)會(huì)驗(yàn)證內(nèi)核入口點(diǎn)函數(shù)的地址與此地址是一致的。調(diào)試內(nèi)核:(1).在OSLab的“工程管理器〞窗口中翻開(kāi)ke文件夾中的start.c文件,此文件中只定義了一個(gè)函數(shù),就是操作系統(tǒng)內(nèi)核的入口點(diǎn)函數(shù)KiSystemStartup。(2).在KiSystemStartup函數(shù)中的代碼行〔第61行〕KiInitializePic();添加一個(gè)斷點(diǎn)。(3).現(xiàn)在可以在Console窗口中輸入調(diào)試命令c繼續(xù)調(diào)試,在剛剛添加的斷點(diǎn)處中斷。(4).在start.c源代碼文件中的KiSystemStartup函數(shù)名上點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加監(jiān)視〞,KiSystemStartup函數(shù)就被添加到了“監(jiān)視〞窗口中。在“監(jiān)視〞窗口中可以看到此函數(shù)地址為{void(PVOID)}0x800*****<KiSystemStartup>與在虛擬內(nèi)存x80001117處保存的函數(shù)入口地址相同,說(shuō)明確實(shí)是由Loader程序進(jìn)入了操作系統(tǒng)內(nèi)核。(5).按F5繼續(xù)執(zhí)行EOS操作系統(tǒng)內(nèi)核,在Display窗口中顯示EOS操作系統(tǒng)已經(jīng)啟動(dòng),并且控制臺(tái)程序已經(jīng)開(kāi)始運(yùn)行了。EOS啟動(dòng)后的狀態(tài)和行為(1).在控制臺(tái)中輸入命令“ver〞后按回車。(2).輸出EOS版本后的控制臺(tái)。查看EOS啟動(dòng)后的進(jìn)程和線程的信息:(1).在控制臺(tái)中輸入命令“pt〞后按回車。(2).輸出的進(jìn)程和線程信息如下圖。查看有應(yīng)用程序運(yùn)行時(shí)進(jìn)程和線程的信息:1.在OSLab中選擇“調(diào)試〞菜單中的“停止調(diào)試〞,結(jié)束之前的調(diào)試。2.在O
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 光伏裝配示范復(fù)合項(xiàng)目實(shí)施方案
- 構(gòu)建高效邊遠(yuǎn)地區(qū)醫(yī)學(xué)救援體系方案
- 供熱一次管網(wǎng)更新改造項(xiàng)目可行性研究報(bào)告
- 山西省朔州市懷仁市第九中學(xué)高中部2023-2024學(xué)年高一上學(xué)期11月期中地理 含解析
- 長(zhǎng)江師范學(xué)院《網(wǎng)絡(luò)創(chuàng)業(yè)與創(chuàng)業(yè)管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 定西職業(yè)技術(shù)學(xué)院《幼兒歌曲伴奏與彈唱(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 郴州思科職業(yè)學(xué)院《昆蟲(chóng)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南開(kāi)大學(xué)濱海學(xué)院《過(guò)程仿真》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南理工學(xué)院《機(jī)器學(xué)習(xí)與模式識(shí)別》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林動(dòng)畫(huà)學(xué)院《金屬腐蝕學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 電鍍有限公司雙體系資料之風(fēng)險(xiǎn)分級(jí)管控體系實(shí)施手冊(cè)
- 材料力學(xué)第4版單輝祖習(xí)題答案
- 【醫(yī)院管理案例學(xué)習(xí)】-床單位終末消毒標(biāo)準(zhǔn)的執(zhí)行
- 暗挖格柵加工技術(shù)交底
- 2023年安徽省公安機(jī)關(guān)警務(wù)輔助人員條例訓(xùn)練題庫(kù)211題及答案
- EMS概要設(shè)計(jì)說(shuō)明書(shū)計(jì)費(fèi)模塊
- 礦山安全培訓(xùn)課件-礦山地質(zhì)安全
- (完整)被動(dòng)防護(hù)網(wǎng)施工方案
- 《高層建筑火災(zāi)撲救》教學(xué)課件
- 東師《德育與班級(jí)管理》題庫(kù)與答案
- 江西省醫(yī)療服務(wù)價(jià)格手冊(cè)
評(píng)論
0/150
提交評(píng)論