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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、華北電力大學實驗報告|實驗名稱課程名稱操作系統(tǒng)實驗操作系統(tǒng)綜合實驗|專業(yè)班級:學生姓名:學號:成績:指導教師:實驗日期:實驗一一實驗目的1)熟悉操作系統(tǒng)集成實驗環(huán)境 OS Lab 的基本使用方法。2)練習編譯、調(diào)試 EOS操作系統(tǒng)內(nèi)核以及 EOS應用程序。二實驗內(nèi)容1)啟動 OS Lab ;2)學習 OS Lab 的基本使用方法:練習使用 OS Lab 編寫一個 Windows 控制臺應用程序,熟悉 OS Lab 的基本使用方法(主要包括新建項目、生成項目、調(diào)試項目等);3) EOS內(nèi)核項目的生成和調(diào)試 : 對EOS內(nèi)核項目的各種操作(包括新建、生成和各種調(diào)試功能等)與對 Windows 控制

2、臺項目的操作是完全一致的;4) EOS應用程序項目的生成和調(diào)試;5)退出 OS Lab 。三實驗內(nèi)容問題及解答1 ) 練習使用單步調(diào)試功能(逐過程、逐語句),體會在哪些情況下應該使用“逐過程”調(diào)試,在哪些情況下應該使用“逐語句”調(diào)試。練習使用各種調(diào)試工具(包括“監(jiān)視”窗口、“調(diào)用堆?!贝翱诘龋4穑褐鹫Z句,就是每次執(zhí)行一行語句,如果碰到函數(shù)調(diào)用,它就會進入到函數(shù)里面。 而逐過程,碰到函數(shù)時,不進入函數(shù),把函數(shù)調(diào)用當成一條語句執(zhí)行。因此,在需要進入函數(shù)體時用逐語句調(diào)試,而不需要進入函數(shù)體時用逐過程調(diào)試。2 ) 思考生成 EOS SDK 文件夾的目的和作用。查看EOS SDK 文件夾中的內(nèi)容,明白

3、文件夾的組織結(jié)構(gòu)和各個文件的來源和作用。查看EOS 應用程序包含了SDK 文件夾中的哪些頭文件,是如何包含的?答:EOS SDK是為應用程序調(diào)用系統(tǒng)API 提供服務,可作為用戶編程中可使用的華北電力大學實驗報告工具包集合。EOS SDK文件夾主要包括INC 頭文件、 LIB 文件夾導入庫文件和 BIN 文件夾動態(tài)鏈接庫,可執(zhí)行程序,二進制文件。EOS SDK包含的頭文件有: eos.h 負責導出 API 函數(shù)聲明; eosdef.h負責導出函數(shù)類型的定義; error.h負責導出錯誤碼。四實驗過程新建 Windows控制臺應用程序生成項目:執(zhí)行項目:調(diào)試項目:使用斷點終端執(zhí)行:查看 EOS S

4、DK(Software Development Kit)文件夾:修改 EOS應用程序項目名稱:五實驗心得這次是驗證性試驗,具體步驟和操作方法都是與實驗教程參考書上一致,實驗很順利,實驗過程沒有遇到困難。通過這次實驗,我掌握了OS Lab啟動和退出操作;練習使用 OSLab 編寫一個 Windows控制臺應用程序,熟悉 OSLab 的基本使用方法新建項目、生成項目、調(diào)試項目等。第頁 共頁實驗 2 操作系統(tǒng)的啟動一實驗目的跟蹤調(diào)試 EOS在PC機上從加電復位到成功啟動的全過程,了解操作系統(tǒng)的啟動過程。查看 EOS啟動后的狀態(tài)和行為,理解操作系統(tǒng)啟動后的工作方式。二實驗內(nèi)容調(diào)試 EOS 操作系統(tǒng)的啟

