操作系統(tǒng)課程設(shè)計(jì)215514386_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)215514386_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)215514386_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)215514386_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)215514386_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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è)計(jì)實(shí)驗(yàn)WRK內(nèi)存管理試驗(yàn)姓名:莫金博班級(jí):08級(jí)計(jì)算機(jī)1班學(xué)號(hào):20086789一.實(shí)驗(yàn)內(nèi)容描述1.目的(1)了解Windows內(nèi)存管理器(2)理解Windows的地址過(guò)程2.內(nèi)容 任意給出一個(gè)虛擬地址,通過(guò)WinDbg觀察相關(guān)數(shù)據(jù)并找到其物理地址二.理論分析Windows采用頁(yè)式虛擬存儲(chǔ)管理技術(shù)管理內(nèi)存,頁(yè)面是硬件級(jí)別上的最小保護(hù)單位1.Windows內(nèi)存管理器Windows的內(nèi)存管理主要由Windows執(zhí)行體中的虛存管理程序負(fù)責(zé),并由環(huán)境子系統(tǒng)負(fù)責(zé),并由環(huán)境子系統(tǒng)負(fù)責(zé)與具體API相關(guān)的一些用戶態(tài)特性的實(shí)現(xiàn)。虛存管理程序是Windows中負(fù)責(zé)內(nèi)存管理的那些子程序和數(shù)據(jù)結(jié)構(gòu)的集合

2、內(nèi)存管理器的主要任務(wù)是:地址變換:將一個(gè)進(jìn)程的虛擬地址空間轉(zhuǎn)譯為物理內(nèi)存地址交換:當(dāng)內(nèi)存不足時(shí),將內(nèi)存中的有些內(nèi)容轉(zhuǎn)移到磁盤(pán)上,并且以后還要再次將這些內(nèi)容讀回2.Windows內(nèi)存管理策略Windows采用頁(yè)式虛擬存儲(chǔ)管理技術(shù)管理內(nèi)存,頁(yè)面是硬件級(jí)別上最小的保護(hù)單位。根據(jù)硬件的體系結(jié)構(gòu)不同,頁(yè)面尺寸被分為兩種,大頁(yè)面和小頁(yè)面。X86系統(tǒng)下小頁(yè)面為4KB,大頁(yè)面為4MB。大頁(yè)面的優(yōu)點(diǎn)是:當(dāng)引用同一頁(yè)面內(nèi)其他數(shù)據(jù)時(shí),地址轉(zhuǎn)移的速度會(huì)很快。不過(guò)使用大頁(yè)面通常要較大的內(nèi)存空間,而且必須用一個(gè)單獨(dú)的保護(hù)項(xiàng)來(lái)映射,因此可能會(huì)造成出現(xiàn)錯(cuò)誤而不引發(fā)內(nèi)存訪問(wèn)違例的情況。通常PC機(jī)都為小頁(yè)面3.Windows虛擬

3、地址空間布局x86結(jié)構(gòu)下的布局方式:默認(rèn)情況下,32位Windows系統(tǒng)中每個(gè)用戶進(jìn)程可以占有2GB的私有地址空間。操作系統(tǒng)占有另外的2GB2GB用戶的進(jìn)程地址空間布局如表:2GB的系統(tǒng)地址空間布局如同:3.虛擬地址轉(zhuǎn)譯地址轉(zhuǎn)譯是指將進(jìn)程的虛擬地址空間映射到實(shí)際物理頁(yè)面的過(guò)程。x86系統(tǒng)中地址轉(zhuǎn)譯過(guò)程如圖:關(guān)鍵數(shù)據(jù)結(jié)構(gòu)如下:頁(yè)目錄:每個(gè)進(jìn)程都有一個(gè)頁(yè)目錄,它是內(nèi)存管理器為了映射進(jìn)程中所有的頁(yè)表位置而創(chuàng)建的一個(gè)頁(yè)面。進(jìn)程也目錄的地址被保存在內(nèi)核進(jìn)程快KPROCESS中,在x86系統(tǒng)上,它被映射到虛擬地址0xC0300000,當(dāng)一個(gè)進(jìn)程正在執(zhí)行時(shí),CPU可以通過(guò)寄存器CR3知道該進(jìn)程頁(yè)目錄的位置。

