操作系統(tǒng)的啟動(dòng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)的啟動(dòng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)的啟動(dòng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)的啟動(dòng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)的啟動(dòng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)實(shí)驗(yàn)項(xiàng)目名稱操作系統(tǒng)的啟動(dòng)學(xué)號(hào)班級(jí)20100612姓名專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生所在學(xué)院計(jì) 算 機(jī)科 學(xué) 與技術(shù)學(xué)院指導(dǎo)教師實(shí)驗(yàn)室名稱地點(diǎn)計(jì)算機(jī)基礎(chǔ)第七實(shí)驗(yàn)室 21B475哈爾濱工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 、實(shí)驗(yàn)概述實(shí)驗(yàn)名稱 操作系統(tǒng)的啟動(dòng)實(shí)驗(yàn)?zāi)康? 跟蹤調(diào)試 EOS 在 PC 機(jī)上從加電復(fù)位到成功啟動(dòng)的全過(guò)程, 了解操作系 統(tǒng)的啟動(dòng)過(guò)程。2 查看 EOS啟動(dòng)后的狀態(tài)和行為,理解操作系統(tǒng)啟動(dòng)后的工作方式。實(shí)驗(yàn)類型 驗(yàn)證性實(shí)驗(yàn)實(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)試

2、軟盤(pán)引導(dǎo)扇區(qū)程序 ;(4). 調(diào)試加載程序 ;(5). 調(diào)試 內(nèi)核; (6).查看 EOS啟動(dòng)后的狀態(tài)和行為二、實(shí)驗(yàn)環(huán)境EOS操作系統(tǒng)和配套的 IDE 集成開(kāi)發(fā)環(huán)境。 三、實(shí)驗(yàn)過(guò)程設(shè)計(jì)思路和流程圖CPU 從默認(rèn)位置執(zhí)行 BIOS 的開(kāi)機(jī)自檢和初始化程序, 之后 BIOS 將軟盤(pán)引導(dǎo)扇區(qū)加載到 0 x7C00 并執(zhí)行。軟盤(pán)引導(dǎo)扇區(qū)中的 Boot 程序開(kāi)始執(zhí)行,將軟盤(pán)根目錄 中的 Loader 程序文件 Loader.bin 加載到 0 x1000 并執(zhí)行Loader 程序開(kāi)始執(zhí)行,先加載 Kernel.dll ,然后啟動(dòng)保 護(hù)模式和分頁(yè)機(jī)制,最后跳到 Kernel.dll 的入口點(diǎn)執(zhí)行Kerne

3、l.dll 開(kāi)始執(zhí)行,初始化 EOS 內(nèi)核, EOS 啟動(dòng)完畢圖 2-1.EOS 操作系統(tǒng)的啟動(dòng)過(guò)程流程圖算法實(shí)現(xiàn):驗(yàn)證性試驗(yàn),無(wú)算法。需要解決的問(wèn)題及解答(試驗(yàn)指導(dǎo))(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.

4、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ū)域的 0 x1000處呢?這樣做 有什么好處?這樣做會(huì)對(duì) loader.bin 文件的大小有哪些限制。答:首先用戶只用兩個(gè)可用區(qū)

5、域,加載位置非此即彼。第一個(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)程列

6、表中只有一個(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)存的低端。主要數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)代碼及其說(shuō)明:驗(yàn)證性實(shí)驗(yàn),無(wú)此項(xiàng)目。源程序并附上注釋:驗(yàn)證性實(shí)驗(yàn),無(wú)此項(xiàng)目。程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果 ,實(shí)驗(yàn)過(guò)程1. 調(diào)試 BIOS程序(1). 在Console窗口中輸入調(diào)試命令 sreg 后按回車,顯示當(dāng)前 CPU中各個(gè) 段寄存器的值,如圖 2-1 。其中CS寄存器信息行中的 “s=0 xf000 ”表示CS寄存器的 值為0 xf000.(

7、2). 輸入調(diào)試命令 r后按回車,顯示當(dāng)前 CPU中各個(gè)通用寄存器的值, 如圖 10-3 。其中“rip: 0 x00000000:0000fff0 ”表示IP寄存器的值為 0 xfff0 。. 輸入調(diào)試命令 xp /1024b 0 x0000,查看開(kāi)始的 1024個(gè)字節(jié)的物理內(nèi)存。 在Console中輸出的這 1K物理內(nèi)存的值都為 0,說(shuō)明 BIOS中斷向量表還沒(méi)有被加載 到此處。. 輸入調(diào)試命令 xp /512b 0 x7c00,查看軟盤(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ū)程序輸入調(diào)試命令 vb 0 x0000:

8、0 x7c00 ,這樣就在邏輯地址 0 x0000:0 x7c00(相當(dāng)于 物理地址 0 x7c00)處添加了一個(gè)斷點(diǎn)。輸入調(diào)試命令 c繼續(xù)執(zhí)行,在 0 x7c00處的斷點(diǎn)中斷。中斷后會(huì)在 Console 窗口 中輸出下一個(gè)要執(zhí)行的指令,即軟盤(pán)引導(dǎo)扇區(qū)程序的第一條指令,如下 (0) 0 x00007c00 0000:7c00 (unk. ctxt): jmp .+0 x006d (0 x00007c6f) ; eb6d為了方便后面的使用,先在紙上分別記錄下此條指令的字節(jié)碼(eb6d)和此條指令要跳轉(zhuǎn)執(zhí)行的下一條指令的地址(括號(hào)中的 0 x00007c6f )。輸入調(diào)試命令 sreg驗(yàn)證CS寄存

9、器( 0 x0000)的值。輸入調(diào)試命令 r驗(yàn)證IP寄存器( 0 x7c00)的值。由于BIOS程序此時(shí)已經(jīng)執(zhí)行完畢,輸入調(diào)試命令 xp /1024b 0 x0000 驗(yàn)證此時(shí) BIOS中斷向量表已經(jīng)被載入。g. 輸入調(diào)試命令 xp /512b 0 x7c00顯示軟盤(pán)引導(dǎo)扇區(qū)程序的所有字節(jié)碼。觀察此 塊內(nèi)存最開(kāi)始的兩個(gè)字節(jié)分別為 0 xeb和 0 x6d,這和引導(dǎo)程序第一條指令的字節(jié)碼 ( eb6d)是相同的。h. 輸入調(diào)試命令 xp /512b 0 x0600 驗(yàn)證圖 3-2中第一個(gè)用戶可用區(qū)域是空白的i. 輸入調(diào)試命令 xp /512b 0 x7e00 驗(yàn)證圖 3-2中第二個(gè)用戶可用區(qū)域是

10、空白的j. 自己設(shè)計(jì)兩個(gè)查看內(nèi)存的調(diào)試命令,分別驗(yàn)證這兩個(gè)用戶可用區(qū)域的高地址 端也是空白的。k. 輸入調(diào)試命令 xp /512b 0 xa0000 驗(yàn)證圖 3-2 中上位內(nèi)存已經(jīng)被系統(tǒng)占用自己設(shè)計(jì)一個(gè)查看內(nèi)存的調(diào)試命令,驗(yàn)證上位內(nèi)存的高地址端已經(jīng)被系統(tǒng)占 用。查看 boot.lst文件. 在“項(xiàng)目管理器 ”窗口中,右鍵點(diǎn)擊 “boot ”文件夾中的 boot.asm 文件。. 在彈出的快捷菜單中選擇 “打開(kāi)生成的列表文件 ”,在源代碼編輯器中就會(huì)打 開(kāi)文件 boot.lst 。. 將boot.lst 文件和 boot.asm 文件對(duì)比可以發(fā)現(xiàn), 此文件包含了 boot.asm 文件 中所有的

11、匯編代碼,同時(shí)在代碼的左側(cè)又添加了更多的信息。. 在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)存 的 0 x1000處,然后跳轉(zhuǎn)到 loader 程序的第一條指令(物理地址 0 x1000處的指令) 繼續(xù)執(zhí)行l(wèi)oader 程序。按照下面的步驟調(diào)試此過(guò)

12、程:1). 在 boot.lst 文件中查找到加載完畢 loader.bin 文件后要跳轉(zhuǎn)到 loader 程序 中執(zhí)行的指令(第 278行) 278 00000181 EA00100000 jmp 0:LOADER_ORG根 據(jù) 此指令相對(duì)于程序開(kāi)始( 0 x7C00)的偏移( 0 x0181)可以得到此指令的邏輯地址 為0 x0000:7D81。2). 輸入調(diào)試命令 vb 0 x0000:0 x7d81 添加一個(gè)斷點(diǎn)。3). 輸入調(diào)試命令 c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在 Console 窗口中顯示 (0) 0 x00007d81 0000:7d81 (unk. ctxt): jmp far