5、動過程。2. 調(diào)試加載程序。 Loader程序的主要任務是將操作系統(tǒng)內(nèi)核(kernel.dll文件)加載到內(nèi)存中,然后讓CPU 進入保護模式并且啟用分頁機制,最后進入操作系統(tǒng)內(nèi)核開始執(zhí)行(跳轉(zhuǎn)到 kernel.dll的入口點執(zhí)行)。調(diào)試內(nèi)核。4.EOS 啟動后的狀態(tài)和行為。查看EOS的版本號:1 )在控制臺中輸入命令“ver ”后按回車。2 )輸出 EOS版本后的控制臺如下圖所示。查看有應用程序運行時進程和線程的信息:1 )待 EOS啟動完畢,在EOS控制臺中輸入命令“hello”后按此回時車Hello。.exe應用程序就開始執(zhí)行。2 )迅速按 Ctrl+F2 切換到控制臺 2,并輸入命令“p

6、t ”后按回車。輸出的進程和線程信息如下圖所示華北電力大學實驗報告三實驗內(nèi)容問題及解答為什么 EOS操作系統(tǒng)從軟盤啟動時要使用 boot.bin 和 loader.bin 兩個程序?使用一個可以嗎?它們各自的主要功能是什么?如果將loader.bin的功能移動到 boot.bin文件中,則 boot.bin文件的大小是否仍然能保持小于512 字節(jié)?在IDE環(huán)境啟動執(zhí)行 EOS操作系統(tǒng)時,會將 boot.bin 、loader.bin 和kernel.dll 三個二進制寫入軟盤鏡像文件中,然后讓虛擬機來執(zhí)行軟盤中的 EOS操作系統(tǒng)。僅使用其中一個是不能運行的。軟盤引導扇區(qū)加載完畢后內(nèi)存中有兩個用

7、戶可用的區(qū)域, 為什么軟盤引導扇區(qū)程序選擇將 loader.bin加載到第一個可用區(qū)域的0 x1000 處呢?這樣做有什么好處?這樣做會對loader.bin文件的大小有哪些限制。首先用戶只用兩個可用區(qū)域,加載位置非此即彼。第一個可用用戶區(qū)是低地址區(qū),且空間大小比較小,適合容納小文件,所以我們選擇將占用空 loder.bi 加載到第一用戶區(qū)。優(yōu)點:由低地址開始,便于檢索查找。小文件占用小空間,節(jié)約資源。限制: loader.bin文件必須小于 1c00k.練習使用 Bochs 單步調(diào)試 BIOS 程序、軟盤引導扇區(qū)程序和 loader 程序,加深對操作系統(tǒng)啟動過程的理解。實驗 3 進程的創(chuàng)建一

8、.實驗目的一練習使用 EOS API 函數(shù) CreateProcess創(chuàng)建一個進程,掌握創(chuàng)建進程的方法,理解進程和程序的區(qū)別。二調(diào)試跟蹤CreateProcess函數(shù)的執(zhí)行過程,了解進程的創(chuàng)建過程,理解進程是資源分配的單位。二實驗內(nèi)容第頁 共頁準備實驗 . 啟動 OS Lab 。練習使用控制臺命令創(chuàng)建 EOS應用程序的進程練習通過編程的方式讓應用程序創(chuàng)建另一個應用程序的進程調(diào)試 CreateProcess 函數(shù)調(diào)試 PsCreateProcess 函數(shù)”。練習通過編程的方式創(chuàng)建應用程序的多個進程三實驗內(nèi)容問題及解答在源代碼文件 NewTwoProc.c 提供的源代碼基礎(chǔ)上進行修改, 要求使用

9、hello.exe同時創(chuàng)建 10 個進程。使用 PROCESS_INFORMATION類型定義一個有 10 個元素的數(shù)組,每一個元素對應一個進程。學習本書第 5 章中的 5.2 節(jié),了解關(guān)于線程的相關(guān)知識,然后嘗試調(diào)試PspCreateThread函數(shù),觀察線程控制塊(TCB )初始化的過程。3. 在 PsCreateProcess函數(shù)中調(diào)用了 PspCreateProcessEnvironment函數(shù)后又先后調(diào)用了 PspLoadProcessImage和 PspCreateThread函數(shù),學習這些函數(shù)的主要功能。能夠交換這些函數(shù)被調(diào)用的順序嗎?思考其中的原因。PspCreateProce

