




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統課程設計實驗WRK內存管理試驗姓名:莫金博班級:08級計算機1班學號:20086789一.實驗內容描述1.目的(1)了解Windows內存管理器(2)理解Windows的地址過程2.內容 任意給出一個虛擬地址,通過WinDbg觀察相關數據并找到其物理地址二.理論分析Windows采用頁式虛擬存儲管理技術管理內存,頁面是硬件級別上的最小保護單位1.Windows內存管理器Windows的內存管理主要由Windows執行體中的虛存管理程序負責,并由環境子系統負責,并由環境子系統負責與具體API相關的一些用戶態特性的實現。虛存管理程序是Windows中負責內存管理的那些子程序和數據結構的集合
2、內存管理器的主要任務是:地址變換:將一個進程的虛擬地址空間轉譯為物理內存地址交換:當內存不足時,將內存中的有些內容轉移到磁盤上,并且以后還要再次將這些內容讀回2.Windows內存管理策略Windows采用頁式虛擬存儲管理技術管理內存,頁面是硬件級別上最小的保護單位。根據硬件的體系結構不同,頁面尺寸被分為兩種,大頁面和小頁面。X86系統下小頁面為4KB,大頁面為4MB。大頁面的優點是:當引用同一頁面內其他數據時,地址轉移的速度會很快。不過使用大頁面通常要較大的內存空間,而且必須用一個單獨的保護項來映射,因此可能會造成出現錯誤而不引發內存訪問違例的情況。通常PC機都為小頁面3.Windows虛擬
3、地址空間布局x86結構下的布局方式:默認情況下,32位Windows系統中每個用戶進程可以占有2GB的私有地址空間。操作系統占有另外的2GB2GB用戶的進程地址空間布局如表:2GB的系統地址空間布局如同:3.虛擬地址轉譯地址轉譯是指將進程的虛擬地址空間映射到實際物理頁面的過程。x86系統中地址轉譯過程如圖:關鍵數據結構如下:頁目錄:每個進程都有一個頁目錄,它是內存管理器為了映射進程中所有的頁表位置而創建的一個頁面。進程也目錄的地址被保存在內核進程快KPROCESS中,在x86系統上,它被映射到虛擬地址0xC0300000,當一個進程正在執行時,CPU可以通過寄存器CR3知道該進程頁目錄的位置。
4、頁目錄由目錄項(PDE)構成,每個PDE長4字節,描述了該進程中所有可能的頁表的狀態和位置。其格式和PTE類似。x86系統上,要描述完整的4GB虛擬地址空間,需要1024個頁表。因此映射這些頁表的進程頁目錄需包含1024個PDE,恰好占用一個頁面。頁表:進程的頁目錄項指向頁表。每個頁表占用一個頁面,由1024項PTE組成。一個有效的PTE大小為4字節,包含兩個主域:數據所在的物理頁面的頁面幀編號(PNF)或者內存中一個頁面的物理地址的PFN;一些描述該頁面狀態和保護屬性的標志。虛擬地質結構:x86系統上,一個32位虛擬地址被解釋為三個單獨的部分,頁目錄索引、頁表索引和字節索引。由于頁目錄項有1
5、024個,因此頁目錄索引為10位;一個也表中含有1024個PTE。因此頁表索引也為10位,字節索引為12位,正好表示一頁(4KB)內容三.實驗步驟及結果1.查找頁目錄首地址以程序WG.exe作為觀測對象。啟動WinDbg到內核調試模式,運行程序WG.exe。終斷目標機運行,輸入命令:kd>!process發現WG.exe進程正處于運行狀態輸入命令:在KPROCESS中名為DirectoryTableBase的域,對應值為0x9fa6000,即WG.exe進程頁目錄的物理地址查看CR3寄存其中的內容,輸入命令:CR3寄存其中的值和KPROCESS中記錄的頁目錄基址相同。這是因為在CPU切換
6、執行任務時,其內容要更新為當前進程的頁目錄基址。2.地址轉譯過程假設給定的虛擬地址為0x401001輸入命令:可以看到:PDE的虛擬地址為C0300004.PTE的虛擬地址為C0001004最后一行信息“pfn 9e4a-DA-UWEV”表示PDE中的具體內容,9e4a是給定虛擬地址所在頁表在內存中對應的物理頁號,“-DAUWEV”是標志信息,“pfn a173 -A-UREV”表示PTE中的具體內容,a173是數據頁裝入內存的物理頁號。將數據頁對應的物理頁號a173加上業內索引(0x1)即可得到虛擬地址0x401001的物理地址3.觀察系統頁表給定觀測虛擬地址為0x80001001輸入命令:
7、當前正在執行的進程是:WG.exe輸入命令:得到PDE為C0300800,其對應的物理頁號為3b繼續讓目標機運行,啟動A.exe,然后中斷目標機運行。輸入命令:當前正在執行的進程為A.exe輸入命令:PDE信息和對應的物理頁號與前面觀測到的相同四.結論1.數據頁對應的物理頁號加上相應業內索引即可得到虛擬地址的物理地址2.不同的進程頁目錄都指向了相同的系統表頁五.心得體會在這次上機實驗,通過對WinDbg和VPc的調試運用,我熟悉了Windows內存管理器的結構,也認知到Windows如何進行地址轉譯和轉換。對相關的知識也進行了溫習,更牢的掌握了相關知識。當然這些還遠遠不夠,我以后還要繼續不斷努
8、力,去學習了解掌握操作系統的各方面知識。附錄:1.A.exe代碼#include<windows.h>#include<stdio.h>#define N 1HANDLE mutexSemaphore;HANDLE synchSemaphore_1;HANDLE synchSemaphore_2;HANDLE mutexDisplay;void Display(char*str,int delayTime) if(WaitForSingleObject(mutexDisplay,INFINITE)=WAIT_OBJECT_0) printf("%snn&quo
9、t;,str); ReleaseMutex(mutexDisplay); Sleep(delayTime); void useTime(double limit) for(double i=0;i<=limit;i+=0.001); void CreateProduct() Display("Creating a production.",0); useTime(200000); Display("Creating finished.",100); void PutProduct() Display("Putting a producti
10、on.",0); useTime(150000); Display("Putting finished",100); void GetProduct() Display("Getting a production.",0); useTime(100000); Display("Getting finished.",100); void ConsumeProduct() Display("Cosuming a production.",0); useTime(100000); Display("C
11、osuming finished.",100); void Producer() while(true) CreateProduct(); if(WaitForSingleObject(synchSemaphore_1,INFINITE)=WAIT_OBJECT_0) if(WaitForSingleObject(mutexSemaphore,INFINITE)=WAIT_OBJECT_0) PutProduct(); ReleaseSemaphore(mutexSemaphore,1,NULL); ReleaseSemaphore(synchSemaphore_2,1,NULL);
12、 void Consumer() while(true) if(WaitForSingleObject(synchSemaphore_2,INFINITE)=WAIT_OBJECT_0) if(WaitForSingleObject(mutexSemaphore,INFINITE)=WAIT_OBJECT_0) GetProduct(); ReleaseSemaphore(mutexSemaphore,1,NULL); ReleaseSemaphore(synchSemaphore_1,1,NULL); ConsumeProduct(); int main() HANDLE thread2;
13、DWORD threadID2; synchSemaphore_1=CreateSemaphore(NULL,N,N,NULL); synchSemaphore_2=CreateSemaphore(NULL,0,N,NULL); mutexSemaphore=CreateSemaphore(NULL,1,1,NULL); mutexDisplay=CreateMutex(NULL,FALSE,NULL); printf("Program start.Please use WinDbg to observe main thread.nPress any key to continue.
14、n"); getchar(); thread0=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Producer),NULL,CREATE_SUSPENDED,&threadID0); printf("A producer was created.Please use WinDbg to observe producer thread.nPress any key to continue.n"); getchar(); thread1=CreateThread(NULL,0,(LPTHREAD_START_ROUT
15、INE)(Consumer),NULL,CREATE_SUSPENDED,&threadID1); printf("A Consumer was created.Please use WinDbg to observe Consumer thread.nPress any key to continue.n"); getchar(); printf("Please select:n1Make producer thread runn2Make Consumer thread runn"); bool flag=true; bool flag_1=true,flag_2=true; int count=0; while(flag) if(getchar()='1'&&flag_1) ResumeThread(thread0); count+; flag_1=false; else if(getchar()='2'
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 特種設備崗位試題及答案
- 畜牧發展面試題目及答案
- 國際商業美術設計師考試中的視覺傳播理念與試題及答案
- 公文作文考試題及答案
- 測試實例面試題目及答案
- 北京中院面試題目及答案
- 圖像描摹考試題及答案
- 2024年國際商業美術設計師考試創新設計探究試題及答案
- 幼兒模擬測試題及答案
- 恙蟲病護理的試題及答案
- 幼兒園繪本故事:《小熊不刷牙》
- 中文版IEC62305-3建筑物的實體損害和生命危險
- 中班教育隨筆大全《如何對待調皮的學生》
- 麗聲北極星分級繪本第一級上My Noisy Schoolbag教學設計
- 完整版繼電保護定值整定計算書
- 針刺傷的預防及處理(課堂PPT)
- 畢業設計粗飼料粉碎機的設計全套CAD圖紙
- 云南某公司合并財務報表附注
- 單相半橋逆變電路
- 第5章 瓦斯抽采參數的測定及計算
- 南外加試卷精華.doc
評論
0/150
提交評論