13、0000:1000 ; ea00100000此條指令會(huì)跳轉(zhuǎn)到物理內(nèi)存 0 x1000處(即 Loader程序的第一條指令)繼續(xù)執(zhí)行。4). 按照打開(kāi) boot.lst 文件的方法打開(kāi) loader.lst 文件,并在此文件中查找到 loader 程序的第一條指令(第 33行) 33 00000000 E91801 jmp Start5). 輸入調(diào)試命令 xp /8b 0 x1000查看內(nèi)存 0 x1000處的數(shù)據(jù),驗(yàn)證此塊內(nèi)存的前 三個(gè)字節(jié)和 loader.lst 文件中的第一條指令的字節(jié)碼是相同的。6). 根據(jù)之前記錄的 loader.bin文件的大小,自己設(shè)計(jì)一個(gè)查看內(nèi)存的調(diào)試命令, 查看

14、內(nèi)存中 loader程序結(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ò)程:在loader.lst 文件中查找到準(zhǔn)備進(jìn)入 EOS操作系統(tǒng)內(nèi)核執(zhí)行的指令 (第 755行)755 0000014F FF1517010080 call dword va_ImageEntry計(jì)算此條

15、指令的物理地址要復(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行) 593 000003C1 C20600 ret 6 因?yàn)榈谝粋€(gè)節(jié)中最后一條指令的偏移 為 0 x03c1,并占用了 3個(gè)字節(jié)(字節(jié)碼為 C20600),所以可以計(jì)算出進(jìn)入內(nèi)核執(zhí) 行的指令所在的物理地址為 0 x1513(0 x1000+0 x03c1+0 x3

16、+0 x14f)。使用添加物理地址斷點(diǎn)的調(diào)試命令 pb 0 x1513添加一個(gè)斷點(diǎn)。輸入調(diào)試命令 c繼續(xù)執(zhí)行,到斷點(diǎn)處中斷。在 Console窗口中顯示要執(zhí)行的下 一條指令(注意,此時(shí)的邏輯地址都為虛擬地址): (0) 0 x00001513 0008:0000000080001513 (unk. ctxt): call dword ptr ds:0 x80001117 ; ff1517110080 由于這里使用了函數(shù)指針的概念,所以,根據(jù)反匯編指令可以確 定內(nèi)核入口點(diǎn)函數(shù)的地址就保存在虛擬地址 0 x8000117處的四個(gè)字節(jié)中。使用查看虛擬內(nèi)存的調(diào)試命令 x /1wx 0 x8000111

17、7查看內(nèi)存中保存的 32位函數(shù) 入口地址,在 Console 窗口中會(huì)輸出類似下面的內(nèi)容: 0 x0000000080001117 : 0 x800* 記錄下此塊內(nèi)存中保存的函數(shù)地址,后面的實(shí)驗(yàn)會(huì)驗(yàn) 證內(nèi)核入口點(diǎn)函數(shù)的地址與此地址是一致的。調(diào)試內(nèi)核:. 在OSL ab的 “項(xiàng)目管理器 ”窗口中打開(kāi) ke文件夾中的 start.c 文件,此文件中 只定義了一個(gè)函數(shù),就是操作系統(tǒng)內(nèi)核的入口點(diǎn)函數(shù) KiSystemStartup 。. 在 KiSystemStartup 函數(shù)中的代碼行(第 61行) KiInitializePic();添加一個(gè)斷點(diǎn)。. 現(xiàn)在可以在 Console 窗口中輸入調(diào)試命令

18、 c繼續(xù)調(diào)試,在剛剛添加的斷點(diǎn)處 中斷。. 在start.c 源代碼文件中的 KiSystemStartup 函數(shù)名上點(diǎn)擊鼠標(biāo)右鍵,在彈 出的快捷菜單中選擇 “添加監(jiān)視 ”,KiSystemStartup 函數(shù)就被添加到了 “監(jiān)視 ”窗 口中。在 “監(jiān)視”窗口中可以看到此函數(shù)地址為 void (PVOID) 0 x800* 與在虛擬內(nèi)存 x80001117處保存的函數(shù)入口地址相同,說(shuō)明 的確是由 Loader 程序進(jìn)入了操作系統(tǒng)內(nèi)核。. 按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)如圖 10-4 所示 使用ver命令查看 EOS的版本號(hào)。查看EOS啟動(dòng)后的進(jìn)程和線程的信息:1). 在控制臺(tái)中輸入命令 “pt ”后按回車。2) . 輸出的進(jìn)程和線程信息如圖所示。查看有應(yīng)用程序運(yùn)行時(shí)進(jìn)程和線程的信息:1. 在OS

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論