4、頁(yè)目錄由目錄項(xiàng)(PDE)構(gòu)成,每個(gè)PDE長(zhǎng)4字節(jié),描述了該進(jìn)程中所有可能的頁(yè)表的狀態(tài)和位置。其格式和PTE類似。x86系統(tǒng)上,要描述完整的4GB虛擬地址空間,需要1024個(gè)頁(yè)表。因此映射這些頁(yè)表的進(jìn)程頁(yè)目錄需包含1024個(gè)PDE,恰好占用一個(gè)頁(yè)面。頁(yè)表:進(jìn)程的頁(yè)目錄項(xiàng)指向頁(yè)表。每個(gè)頁(yè)表占用一個(gè)頁(yè)面,由1024項(xiàng)PTE組成。一個(gè)有效的PTE大小為4字節(jié),包含兩個(gè)主域:數(shù)據(jù)所在的物理頁(yè)面的頁(yè)面幀編號(hào)(PNF)或者內(nèi)存中一個(gè)頁(yè)面的物理地址的PFN;一些描述該頁(yè)面狀態(tài)和保護(hù)屬性的標(biāo)志。虛擬地質(zhì)結(jié)構(gòu):x86系統(tǒng)上,一個(gè)32位虛擬地址被解釋為三個(gè)單獨(dú)的部分,頁(yè)目錄索引、頁(yè)表索引和字節(jié)索引。由于頁(yè)目錄項(xiàng)有1

5、024個(gè),因此頁(yè)目錄索引為10位;一個(gè)也表中含有1024個(gè)PTE。因此頁(yè)表索引也為10位,字節(jié)索引為12位,正好表示一頁(yè)(4KB)內(nèi)容三.實(shí)驗(yàn)步驟及結(jié)果1.查找頁(yè)目錄首地址以程序WG.exe作為觀測(cè)對(duì)象。啟動(dòng)WinDbg到內(nèi)核調(diào)試模式,運(yùn)行程序WG.exe。終斷目標(biāo)機(jī)運(yùn)行,輸入命令:kd>!process發(fā)現(xiàn)WG.exe進(jìn)程正處于運(yùn)行狀態(tài)輸入命令:在KPROCESS中名為DirectoryTableBase的域,對(duì)應(yīng)值為0x9fa6000,即WG.exe進(jìn)程頁(yè)目錄的物理地址查看CR3寄存其中的內(nèi)容,輸入命令:CR3寄存其中的值和KPROCESS中記錄的頁(yè)目錄基址相同。這是因?yàn)樵贑PU切換

6、執(zhí)行任務(wù)時(shí),其內(nèi)容要更新為當(dāng)前進(jìn)程的頁(yè)目錄基址。2.地址轉(zhuǎn)譯過(guò)程假設(shè)給定的虛擬地址為0x401001輸入命令:可以看到:PDE的虛擬地址為C0300004.PTE的虛擬地址為C0001004最后一行信息“pfn 9e4a-DA-UWEV”表示PDE中的具體內(nèi)容,9e4a是給定虛擬地址所在頁(yè)表在內(nèi)存中對(duì)應(yīng)的物理頁(yè)號(hào),“-DAUWEV”是標(biāo)志信息,“pfn a173 -A-UREV”表示PTE中的具體內(nèi)容,a173是數(shù)據(jù)頁(yè)裝入內(nèi)存的物理頁(yè)號(hào)。將數(shù)據(jù)頁(yè)對(duì)應(yīng)的物理頁(yè)號(hào)a173加上業(yè)內(nèi)索引(0x1)即可得到虛擬地址0x401001的物理地址3.觀察系統(tǒng)頁(yè)表給定觀測(cè)虛擬地址為0x80001001輸入命令:

7、當(dāng)前正在執(zhí)行的進(jìn)程是:WG.exe輸入命令:得到PDE為C0300800,其對(duì)應(yīng)的物理頁(yè)號(hào)為3b繼續(xù)讓目標(biāo)機(jī)運(yùn)行,啟動(dòng)A.exe,然后中斷目標(biāo)機(jī)運(yùn)行。輸入命令:當(dāng)前正在執(zhí)行的進(jìn)程為A.exe輸入命令:PDE信息和對(duì)應(yīng)的物理頁(yè)號(hào)與前面觀測(cè)到的相同四.結(jié)論1.數(shù)據(jù)頁(yè)對(duì)應(yīng)的物理頁(yè)號(hào)加上相應(yīng)業(yè)內(nèi)索引即可得到虛擬地址的物理地址2.不同的進(jìn)程頁(yè)目錄都指向了相同的系統(tǒng)表頁(yè)五.心得體會(huì)在這次上機(jī)實(shí)驗(yàn),通過(guò)對(duì)WinDbg和VPc的調(diào)試運(yùn)用,我熟悉了Windows內(nèi)存管理器的結(jié)構(gòu),也認(rèn)知到Windows如何進(jìn)行地址轉(zhuǎn)譯和轉(zhuǎn)換。對(duì)相關(guān)的知識(shí)也進(jìn)行了溫習(xí),更牢的掌握了相關(guān)知識(shí)。當(dāng)然這些還遠(yuǎn)遠(yuǎn)不夠,我以后還要繼續(xù)不斷努

8、力,去學(xué)習(xí)了解掌握操作系統(tǒng)的各方面知識(shí)。附錄: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. 本站所有資源如無(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)論