




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)實(shí) 驗(yàn) 報(bào) 告課程名稱操作系統(tǒng)實(shí)驗(yàn)課程編號(hào)0906553實(shí)驗(yàn)項(xiàng)目名稱操作系統(tǒng)的啟動(dòng)學(xué)號(hào)年級(jí)姓名專業(yè)學(xué)生所在學(xué)院指導(dǎo)教師實(shí)驗(yàn)室名稱地點(diǎn) 哈爾濱工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院第二講 操作系統(tǒng)的啟動(dòng)一、實(shí)驗(yàn)概述1. 實(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)證4. 實(shí)驗(yàn)內(nèi)容準(zhǔn)備實(shí)驗(yàn)調(diào)試EOS操作系統(tǒng)的啟動(dòng)過(guò)程二、實(shí)驗(yàn)環(huán)境EOS操作系統(tǒng)和OS Lab集成實(shí)驗(yàn)環(huán)境,主要運(yùn)用了C語(yǔ)言。三、實(shí)驗(yàn)過(guò)程1. 源程序并附上注釋/*提供該示例代碼是為了闡釋一個(gè)
2、概念,或者進(jìn)行一個(gè)測(cè)試,并不代表著最安全的編碼實(shí)踐,因此不應(yīng)在應(yīng)用程序或網(wǎng)站中使用該示例代碼。對(duì)于超出本示例代碼的預(yù)期用途以外的使用所造成的偶然或繼發(fā)性損失,北京英真時(shí)代科技有限公司不承擔(dān)任何責(zé)任。*/#include "EOSApp.h"int main(int argc, char* argv)int i;for (i = 1; i <= 5; i+) printf("Hello,world! %dn", i);Sleep(1000);printf("Bye-bye!n");return 0;2. 程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果
3、2.1 準(zhǔn)備實(shí)驗(yàn) 1. 啟動(dòng)OS Lab。 2. 新建一個(gè)EOS Kernel項(xiàng)目。 3. 在“項(xiàng)目管理器”窗口中打開(kāi)boot文件夾中的boot.asm和loader.asm兩個(gè)匯編文件。boot.asm是軟盤(pán)引導(dǎo)扇區(qū)程序的源文件,loader.asm是loader程序的源文件。 4. 按F7生成項(xiàng)目。5. 生成完成后,使用Windows資源管理器打開(kāi)項(xiàng)目文件夾中的Debug文件夾。找到由 boot.asm生成的軟盤(pán)引導(dǎo)扇區(qū)程序boot.bin文件,該文件的大小一定為512字節(jié)(與軟盤(pán)引導(dǎo)扇區(qū)的大小一致)。找到由loader.asm生成的loader程序loader.bin文件,記錄下此文件的
4、大小1566字節(jié)。找到由其它源文件生成的操作系統(tǒng)內(nèi)核kernel.dll。 2.2 調(diào)試EOS操作系統(tǒng)的啟動(dòng)過(guò)程 2.2.1 使用Bochs做為遠(yuǎn)程目標(biāo)機(jī) 按照下面的步驟將調(diào)試時(shí)使用的遠(yuǎn)程目標(biāo)機(jī)修改為Bochs: 1. 在“項(xiàng)目管理器”窗口中,右鍵點(diǎn)擊項(xiàng)目節(jié)點(diǎn),在彈出的快捷菜單中選擇“屬性”。 2. 在彈出的“屬性頁(yè)”對(duì)話框右側(cè)的屬性列表中找到“遠(yuǎn)程目標(biāo)機(jī)”屬性,將此屬性值修改為“Bochs Debug”(此時(shí)按F1可以獲得關(guān)于此屬性的幫助)。 3. 點(diǎn)擊“確定”按鈕關(guān)閉“屬性頁(yè)”對(duì)話框。接下來(lái)就可以使用Bochs模擬器調(diào)試BIOS程序和軟盤(pán)引導(dǎo)扇區(qū)程序了。 2.2.2 調(diào)試BIOS程序 按F
5、5啟動(dòng)調(diào)試,此時(shí)會(huì)彈出兩個(gè)Bochs窗口。標(biāo)題為“Bochs for windows - Display”的窗口相當(dāng)于計(jì)算機(jī)的顯示器,顯示操作系統(tǒng)的輸出。標(biāo)題為“Bochs for windows - Console”的窗口是Bochs的控制臺(tái),用來(lái)輸入調(diào)試命令,輸出各種調(diào)試信息。 啟動(dòng)調(diào)試后,Bochs在CPU要執(zhí)行的第一條指令(即BIOS的第一條指令)處中斷。 此時(shí),Display窗口沒(méi)有顯示任何內(nèi)容,Console窗口顯示要執(zhí)行的BIOS第一條指令的相關(guān)信息,并等待用戶輸入調(diào)試命令。從Console窗口顯示的內(nèi)容中,我們可以獲得關(guān)于BIOS第一條指令的如下信息: (1)行首的0xffff
6、fff0表示此條指令所在的物理地址。 (2)f000:fff0表示此條指令所在的邏輯地址(段地址:偏移地址)。 (3)jmp far f000:e05b是此條指令的反匯編代碼。 (4)行尾的ea5be000f0是此條指令的十六進(jìn)制字節(jié)碼,可以看出此條指令有5個(gè)字節(jié)。查看CPU在沒(méi)有執(zhí)行任何指令之前主要寄存器中的數(shù)據(jù),以及內(nèi)存中的數(shù)據(jù): 1. 在Console窗口中輸入調(diào)試命令sreg后按回車(chē),顯示當(dāng)前CPU中各個(gè)段寄存器的值,其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值為0xf000。2. 輸入調(diào)試命令r后按回車(chē),顯示當(dāng)前CPU中各個(gè)通用寄存器的數(shù)。其中“rip: 0x000
7、00000:0000fff0”表示IP寄存器的值為0xfff0。 3. 輸入調(diào)試命令xp /1024b 0x0000,查看開(kāi)始的1024個(gè)字節(jié)的物理內(nèi)存。在Console中輸出的這1K物理內(nèi)存的值都為0,說(shuō)明BIOS中斷向量表還沒(méi)有被加載到此處。4. 輸入調(diào)試命令xp /512b 0x7c00,查看軟盤(pán)引導(dǎo)扇區(qū)應(yīng)該被加載到的內(nèi)存位置。輸出的內(nèi)存值都為0,說(shuō)明軟盤(pán)引導(dǎo)扇區(qū)還沒(méi)有被加載到此處。 可以驗(yàn)證BIOS第一條指令所在邏輯地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器的值是一致的。由于內(nèi)存還沒(méi)有被使用,所以其中的值都為0。 2.2.3 調(diào)試軟盤(pán)引導(dǎo)扇區(qū)程序 接下來(lái)從0x7c00處
8、調(diào)試軟盤(pán)引導(dǎo)扇區(qū)程序: 1. 輸入調(diào)試命令vb 0x0000:0x7c00,這樣就在邏輯地址0x0000:0x7c00(相當(dāng)于物理地 址0x7c00)處添加了一個(gè)斷點(diǎn)。 2. 輸入調(diào)試命令c繼續(xù)執(zhí)行,在0x7c00處的斷點(diǎn)中斷。中斷后會(huì)在Console窗口中輸出下一個(gè)要執(zhí)行的指令,即軟盤(pán)引導(dǎo)扇區(qū)程序的第一條指令。3.在紙上分別記錄下此條指令的字節(jié)碼(eb6d)和此條指令要跳轉(zhuǎn)執(zhí)行的下一條指令的地址(括號(hào)中的0x00007c6f)。 4.輸入調(diào)試命令sreg驗(yàn)證CS寄存器(0x0000)的值。 5.輸入調(diào)試命令r驗(yàn)證IP寄存器(0x7c00)的值。 6.由于BIOS程序此時(shí)已經(jīng)執(zhí)行完畢,輸入調(diào)試
9、命令xp /1024b 0x0000驗(yàn)證此時(shí)BIOS中斷向量表已經(jīng)被載入。7.輸入調(diào)試命令xp /512b 0x7c00顯示軟盤(pán)引導(dǎo)扇區(qū)程序的所有字節(jié)碼。觀察此塊內(nèi)存最開(kāi)始的兩個(gè)字節(jié)分別為0xeb和0x6d,這和引導(dǎo)程序第一條指令的字節(jié)碼(eb6d)是相同的。此塊內(nèi)存最后的兩個(gè)字節(jié)分別為0x55和0xaa,表示引導(dǎo)扇區(qū)是激活的,可以用來(lái)引導(dǎo)操作系統(tǒng),這兩個(gè)字節(jié)是boot.asm中最后一行語(yǔ)句 dw 0xaa55 定義的。 8.輸入調(diào)試命令xp /512b 0x0600驗(yàn)證圖3-2中第一個(gè)用戶可用區(qū)域是空白的。 9. 輸入調(diào)試命令xp /512b 0x7e00驗(yàn)證圖3-2中第二個(gè)用戶可用區(qū)域是空
10、白的。 10. 自己設(shè)計(jì)兩個(gè)查看內(nèi)存的調(diào)試命令,分別驗(yàn)證這兩個(gè)用戶可用區(qū)域的高地址端也是的。11. 輸入調(diào)試命令xp /512b 0xa0000驗(yàn)證圖3-2中上位內(nèi)存已經(jīng)被系統(tǒng)占用。 12. 自己設(shè)計(jì)一個(gè)查看內(nèi)存的調(diào)試命令,驗(yàn)證上位內(nèi)存的高地址端已經(jīng)被系統(tǒng)占用。NASM匯編器在將boot.asm生成為boot.bin的同時(shí),會(huì)生成一個(gè)boot.lst列表文件,幫助開(kāi)發(fā)者調(diào)試boot.asm文件中的匯編代碼。按照下面的步驟查看boot.lst文件: 1. 在“項(xiàng)目管理器”窗口中,右鍵點(diǎn)擊“boot”文件夾中的boot.asm文件。 2. 在彈出的快捷菜單中選擇“打開(kāi)生成的列表文件”,在源代碼編輯
11、器中就會(huì)打開(kāi)文件boot.lst。 3. 將boot.lst文件和boot.asm文件對(duì)比可以發(fā)現(xiàn),此文件包含了boot.asm文件中所有的匯編代碼,同時(shí)在代碼的左側(cè)又添加了更多的信息。 4. 在boot.lst中查找到軟盤(pán)引導(dǎo)扇區(qū)程序第一條指令所在的行(第73行) 73 00000000 EB6D jmp short Start 此行包含的信息有: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處
12、,然后跳轉(zhuǎn)到loader程序的第一條指令(物理地址0x1000處的指令)繼續(xù)執(zhí)行l(wèi)oader程序。按照下面的步驟調(diào)試此過(guò)程: 1. 在boot.lst文件中查找到加載完畢loader.bin文件后要跳轉(zhuǎn)到loader程序中執(zhí)行的指令(第278行) 根據(jù)此指令相對(duì)于程序開(kāi)始(0x7C00)的偏移(0x0181)可以得到此指令的邏輯地址為0x0000:7D81。 2.輸入調(diào)試命令vb 0x0000:0x7d81添加一個(gè)斷點(diǎn)。 3.輸入調(diào)試命令c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在Console窗口中顯示 此條指令會(huì)跳轉(zhuǎn)到物理內(nèi)存0x1000處(即Loader程序的第一條指令)繼續(xù)執(zhí)行。 4.按照打開(kāi)boot
13、.lst文件的方法打開(kāi)loader.lst文件,并在此文件中查找到loader程序的第一條指令(第33行) 5.輸入調(diào)試命令xp /8b 0x1000查看內(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程序被完全加載到了正確的位置。 2.2.4 調(diào)試加載程序 Loader程序的主要任務(wù)是將操作系統(tǒng)內(nèi)核(kernel.dll文件)加載到內(nèi)存中,
14、然后讓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行) 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行) 因?yàn)榈谝粋€(gè)節(jié)中最后一條指令的偏移為0x
15、03c1,并占用了3個(gè)字節(jié)(字節(jié)碼為C20600),所以可以計(jì)算出進(jìn)入內(nèi)核執(zhí)行的指令所在的物理地址為0x1513(0x1000+0x03c1+0x3+0x14f)。 3.使用添加物理地址斷點(diǎn)的調(diào)試命令pb 0x1513添加一個(gè)斷點(diǎn)。 4.輸入調(diào)試命令c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在Console窗口中顯示要執(zhí)行的下一條指令(注意,此時(shí)的邏輯地址都為虛擬地址): 由于這里使用了函數(shù)指針的概念,所以,根據(jù)反匯編指令可以確定內(nèi)核入口點(diǎn)函數(shù)的地址就保存在虛擬地址0x8000117處的四個(gè)字節(jié)中。 5.使用查看虛擬內(nèi)存的調(diào)試命令x /1wx 0x80001117查看內(nèi)存中保存的32位函數(shù)入口地址,在Cons
16、ole窗口中會(huì)輸出類似下面的內(nèi)容:記錄下此塊內(nèi)存中保存的函數(shù)地址。 2.2.5 調(diào)試內(nèi)核 調(diào)試內(nèi)核的步驟如下: 1.在OS Lab的“項(xiàng)目管理器”窗口中打開(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)視”
17、,KiSystemStartup函數(shù)就被添加到了“監(jiān)視”窗口中。在“監(jiān)視”窗口中可以看到此函數(shù)地址為與在虛擬內(nèi)存x80001117處保存的函數(shù)入口地址相同,說(shuō)明的確是由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)行了。 2.2.6 EOS啟動(dòng)后的狀態(tài)和行為 查看EOS的版本號(hào): 1.在控制臺(tái)中輸入命令“ver”后按回車(chē)。 2.輸出EOS版本后的控制臺(tái)查看EOS啟動(dòng)后的進(jìn)程和線程的信息: 1.在控制臺(tái)中輸入命令“pt”后按回車(chē)。 2輸出的進(jìn)程和線程信息。 查看有應(yīng)用程序運(yùn)行時(shí)進(jìn)程和線程的信息: 1.在OS Lab中選擇“調(diào)試”菜單中的“停止調(diào)試”,結(jié)束之前的調(diào)試。 2.在OS Lab“項(xiàng)目管理器”窗口中雙擊Floppy.img文件,使用FloppyImageEditor工具打開(kāi)此軟盤(pán)鏡像文件。 3.打開(kāi)配套資源“學(xué)生包”,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 輸液給藥后的觀察與護(hù)理
- 航空航天復(fù)合材料 課件 第3章 輕金屬基復(fù)合材料
- 旅游景區(qū)停車(chē)場(chǎng)車(chē)位租賃及旅游合作協(xié)議
- 餐飲客戶家庭聚餐簽單服務(wù)合同
- 征收搬遷拆遷合同匯編寶典
- 采購(gòu)人員廉潔自律與責(zé)任追究協(xié)議
- 教育機(jī)構(gòu)分公司成立及人才培養(yǎng)合作合同
- 紙板品質(zhì)管理培訓(xùn)
- 成都房地產(chǎn)項(xiàng)目股權(quán)質(zhì)押購(gòu)房合同
- 離婚協(xié)議及子女撫養(yǎng)權(quán)、贍養(yǎng)費(fèi)協(xié)議
- 學(xué)院財(cái)務(wù)處查閱檔案申請(qǐng)表
- 鑄鐵閘門(mén)及啟閉機(jī)安裝說(shuō)明及操作手冊(cè)
- 過(guò)敏性休克的急救及處理流程教材課件(28張)
- 物理發(fā)泡絕緣的生產(chǎn)與應(yīng)用課件
- 北交所評(píng)測(cè)20題及答案
- 《消防安全技術(shù)實(shí)務(wù)》課本完整版
- CLSI EP25-A 穩(wěn)定性考察研究
- SJG 44-2018 深圳市公共建筑節(jié)能設(shè)計(jì)規(guī)范-高清現(xiàn)行
- 職工子女暑期工會(huì)愛(ài)心托管班的方案通知
- (5年高職)客戶服務(wù)實(shí)務(wù)(第二版)教學(xué)課件全套電子教案匯總整本書(shū)課件最全教學(xué)教程完整版教案(最新)
- 兒科患兒及家屬的溝通技巧
評(píng)論
0/150
提交評(píng)論