




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實(shí) 驗(yàn) 報 告課程名稱操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)項目名稱操作系統(tǒng)的啟動學(xué)號班級20100612姓名專業(yè)計算機(jī)科學(xué)與技術(shù)學(xué)生所在學(xué)院計算機(jī)科學(xué)與技術(shù)學(xué)院指導(dǎo)教師實(shí)驗(yàn)室名稱地點(diǎn)計算機(jī)基礎(chǔ)第七實(shí)驗(yàn)室 21B475 哈爾濱工程大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院一、實(shí)驗(yàn)概述1. 實(shí)驗(yàn)名稱操作系統(tǒng)的啟動2. 實(shí)驗(yàn)?zāi)康母櫿{(diào)試 EOS 在 PC 機(jī)上從加電復(fù)位到成功啟動的全過程,了解操作系統(tǒng)的啟動過程。 查看EOS啟動后的狀態(tài)和行為,理解操作系統(tǒng)啟動后的工作方式。3. 實(shí)驗(yàn)類型驗(yàn)證性實(shí)驗(yàn)4. 實(shí)驗(yàn)內(nèi)容調(diào)試EOS操作系統(tǒng)的啟動過程包括:(1).使用Bochs做為遠(yuǎn)程目標(biāo)機(jī);(2).調(diào)試BIOS程序;(3).調(diào)試軟盤引導(dǎo)扇
2、區(qū)程序;(4).調(diào)試加載程序;(5).調(diào)試內(nèi)核;(6).查看EOS啟動后的狀態(tài)和行為 二、實(shí)驗(yàn)環(huán)境EOS操作系統(tǒng)和配套的IDE集成開發(fā)環(huán)境。三、實(shí)驗(yàn)過程1.設(shè)計思路和流程圖CPU從默認(rèn)位置執(zhí)行BIOS的開機(jī)自檢和初始化程序,之后 BIOS 將軟盤引導(dǎo)扇區(qū)加載到 0x7C00 并執(zhí)行。 軟盤引導(dǎo)扇區(qū)中的Boot程序開始執(zhí)行,將軟盤根目錄中的Loader程序文件Loader.bin加載到0x1000并執(zhí)行Loader 程序開始執(zhí)行,先加載Kernel.dll,然后啟動保護(hù)模式和分頁機(jī)制,最后跳到Kernel.dll的入口點(diǎn)執(zhí)行Kernel.dll開始執(zhí)行,初始化EOS內(nèi)核,EOS啟動完畢圖2-1.
3、EOS操作系統(tǒng)的啟動過程流程圖2.算法實(shí)現(xiàn):驗(yàn)證性試驗(yàn),無算法。3.需要解決的問題及解答(試驗(yàn)指導(dǎo))(1).為什么EOS操作系統(tǒng)從軟盤啟動時要使用boot.bin和loader.bin兩個程序?使用一個可以嗎?它們各自的主要功能是什么?如果將loader.bin的功能移動到boot.bin文件中,則boot.bin文件的大小是否仍然能保持小于512字節(jié)?答:boot文件夾包含了兩個匯編文件boot.asm和loader.asm。這兩個文件生成的二進(jìn)制文件boot.bin和loader.bin會被寫入軟盤鏡像文件。操作系統(tǒng)啟動時boot.bin和loader.bin引導(dǎo)軟盤加載程序,二者缺一不可
4、。使用Boot.bin的主要功能是引導(dǎo)軟盤;loader.bin的主要功能是加載程序。如果把loader.bin功能移動到boot.bin程序中,必然導(dǎo)致程序規(guī)模擴(kuò)大,可能使其大于512字節(jié)。(2).軟盤引導(dǎo)扇區(qū)加載完畢后內(nèi)存中有兩個用戶可用的區(qū)域,為什么軟盤引導(dǎo)扇區(qū)程序選擇將loader.bin加載到第一個可用區(qū)域的0x1000處呢?這樣做有什么好處?這樣做會對loader.bin文件的大小有哪些限制。答:首先用戶只用兩個可用區(qū)域,加載位置非此即彼。第一個可用用戶區(qū)是低地址區(qū),且空間大小比較小,適合容納小文件,所以我們選擇將占用空間小的loder.bin加載到第一用戶區(qū)。優(yōu)點(diǎn):由低地址開始,
5、便于檢索查找。小文件占用小空間,節(jié)約資源。限制:loader.bin文件必須小于1c00k.(3).練習(xí)使用Bochs單步調(diào)試BIOS程序、軟盤引導(dǎo)扇區(qū)程序和loader程序,加深對操作系統(tǒng)啟動過程的理解。(4). 仔細(xì)比較實(shí)驗(yàn)指導(dǎo)10-5圖和圖10-6,嘗試說明哪個是應(yīng)用程序的進(jìn)程,它和系統(tǒng)進(jìn)程有什么區(qū)別,哪個是應(yīng)用程序的主線程,它和系統(tǒng)線程有什么區(qū)別。答:圖10-6是應(yīng)用程序的進(jìn)程,在進(jìn)程列表中只有一個ID為1的系統(tǒng)進(jìn)程,其優(yōu)先級為24,包含有10個線程,其中的ID為2的線程是該進(jìn)程的主線程,系統(tǒng)進(jìn)程沒有映像名稱。在線程列表中有10個線程,它們都是系統(tǒng)線程。區(qū)別:主線程的優(yōu)先級別高。 存放
6、在物理內(nèi)存的低端。4.主要數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)代碼及其說明:驗(yàn)證性實(shí)驗(yàn),無此項目。5.源程序并附上注釋:驗(yàn)證性實(shí)驗(yàn),無此項目。6.程序運(yùn)行時的初值和運(yùn)行結(jié)果,實(shí)驗(yàn)過程1. 調(diào)試BIOS程序(1). 在Console窗口中輸入調(diào)試命令sreg后按回車,顯示當(dāng)前CPU中各個段寄存器的值,如圖2-1。其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值為0xf000. (2).輸入調(diào)試命令r后按回車,顯示當(dāng)前CPU中各個通用寄存器的值,如圖10-3。其中“rip: 0x00000000:0000fff0”表示IP寄存器的值為0xfff0。 (3). 輸入調(diào)試命令xp /1024b 0x0000,
7、查看開始的1024個字節(jié)的物理內(nèi)存。在Console中輸出的這1K物理內(nèi)存的值都為0,說明BIOS中斷向量表還沒有被加載到此處。(4). 輸入調(diào)試命令xp /512b 0x7c00,查看軟盤引導(dǎo)扇區(qū)應(yīng)該被加載到的內(nèi)存位置。輸出的內(nèi)存值都為0,說明軟盤引導(dǎo)扇區(qū)還沒有被加載到此處。2. 調(diào)試軟盤引導(dǎo)扇區(qū)程序a. 輸入調(diào)試命令vb 0x0000:0x7c00,這樣就在邏輯地址0x0000:0x7c00(相當(dāng)于物理地址0x7c00)處添加了一個斷點(diǎn)。b. 輸入調(diào)試命令c繼續(xù)執(zhí)行,在0x7c00處的斷點(diǎn)中斷。中斷后會在Console窗口中輸出下一個要執(zhí)行的指令,即軟盤引導(dǎo)扇區(qū)程序的第一條指令,如下 (0
8、) 0x00007c00 0000:7c00 (unk. ctxt): jmp .+0x006d (0x00007c6f) ; eb6d c. 為了方便后面的使用,先在紙上分別記錄下此條指令的字節(jié)碼(eb6d)和此條指令要跳轉(zhuǎn)執(zhí)行的下一條指令的地址(括號中的0x00007c6f)。 d. 輸入調(diào)試命令sreg驗(yàn)證CS寄存器(0x0000)的值。 e. 輸入調(diào)試命令r驗(yàn)證IP寄存器(0x7c00)的值。 f. 由于BIOS程序此時已經(jīng)執(zhí)行完畢,輸入調(diào)試命令xp /1024b 0x0000驗(yàn)證此時BIOS中斷向量表已經(jīng)被載入。 g. 輸入調(diào)試命令xp /512b 0x7c00顯示軟盤引導(dǎo)扇區(qū)程序的
9、所有字節(jié)碼。觀察此塊內(nèi)存最開始的兩個字節(jié)分別為0xeb和0x6d,這和引導(dǎo)程序第一條指令的字節(jié)碼(eb6d)是相同的。h. 輸入調(diào)試命令xp /512b 0x0600驗(yàn)證圖3-2中第一個用戶可用區(qū)域是空白的。i. 輸入調(diào)試命令xp /512b 0x7e00驗(yàn)證圖3-2中第二個用戶可用區(qū)域是空白的。 j. 自己設(shè)計兩個查看內(nèi)存的調(diào)試命令,分別驗(yàn)證這兩個用戶可用區(qū)域的高地址端也是空白的。 k. 輸入調(diào)試命令xp /512b 0xa0000驗(yàn)證圖3-2中上位內(nèi)存已經(jīng)被系統(tǒng)占用。 l. 自己設(shè)計一個查看內(nèi)存的調(diào)試命令,驗(yàn)證上位內(nèi)存的高地址端已經(jīng)被系統(tǒng)占用。 查看boot.lst文件1). 在“項目管理
10、器”窗口中,右鍵點(diǎn)擊“boot”文件夾中的boot.asm文件。 2). 在彈出的快捷菜單中選擇“打開生成的列表文件”,在源代碼編輯器中就會打開文件boot.lst。 3). 將boot.lst文件和boot.asm文件對比可以發(fā)現(xiàn),此文件包含了boot.asm文件中所有的匯編代碼,同時在代碼的左側(cè)又添加了更多的信息。 4). 在boot.lst中查找到軟盤引導(dǎo)扇區(qū)程序第一條指令所在的行(第73行) 73 00000000 EB6D jmp short Start 此行包含的信息有: l 73是行號。 l 00000000是此條指令相對于程序開始位置的偏移(第一條指令應(yīng)該為0)。 l EB6D
11、是此條指令的字節(jié)碼,和之前記錄下來的指令字節(jié)碼是一致的。 軟盤引導(dǎo)扇區(qū)程序的主要任務(wù)就是將軟盤中的loader.bin文件加載到物理內(nèi)存的0x1000處,然后跳轉(zhuǎn)到loader程序的第一條指令(物理地址0x1000處的指令)繼續(xù)執(zhí)行l(wèi)oader程序。按照下面的步驟調(diào)試此過程: 1). 在boot.lst文件中查找到加載完畢loader.bin文件后要跳轉(zhuǎn)到loader程序中執(zhí)行的指令(第278行) 278 00000181 EA00100000 jmp 0:LOADER_ORG 根據(jù)此指令相對于程序開始(0x7C00)的偏移(0x0181)可以得到此指令的邏輯地址為0x0000:7D81。 2
12、). 輸入調(diào)試命令vb 0x0000:0x7d81添加一個斷點(diǎn)。 3). 輸入調(diào)試命令c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在Console窗口中顯示 (0) 0x00007d81 0000:7d81 (unk. ctxt): jmp far 0000:1000 ; ea00100000 此條指令會跳轉(zhuǎn)到物理內(nèi)存0x1000處(即Loader程序的第一條指令)繼續(xù)執(zhí)行。 4). 按照打開boot.lst文件的方法打開loader.lst文件,并在此文件中查找到loader程序的第一條指令(第33行) 33 00000000 E91801 jmp Start 5). 輸入調(diào)試命令xp /8b 0x1000查
13、看內(nèi)存0x1000處的數(shù)據(jù),驗(yàn)證此塊內(nèi)存的前三個字節(jié)和loader.lst文件中的第一條指令的字節(jié)碼是相同的。 6). 根據(jù)之前記錄的loader.bin文件的大小,自己設(shè)計一個查看內(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ù)模式并且啟用分頁機(jī)制,最后進(jìn)入操作系統(tǒng)內(nèi)核開始執(zhí)行(跳轉(zhuǎn)到kernel.dll的入口點(diǎn)執(zhí)行)。按照下面的步驟調(diào)試上述過程: 1. 在loade
14、r.lst文件中查找到準(zhǔn)備進(jìn)入EOS操作系統(tǒng)內(nèi)核執(zhí)行的指令(第755行) 755 0000014F FF1517010080 call dword va_ImageEntry 2. 計算此條指令的物理地址要復(fù)雜一些:偏移地址實(shí)際上是相對于節(jié)(節(jié)SECTION是NASM匯編中的概念)開始的。由于在boot.asm程序中只有一個節(jié),所以之前計算的結(jié)果都是正確的,但是在loader.asm程序中有兩個節(jié),并且此條指令是在第二個節(jié)中。下面引用的代碼是loader.lst中第一個節(jié)的最后一條指令(第593行) 593 000003C1 C20600 ret 6 因?yàn)榈谝粋€節(jié)中最后一條指令的偏移為0x03
15、c1,并占用了3個字節(jié)(字節(jié)碼為C20600),所以可以計算出進(jìn)入內(nèi)核執(zhí)行的指令所在的物理地址為0x1513(0x1000+0x03c1+0x3+0x14f)。 3. 使用添加物理地址斷點(diǎn)的調(diào)試命令pb 0x1513添加一個斷點(diǎn)。4. 輸入調(diào)試命令c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在Console窗口中顯示要執(zhí)行的下一條指令(注意,此時的邏輯地址都為虛擬地址): (0) 0x00001513 0008:0000000080001513 (unk. ctxt): call dword ptr ds:0x80001117 ; ff1517110080 由于這里使用了函數(shù)指針的概念,所以,根據(jù)反匯編指令可以
16、確定內(nèi)核入口點(diǎn)函數(shù)的地址就保存在虛擬地址0x8000117處的四個字節(jié)中。 5. 使用查看虛擬內(nèi)存的調(diào)試命令x /1wx 0x80001117查看內(nèi)存中保存的32位函數(shù)入口地址,在Console窗口中會輸出類似下面的內(nèi)容: 0x0000000080001117 <bogus+ 0>: 0x800* 記錄下此塊內(nèi)存中保存的函數(shù)地址,后面的實(shí)驗(yàn)會驗(yàn)證內(nèi)核入口點(diǎn)函數(shù)的地址與此地址是一致的。 調(diào)試內(nèi)核: 1). 在OS Lab的“項目管理器”窗口中打開ke文件夾中的start.c文件,此文件中只定義了一個函數(shù),就是操作系統(tǒng)內(nèi)核的入口點(diǎn)函數(shù)KiSystemStartup。 2). 在KiSy
17、stemStartup函數(shù)中的代碼行(第61行) KiInitializePic(); 添加一個斷點(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ù)入口地址相同,說明的確是由Loader程序進(jìn)入了操作
18、系統(tǒng)內(nèi)核。 5). 按F5繼續(xù)執(zhí)行EOS操作系統(tǒng)內(nèi)核,在Display窗口中顯示EOS操作系統(tǒng)已經(jīng)啟動,并且控制臺程序已經(jīng)開始運(yùn)行了。 EOS啟動后的狀態(tài)和行為 1). 在控制臺中輸入命令“ver”后按回車。 2). 輸出EOS版本后的控制臺如圖10-4所示。 使用ver命令查看EOS的版本號。 查看EOS啟動后的進(jìn)程和線程的信息: 1). 在控制臺中輸入命令“pt”后按回車。 2). 輸出的進(jìn)程和線程信息如圖所示。 查看有應(yīng)用程序運(yùn)行時進(jìn)程和線程的信息: 1. 在OS Lab中選擇“調(diào)試”菜單中的“停止調(diào)試”,結(jié)束之前的調(diào)試。 2. 在OS Lab“項目管理器”窗口中雙擊Floppy.img文件,使用FloppyImageEditor工具打開此軟盤鏡像文件。 3. 打開配套資源“學(xué)生包”,在其中找到本實(shí)驗(yàn)對應(yīng)的文件夾??梢栽诒緯把圆糠终业健皩W(xué)生包”的下載地址。 4. 將本實(shí)驗(yàn)文件夾中的Hello.exe文件拖動到FloppyImageEditor工具窗口的文件列表中釋放,Hello.exe文件即被添加到軟盤鏡像文件中。Hello.exe一個EOS應(yīng)用程序,其源代碼可以參見本實(shí)驗(yàn)文件夾中的Hello.c源文件。 5. 在FloppyImageEditor中選擇“文件
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)服務(wù)合同協(xié)議
- 基于農(nóng)業(yè)資源整合的現(xiàn)代農(nóng)業(yè)發(fā)展協(xié)議
- 項目進(jìn)度統(tǒng)計表-互聯(lián)網(wǎng)項目進(jìn)度監(jiān)控
- 公司前臺接待與咨詢工作表格
- 以科技創(chuàng)新推動農(nóng)業(yè)現(xiàn)代化智能化發(fā)展的路徑探索
- 歷史文物保護(hù)修復(fù)技術(shù)考試試題集
- 山中訪友:六年級自然美文欣賞教案
- 員工培訓(xùn)與技能評估記錄表
- 醫(yī)院場地租賃合同
- 中國古詩詞故事的欣賞感受
- 腦梗動脈取栓護(hù)理查房課件
- 泊松過程與應(yīng)用
- 溫室氣體盤查培訓(xùn)-(課件)
- 中華人民共和國憲法應(yīng)知應(yīng)會試題
- 民間醫(yī)學(xué)視角下的清代祝由術(shù)研究
- 骨髓穿刺PPT完整版
- 宿舍衛(wèi)生值日表
- 人力資源服務(wù)機(jī)構(gòu)年檢申請報告
- 石油化工行業(yè)檢修工程預(yù)算定額說明
- 落實(shí)中央八項規(guī)定改進(jìn)干部作風(fēng)建設(shè)課程
- 橋本氏甲狀腺炎-課件
評論
0/150
提交評論