10、ssEnvironment 創(chuàng) 建 了 地 址 空 間 和 分 配 了 句 柄 表 。 PspLoadProcessImage 是 將 進 程 的 可 執(zhí) 行 映 像 加 載 到 了 進 程 的 地 址 空 間 中 。 PspCreateThread 創(chuàng)建了進程的主線程。 這三個函 4 知道自己要從哪里開始執(zhí)行, 執(zhí)行哪些指令。因此不能交換他們的順序。四實驗心得本實驗主要的問題就是用hello.exe同時創(chuàng)建 10 個進程:因為編程基礎(chǔ)不好,剛開始的程序很難通過編譯 .最后使用 PROCESS_INFORMATION類型定義一個有10 個元素的數(shù)組,每一個元素對應一個進程。使用一個循環(huán)創(chuàng)建10

11、 個子進程,然后再使用一個循環(huán)等待 10 個子進程結(jié)束,得到退出碼后關(guān)閉句柄。并對細節(jié)做了部分修正才成功。華北電力大學實驗報告實驗 4 線程的狀態(tài)和轉(zhuǎn)換一實驗目的和要求調(diào)試線程在各種狀態(tài)間的轉(zhuǎn)換過程,熟悉線程的狀態(tài)和轉(zhuǎn)換。通過為線程增加掛起狀態(tài),加深對線程狀態(tài)的理解。二實驗內(nèi)容及步驟準備實驗。調(diào)試線程狀態(tài)的轉(zhuǎn)換過程。線程由阻塞狀態(tài)進入就緒狀態(tài)線程由運行狀態(tài)進入就緒狀態(tài)線程由就緒狀態(tài)進入運行狀態(tài)6 線程由運行狀態(tài)進入阻塞狀態(tài).為線程增加掛起狀態(tài)完成 Resume 原語后,可以先使用 suspend 命令掛起 loop 線程,然后在控制臺 2中輸入命令“ Resume 31 ”(如果 loop 線

12、程的 ID 是 31 )后按回車。命令執(zhí)行成功的結(jié)果如下圖所示。如果切換回控制臺 1 后,發(fā)現(xiàn) loop 線程的執(zhí)行計數(shù)恢復增長就說明 Resume 原語可以正常工作。三實驗內(nèi)容問題及解答思考一下,在本實驗中,當 loop 線程處于運行狀態(tài)時, EOS中還有哪些線程,它們分別處于什么狀態(tài)??梢允褂每刂婆_命令 pt 查看線程的狀態(tài)。第頁 共頁當loop 線程在控制臺 1 中執(zhí)行,并且在控制臺 2 中執(zhí)行 suspend 命令時,為什么控制臺1 中的 loop 線程處于就緒狀態(tài)而不是運行狀態(tài)?在本實驗 3.2 節(jié)中只調(diào)試了圖 5-3 中顯示的最主要的四種轉(zhuǎn)換過程,對于線程由新建進入就緒狀態(tài),或者由

