操作系統(tǒng)(第二個實驗)_第1頁
操作系統(tǒng)(第二個實驗)_第2頁
操作系統(tǒng)(第二個實驗)_第3頁
操作系統(tǒng)(第二個實驗)_第4頁
操作系統(tǒng)(第二個實驗)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、操作系統(tǒng)實 驗 報 告課程名稱操作系統(tǒng)實驗課程編號0906553實驗項目名稱操作系統(tǒng)的啟動學號年級姓名專業(yè)學生所在學院指導教師實驗室名稱地點 哈爾濱工程大學計算機科學與技術學院第二講 操作系統(tǒng)的啟動一、實驗概述1. 實驗名稱操作系統(tǒng)的啟動2. 實驗目的跟蹤調試EOS在PC機上從加電復位到成功啟動的全過程,了解操作系統(tǒng)的啟動過程。 查看EOS啟動后的狀態(tài)和行為,理解操作系統(tǒng)啟動后的工作方式。 3. 實驗類型驗證4. 實驗內容準備實驗調試EOS操作系統(tǒng)的啟動過程二、實驗環(huán)境EOS操作系統(tǒng)和OS Lab集成實驗環(huán)境,主要運用了C語言。三、實驗過程1. 源程序并附上注釋/*提供該示例代碼是為了闡釋一個

2、概念,或者進行一個測試,并不代表著最安全的編碼實踐,因此不應在應用程序或網站中使用該示例代碼。對于超出本示例代碼的預期用途以外的使用所造成的偶然或繼發(fā)性損失,北京英真時代科技有限公司不承擔任何責任。*/#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. 程序運行時的初值和運行結果

3、2.1 準備實驗 1. 啟動OS Lab。 2. 新建一個EOS Kernel項目。 3. 在“項目管理器”窗口中打開boot文件夾中的boot.asm和loader.asm兩個匯編文件。boot.asm是軟盤引導扇區(qū)程序的源文件,loader.asm是loader程序的源文件。 4. 按F7生成項目。5. 生成完成后,使用Windows資源管理器打開項目文件夾中的Debug文件夾。找到由 boot.asm生成的軟盤引導扇區(qū)程序boot.bin文件,該文件的大小一定為512字節(jié)(與軟盤引導扇區(qū)的大小一致)。找到由loader.asm生成的loader程序loader.bin文件,記錄下此文件的

4、大小1566字節(jié)。找到由其它源文件生成的操作系統(tǒng)內核kernel.dll。 2.2 調試EOS操作系統(tǒng)的啟動過程 2.2.1 使用Bochs做為遠程目標機 按照下面的步驟將調試時使用的遠程目標機修改為Bochs: 1. 在“項目管理器”窗口中,右鍵點擊項目節(jié)點,在彈出的快捷菜單中選擇“屬性”。 2. 在彈出的“屬性頁”對話框右側的屬性列表中找到“遠程目標機”屬性,將此屬性值修改為“Bochs Debug”(此時按F1可以獲得關于此屬性的幫助)。 3. 點擊“確定”按鈕關閉“屬性頁”對話框。接下來就可以使用Bochs模擬器調試BIOS程序和軟盤引導扇區(qū)程序了。 2.2.2 調試BIOS程序 按F

5、5啟動調試,此時會彈出兩個Bochs窗口。標題為“Bochs for windows - Display”的窗口相當于計算機的顯示器,顯示操作系統(tǒng)的輸出。標題為“Bochs for windows - Console”的窗口是Bochs的控制臺,用來輸入調試命令,輸出各種調試信息。 啟動調試后,Bochs在CPU要執(zhí)行的第一條指令(即BIOS的第一條指令)處中斷。 此時,Display窗口沒有顯示任何內容,Console窗口顯示要執(zhí)行的BIOS第一條指令的相關信息,并等待用戶輸入調試命令。從Console窗口顯示的內容中,我們可以獲得關于BIOS第一條指令的如下信息: (1)行首的0xffff

6、fff0表示此條指令所在的物理地址。 (2)f000:fff0表示此條指令所在的邏輯地址(段地址:偏移地址)。 (3)jmp far f000:e05b是此條指令的反匯編代碼。 (4)行尾的ea5be000f0是此條指令的十六進制字節(jié)碼,可以看出此條指令有5個字節(jié)。查看CPU在沒有執(zhí)行任何指令之前主要寄存器中的數據,以及內存中的數據: 1. 在Console窗口中輸入調試命令sreg后按回車,顯示當前CPU中各個段寄存器的值,其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值為0xf000。2. 輸入調試命令r后按回車,顯示當前CPU中各個通用寄存器的數。其中“rip: 0x000

