




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)7 分頁(yè)存儲(chǔ)器管理實(shí)驗(yàn)性質(zhì):驗(yàn)證設(shè)計(jì) 建議學(xué)時(shí):2學(xué)時(shí) 一、實(shí)驗(yàn)?zāi)康?l 學(xué)習(xí)i386處理器的二級(jí)頁(yè)表硬件機(jī)制,理解分頁(yè)存儲(chǔ)器管理原理。 l 查看EOS應(yīng)用程序進(jìn)程和系統(tǒng)進(jìn)程的二級(jí)頁(yè)表映射信息,理解頁(yè)目錄和頁(yè)表的管理方式。 l 編程修改頁(yè)目錄和頁(yè)表的映射關(guān)系,理解分頁(yè)地址變換原理。 二、預(yù)備知識(shí) 閱讀本書(shū)第6章。了解i386處理器的二級(jí)頁(yè)表硬件機(jī)制,EOS操作系統(tǒng)的分頁(yè)存儲(chǔ)器管理方式,以及進(jìn)程地址空間的內(nèi)存分布。 三、實(shí)驗(yàn)內(nèi)容 3.1 準(zhǔn)備實(shí)驗(yàn) 按照下面的步驟準(zhǔn)備本次實(shí)驗(yàn): 1. 啟動(dòng)OS Lab。 2. 新建一個(gè)EOS應(yīng)用程序項(xiàng)目。 3.2 查看EOS應(yīng)用程序進(jìn)程的頁(yè)目錄和頁(yè)表 使用OS
2、 Lab打開(kāi)本實(shí)驗(yàn)文件夾中的memory.c和getcr3.asm文件(將文件拖動(dòng)到OS Lab窗口中釋放即可打開(kāi))。仔細(xì)閱讀這兩個(gè)文件中的源代碼和注釋,main函數(shù)的流程圖可以參見(jiàn)圖16-1。 按照下面的步驟查看EOS應(yīng)用程序進(jìn)程的頁(yè)目錄和頁(yè)表: 1. 使用memory.c文件中的源代碼替換之前創(chuàng)建的EOS應(yīng)用程序項(xiàng)目中EOSApp.c文件中的源代碼。 2. 右鍵點(diǎn)擊“項(xiàng)目管理器”窗口中的“源文件”文件夾節(jié)點(diǎn),在彈出的快捷菜單中選擇“添加”中的“添加新文件”。 3. 在彈出的“添加新文件”對(duì)話框中選擇“asm 源文件”模板。 4. 在“名稱”中輸入文件名稱“func”。 5. 點(diǎn)擊“添加”按
3、鈕添加并自動(dòng)打開(kāi)文件func.asm。 6. 將getcr3.asm文件中的源代碼復(fù)制到func.asm文件中。 7. 按F7生成修改后的EOS應(yīng)用程序項(xiàng)目。 8. 按F5啟動(dòng)調(diào)試。 9. 應(yīng)用程序執(zhí)行的過(guò)程中,會(huì)將該進(jìn)程的二級(jí)頁(yè)表映射信息輸出到虛擬機(jī)窗口和OS Lab“輸出”窗口中,輸出內(nèi)容如圖16-2(a)。 10. 將“輸出”窗口中的內(nèi)容復(fù)制到一個(gè)文本文件中。 圖16-2:(a)EOS應(yīng)用程序進(jìn)程的二級(jí)頁(yè)表映射信息 (b)有應(yīng)用程序進(jìn)程時(shí),系統(tǒng)進(jìn)程的二級(jí)頁(yè)表映射信息 圖16-2(a)中第一行是CR3寄存器的值,也就是頁(yè)目錄所在的頁(yè)框號(hào)。第一列是頁(yè)目錄中有效的PDE,第二列是PDE映射的頁(yè)
4、表中有效的PTE(詳細(xì)的格式可以參考源代碼中的注釋)。注意,在標(biāo)號(hào)為0x200的PDE對(duì)應(yīng)的頁(yè)表中,所有的1024個(gè)PTE都是有效的,所以在圖中省略了一部分。 根據(jù)圖16-2(a)回答下面的問(wèn)題: l 應(yīng)用程序進(jìn)程的頁(yè)目錄和頁(yè)表一共占用了幾個(gè)物理頁(yè)?頁(yè)框號(hào)分別是多少? l 映射用戶地址空間(低2G)的頁(yè)表的頁(yè)框號(hào)是多少?該頁(yè)表有幾個(gè)有效的PTE,或者說(shuō)有幾個(gè)物理頁(yè)用來(lái)裝載應(yīng)用程序的代碼、數(shù)據(jù)和堆棧?頁(yè)框號(hào)分別是多少? 3.3 查看應(yīng)用程序進(jìn)程和系統(tǒng)進(jìn)程并發(fā)時(shí)的頁(yè)目錄和頁(yè)表 需要對(duì)EOS應(yīng)用程序進(jìn)行一些修改: 1. 結(jié)束之前的調(diào)試。 2. 取消EOSApp.c第121行語(yǔ)句的注釋(該行語(yǔ)句會(huì)等待
5、10秒)。 3. 按F7生成修改后的EOS應(yīng)用程序項(xiàng)目。 4. 按F5啟動(dòng)調(diào)試。 5. 在“Console-1”中會(huì)自動(dòng)執(zhí)行EOSApp.exe,創(chuàng)建該應(yīng)用程序進(jìn)程。利用其等待10秒的時(shí)間,按Ctrl+F2切換到“Console-2”。 6. 在“Console-2”中輸入命令“mm”后按回車,會(huì)將系統(tǒng)進(jìn)程的二級(jí)頁(yè)表映射信息輸出到虛擬機(jī)窗口和OS Lab的“輸出”窗口,輸出內(nèi)容如圖16-2(b)。注意,在圖16-2(b)中添加了一些空行,方便與圖16-2(a)比較?!癈onsole-1”中的應(yīng)用程序在等待10秒后,又會(huì)輸出和圖16-2(a)一致的內(nèi)容。 7. 將“輸出”窗口中的內(nèi)容復(fù)制到一個(gè)文
6、本文件中。 控制臺(tái)命令“mm”對(duì)應(yīng)的源代碼在EOS內(nèi)核項(xiàng)目ke/sysproc.c文件的ConsoleCmdMemoryMap函數(shù)中(第382行)。閱讀這部分源代碼后會(huì)發(fā)現(xiàn),其與EOSApp.c文件中的源代碼基本類似。 結(jié)合圖16-2(a)和(b)回答下面的問(wèn)題: l EOS啟動(dòng)后系統(tǒng)進(jìn)程是一直運(yùn)行的,所以當(dāng)創(chuàng)建應(yīng)用程序進(jìn)程后,系統(tǒng)中就同時(shí)存在了兩個(gè)進(jìn)程,這兩個(gè)進(jìn)程是否有各自的頁(yè)目錄?在頁(yè)目錄映射的頁(yè)表中,哪些是獨(dú)占的,哪些是共享的?分析其中的原因。 l 統(tǒng)計(jì)當(dāng)應(yīng)用程序進(jìn)程和系統(tǒng)進(jìn)程并發(fā)時(shí),總共有多少物理頁(yè)被占用? 應(yīng)用程序結(jié)束后,在“Console-1”中再次輸入命令“mm”,查看在沒(méi)有應(yīng)用
7、程序進(jìn)程時(shí),系統(tǒng)進(jìn)程的頁(yè)目錄和頁(yè)表。將“輸出”窗口中的內(nèi)容復(fù)制到一個(gè)文本文件中。將輸出的內(nèi)容與圖16-2(b)比較,思考為什么系統(tǒng)進(jìn)程(即內(nèi)核地址空間)占用的物理頁(yè)會(huì)減少?(提示:創(chuàng)建應(yīng)用程序進(jìn)程時(shí),EOS內(nèi)核要為其創(chuàng)建PCB,應(yīng)用程序結(jié)束時(shí),內(nèi)核要釋放PCB占用的內(nèi)存。) 3.4 查看應(yīng)用程序進(jìn)程并發(fā)時(shí)的頁(yè)目錄和頁(yè)表 需要對(duì)EOS應(yīng)用程序進(jìn)行一些修改: 1. 結(jié)束之前的調(diào)試。 2. 取消EOSApp.c第201行語(yǔ)句的注釋(該行語(yǔ)句會(huì)等待10秒)。 3. 按F7生成修改后的EOS應(yīng)用程序項(xiàng)目。 4. 按F5啟動(dòng)調(diào)試。 5. 在“Console-1”中會(huì)自動(dòng)執(zhí)行EOSApp.exe,創(chuàng)建該應(yīng)用
8、程序進(jìn)程。利用其等待10秒的時(shí)間,按Ctrl+F2切換到“Console-2”。 6. 在“Console-2”中輸入“eosapp”后按回車,再執(zhí)行一個(gè)EOSApp.exe。 7. 由EOSApp.exe創(chuàng)建的兩個(gè)并發(fā)進(jìn)程會(huì)先后在各自的控制臺(tái)和OS Lab“輸出”窗口中,輸出各自的二級(jí)頁(yè)表映射信息。輸出的內(nèi)容如圖16-3。 8. 將“輸出”窗口中的內(nèi)容復(fù)制到一個(gè)文本文件中。 圖16-3:(a)應(yīng)用程序進(jìn)程1的二級(jí)頁(yè)表映射信息 (b)應(yīng)用程序進(jìn)程2的二級(jí)頁(yè)表映射信息結(jié)合圖16-3(a)和(b)回答下面的問(wèn)題: l 觀察這兩個(gè)進(jìn)程的用戶地址空間,可以得出結(jié)論:同一個(gè)應(yīng)用程序創(chuàng)建的兩個(gè)并發(fā)的進(jìn)程,
9、它們的用戶虛擬地址空間完全相同,而映射的物理頁(yè)完全不同,從而保證相同的行為(執(zhí)行過(guò)程)可以在獨(dú)立的空間內(nèi)完成。 假設(shè)進(jìn)程1的0x41E和0x41F物理頁(yè)保存了應(yīng)用程序的可執(zhí)行代碼,由于可執(zhí)行代碼是不變的、只讀的,現(xiàn)在假設(shè)優(yōu)化過(guò)的EOS允許進(jìn)程2共享進(jìn)程1的保存了可執(zhí)行代碼的物理頁(yè),嘗試結(jié)合圖16-3寫(xiě)出此時(shí)進(jìn)程2用戶地址空間的映射信息。并說(shuō)明共享可執(zhí)行代碼的物理頁(yè)能帶來(lái)哪些好處。 l 統(tǒng)計(jì)當(dāng)兩個(gè)應(yīng)用程序進(jìn)程并發(fā)時(shí),總共有多少物理頁(yè)被占用?有更多的進(jìn)程同時(shí)運(yùn)行呢?根據(jù)之前的操作方式,嘗試在更多的控制臺(tái)中啟動(dòng)應(yīng)用程序來(lái)驗(yàn)證自己的想法。如果進(jìn)程的數(shù)量足夠多,物理內(nèi)存是否會(huì)用盡,如何解決該問(wèn)題? 3.
10、5 在二級(jí)頁(yè)表中映射新申請(qǐng)的物理頁(yè) 下面通過(guò)編程的方式,從EOS操作系統(tǒng)內(nèi)核中申請(qǐng)兩個(gè)未用的物理頁(yè),將第一個(gè)物理頁(yè)當(dāng)作頁(yè)表,映射基址為0xE0000000的4M虛擬地址空間,然后將第二個(gè)物理頁(yè)分別映射到基址為0xE0000000和0xE0001000的4K虛擬地址空間。從而驗(yàn)證下面的結(jié)論: l 雖然進(jìn)程可以訪問(wèn)4G虛擬地址空間,但是只有當(dāng)一個(gè)虛擬地址通過(guò)二級(jí)頁(yè)表映射關(guān)系能夠映射到實(shí)際的物理地址時(shí),該虛擬地址才能夠被訪問(wèn),否則會(huì)觸發(fā)異常。 l 所有未用的物理頁(yè)都是由EOS操作系統(tǒng)內(nèi)核統(tǒng)一管理的,使用時(shí)必須向內(nèi)核申請(qǐng)。 l 為虛擬地址映射物理頁(yè)時(shí),必須首先為頁(yè)目錄安裝頁(yè)表,然后再為頁(yè)表安裝物理頁(yè)。
11、并且只有在刷新快表后,對(duì)頁(yè)目錄和頁(yè)表的更改才能生效。 l 不同的虛擬地址可以映射相同的物理頁(yè),從而實(shí)現(xiàn)共享。 首先驗(yàn)證第一個(gè)結(jié)論: 1. 新建一個(gè) EOS Kernel項(xiàng)目。 2. 從“項(xiàng)目管理器”打開(kāi)ke/sysproc.c文件。 3. 打開(kāi)本實(shí)驗(yàn)文件夾中的MapNewPage.c文件(將文件拖動(dòng)到OS Lab窗口中釋放即可)。 4. 在sysproc.c文件的ConsoleCmdMemoryMap函數(shù)中找到“關(guān)中斷”的代碼行(第413行),將MapNewPage.c文件中的代碼插入到“關(guān)中斷”代碼行的后面。 5. 按F7生成該內(nèi)核項(xiàng)目。 6. 按F5啟動(dòng)調(diào)試。 7. 在EOS控制臺(tái)中輸入命
12、令“mm”后按回車。 8. OS Lab會(huì)彈出一個(gè)調(diào)試異常對(duì)話框,選擇“是”調(diào)試異常。 9. 黃色箭頭指向訪問(wèn)虛擬地址0xE0000000的代碼行。由于該虛擬地址沒(méi)有映射物理內(nèi)存(圖16-2和圖16-3中都未映射該虛擬地址),所以對(duì)該虛擬地址的訪問(wèn)會(huì)觸發(fā)異常。 10. 結(jié)束此次調(diào)試,然后刪除或者注釋會(huì)觸發(fā)異常的該行代碼。 按照下面的步驟驗(yàn)證其它結(jié)論: 1. 按F7生成該內(nèi)核項(xiàng)目。 2. 按F5啟動(dòng)調(diào)試。 3. 在EOS控制臺(tái)中輸入命令“mm”后按回車。 4. 在OS Lab的“輸出”窗口中查看執(zhí)行的結(jié)果,并將“輸出”窗口中的內(nèi)容復(fù)制到一個(gè)文本文件中。 結(jié)合插入的源代碼和執(zhí)行的結(jié)果理解上面的結(jié)論
13、。注意,在代碼中修改了虛擬地址0xE0000000處的內(nèi)存的值,然后從虛擬地址0xE0001000處讀取到了相同的值,原因是這兩處虛擬地址映射到了相同的物理頁(yè)。四、思考與練習(xí) 1. 觀察之前輸出的頁(yè)目錄和頁(yè)表的映射關(guān)系,可以看到頁(yè)目錄的第0x300個(gè)PDE映射的頁(yè)框號(hào)就是頁(yè)目錄本身,說(shuō)明頁(yè)目錄被復(fù)用為了頁(yè)表。而恰恰就是這種映射關(guān)系決定了4K的頁(yè)目錄映射在虛擬地址空間的0xC0300000-0xC0300FFF,4M的頁(yè)表映射在0xC0000000-0xC03FFFFF?,F(xiàn)在,假設(shè)修改了頁(yè)目錄,使其第0x100個(gè)PDE映射的頁(yè)框號(hào)是頁(yè)目錄本身,此時(shí)頁(yè)目錄和頁(yè)表會(huì)映射在4G虛擬地址空間的什么位置呢
14、?說(shuō)明計(jì)算方法。 2. 修改EOSApp.c中的源代碼,通過(guò)編程的方式統(tǒng)計(jì)并輸出用戶地址空間占用的內(nèi)存數(shù)目。 3. 修改EOSApp.c中的源代碼,通過(guò)編程的方式統(tǒng)計(jì)并輸出頁(yè)目錄和頁(yè)表的數(shù)目。注意頁(yè)目錄被復(fù)用為頁(yè)表。 4. 在EOS啟動(dòng)時(shí),軟盤引導(dǎo)扇區(qū)被加載到從0x7C00開(kāi)始的512個(gè)字節(jié)的物理內(nèi)存中,計(jì)算一下其所在的物理頁(yè)框號(hào),然后根據(jù)物理內(nèi)存與虛擬內(nèi)存的映射關(guān)系得到其所在的虛擬地址。修改EOSApp.c中的源代碼,嘗試將軟盤引導(dǎo)扇區(qū)所在虛擬地址的512個(gè)字節(jié)值打印出來(lái),與boot.lst文件中的指令字節(jié)碼進(jìn)行比較,驗(yàn)證計(jì)算的虛擬地址是否正確。 5. 既然所有1024個(gè)頁(yè)表(共4M)映射在虛擬地址空間的0xC0000000-
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)三定工作總結(jié)
- 弘揚(yáng)塞罕壩精神團(tuán)日活動(dòng)
- 2025年 車險(xiǎn)理賠考試卷庫(kù)六附答案
- 創(chuàng)業(yè)培訓(xùn)開(kāi)班
- 手衛(wèi)生知識(shí)培訓(xùn)主要內(nèi)容
- 銀行年度員工培訓(xùn)方案
- 支原體肺炎檢查方法與診療規(guī)范
- 腫瘤患者的舒適與安全
- 中藥在腫瘤綜合治療中的應(yīng)用
- 場(chǎng)地總監(jiān)全面職責(zé)協(xié)議書(shū)模板
- LS 8010-2014植物油庫(kù)設(shè)計(jì)規(guī)范
- GM/T 0021-2012動(dòng)態(tài)口令密碼應(yīng)用技術(shù)規(guī)范
- GB/T 28022-2021玩具適用年齡判定指南
- GB/T 11832-2002翻斗式雨量計(jì)
- FZ/T 73001-2016襪子
- 2022版音樂(lè)課程標(biāo)準(zhǔn)解讀
- 充電樁檢測(cè)報(bào)告模板
- 車載診斷系統(tǒng)(OBD)簡(jiǎn)介課件
- 無(wú)犯罪證明委托書(shū)模板
- 城市軌道交通列車運(yùn)行圖編制課件
- 吊車施工專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論