13、任意狀態(tài)進入結(jié)束狀態(tài)的轉(zhuǎn)換過程還沒有調(diào)試,請讀者找到這兩個轉(zhuǎn)換過程執(zhí)行的源代碼,自己練習調(diào)試??偨Y(jié)一下在圖 5-3 中顯示的轉(zhuǎn)換過程,哪些需要使用線程控制塊中的上下文(將線程控制塊中的上下文恢復到處理器中,或者將處理器的狀態(tài)復制到線程控制塊的上下文中),哪些不需要使用,并說明原因。在本實驗 3.2 節(jié)中總結(jié)的所有轉(zhuǎn)換過程都是分步驟進行的,為了確保完整性,顯然這些轉(zhuǎn)換過程是不應該被打斷的,也就是說這些轉(zhuǎn)換過程都是原語操作(參見本書第 2.6 節(jié))。請讀者找出這些轉(zhuǎn)換過程的原語操作 (關(guān)中斷和開中斷) 是在哪些代碼中完成的。 (提示,重新調(diào)試這些轉(zhuǎn)換過程,可以在調(diào)用堆棧窗口列出的各個函數(shù)中逐級查找

14、關(guān)中斷和開中斷的代碼。)6. 修改 EOS源代碼,對已經(jīng)實現(xiàn)的線程的掛起狀態(tài)進行改進。首先,不再使用Zero 狀態(tài)表示靜止就緒狀態(tài),在枚舉類型THREAD_STATE 中定義一個新的項用來表示靜止就緒狀態(tài),并對 PsSuspe ndT hread 函數(shù)進行適當修改。其次,處于阻塞狀態(tài)和運行狀態(tài)的線程華北電力大學實驗報告也應該可以被掛起并被恢復,讀者可以參考第節(jié)中的內(nèi)容以及圖 5-5 來完成此項改進。注意要設(shè)計一些方案對所修改的代碼進行全面的測試,保證所做的改進是正確的。如果完成了以上改進,請思考一下控制臺命令pt 需要進行哪些相應的修改?設(shè)計代碼STATUSPsResumThread(IN H

15、ANDLE hThread)STATUS Status;BOOL IntState;PTHREAD Thread;Status = ObRefObjectByHandle(hThread, PspThreadType, (PVOID*)&Thread); if (EOS_SUCCESS(Status) IntState = KeEnableInterrupts(FALSE); / 關(guān)中斷 if (Zero = Thread-State) ListRemoveEntry(&Thread-StateListEntry);PspReadyThread(Thread);PspThreadSchedul

16、e();Status = STATUS_SUCCESS; else Status = STATUS_NOT_SUPPORTED;KeEnableInterrupts(IntState); / 開中斷ObDerefObject(Thread);return Status;實驗 5 進程的同步一. 實驗目的和要求使用 EOS 的信號量,編程解決生產(chǎn)者消費者問題, 理解進程同步的意義。 2. 通過為線程增加掛起狀態(tài),加深對線程狀態(tài)的理解。第頁 共頁調(diào)試跟蹤 EOS 信號量的工作過程,理解進程同步的原理。修改 EOS 的信號量算法, 使之支持等待超時喚醒功能 (有限等待),加深理解進程同步的原理。二實

17、驗內(nèi)容及步驟 .實驗準備1 )啟動 OS Lab 。2 )新建一個 EOS Kernel 項目。3 )生成 EOS Kernel 項目,從而在該項目文件夾中生成SDK 文件夾。4 )新建一個 EOS應用程序項目。5 )使用在第 3 步生成的 SDK 文件夾覆蓋 EOS 應用程序項目文件夾中的SDK 文件夾。. 使用 EOS 的信號量解決生產(chǎn)者消費者問題)使用 pc.c 文件中的源代碼, 替換之前創(chuàng)建的 EOS應用程序項目中 EOSApp.c 文件內(nèi)的源代碼。)按 F7生成修改后的 EOS應用程序項目。3 )按 F5 啟動調(diào)試。 OS Lab 會首先彈出一個調(diào)試異常對話框。)在調(diào)試異常對話框中選

18、擇“否”,繼續(xù)執(zhí)行。5 )立即激活虛擬機窗口查看生產(chǎn)者消費者同步執(zhí)行的過程,如圖1)待應用程序執(zhí)行完畢后,結(jié)束此次調(diào)試。華北電力大學實驗報告圖 13 調(diào)試 EOS 信號量的工作過程 .創(chuàng)建信號量 : 信號量結(jié)構(gòu)體( SEMAPHORE )中的各個成員變量是由API 函數(shù)CreateSemaphore的對應參數(shù)初始化的,查看main函數(shù)中創(chuàng)建 Empty和 Full 信號量使用的參數(shù)有哪些不同,又有哪些相同,思考其中的原因。等待、釋放信號量等待信號量(不阻塞) : 生產(chǎn)者和消費者剛開始執(zhí)行時,用來放產(chǎn)品的緩沖區(qū)都是空的,所以生產(chǎn)者在第一次調(diào)用WaitForSingleObject函數(shù)等待 Emp