7、00000:0000fff0”表示IP寄存器的值為0xfff0。 3. 輸入調試命令xp /1024b 0x0000,查看開始的1024個字節(jié)的物理內存。在Console中輸出的這1K物理內存的值都為0,說明BIOS中斷向量表還沒有被加載到此處。4. 輸入調試命令xp /512b 0x7c00,查看軟盤引導扇區(qū)應該被加載到的內存位置。輸出的內存值都為0,說明軟盤引導扇區(qū)還沒有被加載到此處。 可以驗證BIOS第一條指令所在邏輯地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器的值是一致的。由于內存還沒有被使用,所以其中的值都為0。 2.2.3 調試軟盤引導扇區(qū)程序 接下來從0x7c00處

8、調試軟盤引導扇區(qū)程序: 1. 輸入調試命令vb 0x0000:0x7c00,這樣就在邏輯地址0x0000:0x7c00(相當于物理地 址0x7c00)處添加了一個斷點。 2. 輸入調試命令c繼續(xù)執(zhí)行,在0x7c00處的斷點中斷。中斷后會在Console窗口中輸出下一個要執(zhí)行的指令,即軟盤引導扇區(qū)程序的第一條指令。3.在紙上分別記錄下此條指令的字節(jié)碼(eb6d)和此條指令要跳轉執(zhí)行的下一條指令的地址(括號中的0x00007c6f)。 4.輸入調試命令sreg驗證CS寄存器(0x0000)的值。 5.輸入調試命令r驗證IP寄存器(0x7c00)的值。 6.由于BIOS程序此時已經執(zhí)行完畢,輸入調試

9、命令xp /1024b 0x0000驗證此時BIOS中斷向量表已經被載入。7.輸入調試命令xp /512b 0x7c00顯示軟盤引導扇區(qū)程序的所有字節(jié)碼。觀察此塊內存最開始的兩個字節(jié)分別為0xeb和0x6d,這和引導程序第一條指令的字節(jié)碼(eb6d)是相同的。此塊內存最后的兩個字節(jié)分別為0x55和0xaa,表示引導扇區(qū)是激活的,可以用來引導操作系統(tǒng),這兩個字節(jié)是boot.asm中最后一行語句 dw 0xaa55 定義的。 8.輸入調試命令xp /512b 0x0600驗證圖3-2中第一個用戶可用區(qū)域是空白的。 9. 輸入調試命令xp /512b 0x7e00驗證圖3-2中第二個用戶可用區(qū)域是空

10、白的。 10. 自己設計兩個查看內存的調試命令,分別驗證這兩個用戶可用區(qū)域的高地址端也是的。11. 輸入調試命令xp /512b 0xa0000驗證圖3-2中上位內存已經被系統(tǒng)占用。 12. 自己設計一個查看內存的調試命令,驗證上位內存的高地址端已經被系統(tǒng)占用。NASM匯編器在將boot.asm生成為boot.bin的同時,會生成一個boot.lst列表文件,幫助開發(fā)者調試boot.asm文件中的匯編代碼。按照下面的步驟查看boot.lst文件: 1. 在“項目管理器”窗口中,右鍵點擊“boot”文件夾中的boot.asm文件。 2. 在彈出的快捷菜單中選擇“打開生成的列表文件”,在源代碼編輯

11、器中就會打開文件boot.lst。 3. 將boot.lst文件和boot.asm文件對比可以發(fā)現,此文件包含了boot.asm文件中所有的匯編代碼,同時在代碼的左側又添加了更多的信息。 4. 在boot.lst中查找到軟盤引導扇區(qū)程序第一條指令所在的行(第73行) 73 00000000 EB6D jmp short Start 此行包含的信息有:73是行號。 00000000是此條指令相對于程序開始位置的偏移(第一條指令應該為0)。 EB6D是此條指令的字節(jié)碼,和之前記錄下來的指令字節(jié)碼是一致的。 軟盤引導扇區(qū)程序的主要任務就是將軟盤中的loader.bin文件加載到物理內存0x1000處

12、,然后跳轉到loader程序的第一條指令(物理地址0x1000處的指令)繼續(xù)執(zhí)行l(wèi)oader程序。按照下面的步驟調試此過程: 1. 在boot.lst文件中查找到加載完畢loader.bin文件后要跳轉到loader程序中執(zhí)行的指令(第278行) 根據此指令相對于程序開始(0x7C00)的偏移(0x0181)可以得到此指令的邏輯地址為0x0000:7D81。 2.輸入調試命令vb 0x0000:0x7d81添加一個斷點。 3.輸入調試命令c繼續(xù)執(zhí)行,到斷點處中斷。在Console窗口中顯示 此條指令會跳轉到物理內存0x1000處(即Loader程序的第一條指令)繼續(xù)執(zhí)行。 4.按照打開boot

13、.lst文件的方法打開loader.lst文件,并在此文件中查找到loader程序的第一條指令(第33行) 5.輸入調試命令xp /8b 0x1000查看內存0x1000處的數據,驗證此塊內存的前三個字節(jié)和loader.lst文件中的第一條指令的字節(jié)碼是相同的。 6.根據之前記錄的loader.bin文件的大小,自己設計一個查看內存的調試命令,查看內存中l(wèi)oader程序結束位置的字節(jié)碼,并與loader.lst文件中最后指令的字節(jié)碼比較,驗證loader程序被完全加載到了正確的位置。 2.2.4 調試加載程序 Loader程序的主要任務是將操作系統(tǒng)內核(kernel.dll文件)加載到內存中,

14、然后讓CPU進入保護模式并且啟用分頁機制,最后進入操作系統(tǒng)內核開始執(zhí)行(跳轉到kernel.dll的入口點執(zhí)行)。按照下面的步驟調試上述過程: 1.在loader.lst文件中查找到準備進入EOS操作系統(tǒng)內核執(zhí)行的指令(第755行) 2.計算此條指令的物理地址要復雜一些:偏移地址實際上是相對于節(jié)(節(jié)SECTION是NASM匯編中的概念)開始的。由于在boot.asm程序中只有一個節(jié),所以之前計算的結果都是正確的,但是在loader.asm程序中有兩個節(jié),并且此條指令是在第二個節(jié)中。下面引用的代碼是loader.lst中第一個節(jié)的最后一條指令(第593行) 因為第一個節(jié)中最后一條指令的偏移為0x

15、03c1,并占用了3個字節(jié)(字節(jié)碼為C20600),所以可以計算出進入內核執(zhí)行的指令所在的物理地址為0x1513(0x1000+0x03c1+0x3+0x14f)。 3.使用添加物理地址斷點的調試命令pb 0x1513添加一個斷點。 4.輸入調試命令c繼續(xù)執(zhí)行,到斷點處中斷。在Console窗口中顯示要執(zhí)行的下一條指令(注意,此時的邏輯地址都為虛擬地址): 由于這里使用了函數指針的概念,所以,根據反匯編指令可以確定內核入口點函數的地址就保存在虛擬地址0x8000117處的四個字節(jié)中。 5.使用查看虛擬內存的調試命令x /1wx 0x80001117查看內存中保存的32位函數入口地址,在Cons

16、ole窗口中會輸出類似下面的內容:記錄下此塊內存中保存的函數地址。 2.2.5 調試內核 調試內核的步驟如下: 1.在OS Lab的“項目管理器”窗口中打開ke文件夾中的start.c文件,此文件中只定義了一個函數,就是操作系統(tǒng)內核的入口點函數KiSystemStartup。 2.在KiSystemStartup函數中的代碼行(第61行) KiInitializePic(); 添加一個斷點。 3.現在可以在Console窗口中輸入調試命令c繼續(xù)調試,在剛剛添加的斷點處中斷。 4.在start.c源代碼文件中的KiSystemStartup函數名上點擊鼠標右鍵,在彈出的快捷菜單中選擇“添加監(jiān)視”

17、,KiSystemStartup函數就被添加到了“監(jiān)視”窗口中。在“監(jiān)視”窗口中可以看到此函數地址為與在虛擬內存x80001117處保存的函數入口地址相同,說明的確是由Loader程序進入了操作系統(tǒng)內核。 5.按F5繼續(xù)執(zhí)行EOS操作系統(tǒng)內核,在Display窗口中顯示EOS操作系統(tǒng)已經啟動,并且控制臺程序已經開始運行了。 2.2.6 EOS啟動后的狀態(tài)和行為 查看EOS的版本號: 1.在控制臺中輸入命令“ver”后按回車。 2.輸出EOS版本后的控制臺查看EOS啟動后的進程和線程的信息: 1.在控制臺中輸入命令“pt”后按回車。 2輸出的進程和線程信息。 查看有應用程序運行時進程和線程的信息: 1.在OS Lab中選擇“調試”菜單中的“停止調試”,結束之前的調試。 2.在OS Lab“項目管理器”窗口中雙擊Floppy.img文件,使用FloppyImageEditor工具打開此軟盤鏡像文件。 3.打開配套資源“學生包”,

溫馨提示

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

評論

0/150

提交評論