19、ty信號量時,應該不需要阻塞就可以立即返回釋放信號量(不喚醒) : 生產(chǎn)者線程通過等待 Empty 信號量使空緩沖區(qū)數(shù)量減少了 1 ,通過釋放 Full 信號量使?jié)M緩沖區(qū)數(shù)量增加了 1 ,這樣就表示生產(chǎn)者線程生產(chǎn)了一個產(chǎn)品并占用了一個緩沖區(qū)。等待信號量(阻塞) : 由于開始時生產(chǎn)者線程生產(chǎn)產(chǎn)品的速度較快,而消費者線程消第頁 共頁費產(chǎn)品的速度較慢,所以當緩沖池中所有的緩沖區(qū)都被產(chǎn)品占用時,生產(chǎn)者在生產(chǎn)新的產(chǎn)品時就會被阻塞 .釋放信號量(喚醒) : 只有當消費者線程從緩沖池中消費了一個產(chǎn)品,從而產(chǎn)生一個空緩沖區(qū)后,生產(chǎn)者線程才會被喚醒并繼續(xù)生產(chǎn) 14 號產(chǎn)品 .修改 EOS 的信號量算法1) 要

20、求 : 在 目 前EOSKernel項 目 的ps/semaphore.c文 件 中 ,PsWaitForSemaphore函 數(shù) 的Milliseconds參 數(shù)只 能 是INFINITE,PsReleaseSemaphore函數(shù)的ReleaseCount參數(shù)只能是1 ?,F(xiàn)在要求同時修改PsWaitForSemaphore函數(shù)和 PsReleaseSemaphore函數(shù)中的代碼,使這兩個參數(shù)能夠真正起到作用,使信號量對象支持等待超時喚醒功能和批量釋放功能。測試 :a. 使用修改完畢的 EOS Kernel 項目生成完全版本的 SDK 文件夾,并覆蓋之前的生產(chǎn)者消費者應用程序項目的 SDK 文

21、件夾。b. 按 F5 調(diào)試執(zhí)行原有的生產(chǎn)者消費者應用程序項目,結(jié)果必須仍然與圖1 一致。如果有錯誤,可以調(diào)試內(nèi)核代碼來查找錯誤,然后在內(nèi)核項目中修改,并重復步驟a。實驗六時間片輪轉(zhuǎn)調(diào)度一.實驗目的及要求1 調(diào)試 EOS 的線程調(diào)度程序,熟悉基于優(yōu)先級的搶先式調(diào)度。2 為 EOS 添加時間片輪轉(zhuǎn)調(diào)度,了解其它常用的調(diào)度算法。二實驗內(nèi)容及步驟華北電力大學實驗報告準備實驗閱讀控制臺命令“ rr ”相關(guān)的源代碼調(diào)試線程調(diào)度程序)調(diào)試當前線程不被搶先的情況調(diào)試當前線程被搶先的情況三為 EOS 添加時間片輪轉(zhuǎn)調(diào)度a)要求:修改 ps/sched.c 文件中的 PspRoundRobin函數(shù)(第 337行)

22、 ,在其中實現(xiàn)時間片輪轉(zhuǎn)調(diào)度算法 。)測試:三實驗內(nèi)容問題及解答修改線程時間片的大小:在 成功 為EOS添加 了時 間 片 輪轉(zhuǎn) 調(diào)度 后 , 將ps/psp.h第104行 定義 的TICKS_OF_TIME_SLICE 的值修改為 1 。在 EOS 控制臺中輸入命令“ rr ”后按回車。觀察執(zhí)行的效果。還可以按照上面的步驟為TICKS_OF_TIME_SLICE取一些其它的極端值,例如 20或 100等,分別觀察“ rr ”命令執(zhí)行的效果。通過分析造成執(zhí)行效果不同的原因,理解時間片的大小對時間片輪轉(zhuǎn)調(diào)度造成的影響。a)TICKS_OF_TIME_SLICE 的值為 1第頁 共頁TICKS_O

23、F_TIME_SLICE 的值為 20c)TICKS_OF_TIME_SLICE 的值為 100華北電力大學實驗報告實驗七物理存儲器與進程邏輯地址空間的管理.實驗目的及要求使用 EOS 的信號量,編程解決生產(chǎn)者消費者問題, 理解進程同步的意義。 2. 通過為線程增加掛起狀態(tài),加深對線程狀態(tài)的理解。調(diào)試跟蹤 EOS 信號量的工作過程,理解進程同步的原理。修改 EOS 的信號量算法,使之支持等待超時喚醒功能(有限等待) ,加深理解進程同步的原理。二實驗內(nèi)容及步驟第頁 共頁、準備實驗、執(zhí)行控制臺命令“pm”,查看物理存儲器的信息、分配物理頁和釋放物理頁 :在 pm 命令函數(shù)中添加分配物理頁和釋放物理

24、頁的代碼單步調(diào)試分配物理頁和釋放物理頁(4) 、執(zhí)行控制臺命令“vm”,查看系統(tǒng)進程的虛擬地址描述符信息執(zhí)行控制臺命令“vm”,查看當創(chuàng)建了一個應用程序進程后,系統(tǒng)進程和應用程序進程中虛擬地址描述符的信息、在系統(tǒng)進程中分配虛擬頁和釋放虛擬頁、在應用程序進程中分配虛擬頁和釋放虛擬頁、結(jié)束實驗三實現(xiàn)代碼及其說明:INT *d;if(d= VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT)/調(diào)用 API函數(shù) VirtualAlloc,分配一個整型變量所需的空間,并使用一個整型變量的指針指向這個空間printf(Allocated %d bytes v

25、irtual memory of 0 x%xnn,sizeof(int),d);printf(virtual memory original value:0 x%xnn,*d);*d = 0 xFFFFFFFF;/修改整型變量的值為0 xFFFFFFFFprintf(virtual memory new value:0 x%xnn,*d);printf(nWait for 10 secondsn);Sleep(10000);/調(diào)用 API 函數(shù) Sleep ,等待 10 秒鐘。if(VirtualFree(d,0,MEM_RELEASE)/調(diào)用 API 函數(shù) VirtualFree,釋放之前分

26、華北電力大學實驗報告配的整型變量的空間printf(nRealease virtual memory success!n);elseprintf(realease errorn);printf(nEndless loop!);for(;);elseprintf(errorn);return -1;/若不能成功分配,打印出error,返回 -1.printf(Hello world!n);return 0;四心得體會本次實驗主要問題在于如何處理異常情況,也就是程序的健壯性。最開始調(diào)試結(jié)果不正確,在老師指導下進行了分步調(diào)試,修改了部分代碼,最后成功了。最大的收獲是:熟練對代碼分步調(diào)試,找出錯誤。實

27、驗八分頁存儲器管理第頁 共頁一實驗目的與要求學習 i386 處理器的二級頁表硬件機制,理解分頁存儲器管理原理。查看 EOS 應用程序進程和系統(tǒng)進程的二級頁表映射信息, 理解頁目錄和頁表的管理方式。編程修改頁目錄和頁表的映射關(guān)系,理解分頁地址變換原理。二實驗步驟與代碼:設(shè)計代碼PRIVATEVOIDConsoleCmdMemoryMap(IN HANDLE StdHandle)BOOL IntState;ULONG PfnOfPageDirectory;ULONG PageTotal = 0;ULONG IndexOfDirEntry;ULONG IndexOfTableEntry;PMMPTE

28、_HARDWARE pPde;PMMPTE_HARDWARE pPte;ULONG_PTR PageTableBase;ULONG_PTR VirtualBase;const char* OutputFormat = NULL;ASSERT(PspCurrentProcess = PspSystemProcess);IntState = KeEnableInterrupts(FALSE); / ULONG PfnArray2;關(guān)中斷華北電力大學實驗報告MiAllocateZeroedPages(2, PfnArray);OutputFormat = New page frame number:

29、 0 x%X, 0 x%Xn;fprintf(StdHandle, OutputFormat, PfnArray0, PfnArray1);KdbPrint(OutputFormat, PfnArray0, PfnArray1);IndexOfDirEntry = (0 xE0000000 22);/虛擬地址的高10位是PDE 標號(PMMPTE_HARDWARE)0 xC0300000)IndexOfDirEntry.PageFrameNumber = PfnArray0;(PMMPTE_HARDWARE)0 xC0300000)IndexOfDirEntry.Valid = 1;/有效(P

30、MMPTE_HARDWARE)0 xC0300000)IndexOfDirEntry.Writable = 1; /可寫MiFlushEntireTlb();/ 刷新快表PageTableBase = 0 xC0000000 + IndexOfDirEntry * PAGE_SIZE;IndexOfTableEntry=(0 xE000000012)&0 x3FF;(PMMPTE_HARDWARE)PageTableBase)IndexOfTableEntry.PageFrameNumber = PfnArray1;(PMMPTE_HARDWARE)PageTableBase)IndexOfT

31、ableEntry.Valid = 1;(PMMPTE_HARDWARE)PageTableBase)IndexOfTableEntry.Writable= 1;MiFlushEntireTlb();/刷新快表IndexOfTableEntry = (0 xE0001000 12) & 0 x3FF;(PMMPTE_HARDWARE)PageTableBase)IndexOfTableEntry.PageFrameN第頁 共頁umber = PfnArray1;(PMMPTE_HARDWARE)PageTableBase)IndexOfTableEntry.Valid = 1;(PMMPTE_

32、HARDWARE)PageTableBase)IndexOfTableEntry.Writable = 1;MiFlushEntireTlb(); / 刷新快表 OutputFormat = Read Memory 0 xE0001000: %dn; fprintf(StdHandle, OutputFormat, *(PINT)0 xE0001000); KdbPrint(OutputFormat, *(PINT)0 xE0001000);*(PINT)0 xE0000000) = 100;/寫共享內(nèi)存fprintf(StdHandle, OutputFormat, *(PINT)0 xE0

33、001000);KdbPrint(OutputFormat, *(PINT)0 xE0001000);OutputFormat = nCR3-0 x%Xn;PfnOfPageDirectory=(ULONG)(PspSystemProcess-Pas-PfnOfPageDirectory);fprintf(StdHandle, OutputFormat, PfnOfPageDirectory);KdbPrint(OutputFormat, PfnOfPageDirectory);for(IndexOfDirEntry=0;IndexOfDirEntryIndexOfDirEntry+)(PMM

34、PTE_HARDWARE)(ULONG_PTR)PDE_BASE+Valid)continue;OutputFormat = PDE: 0 x%X (0 x%X)-0 x%Xn;VirtualBase = (IndexOfDirEntry PageFrameNumber);KdbPrint(OutputFormat,IndexOfDirEntry,VirtualBase,pPde-PageFrameNumber);PageTableBase=(ULONG_PTR)PTE_BASE+IndexOfDirEntry*PAGE_SIZE;for(IndexOfTableEntry=0;IndexOf

35、TableEntryValid)continue;OutputFormat = ttPTE: 0 x%X (0 x%X)-0 x%Xn;VirtualBase=(IndexOfDirEntryPDI_SHIFT)|(IndexOfTableEntry PageFrameNumber);KdbPrint(OutputFormat,IndexOfTableEntry,VirtualBase,pPte-PageFrameNumber);OutputFormat = nPhysical Page Total: %dn;fprintf(StdHandle, OutputFormat, PageTotal);第頁 共頁K

溫馨提示

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

最新文檔

評論

0/150

提交評論