版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、內(nèi)存管理模擬實(shí)驗(yàn)?zāi)繕?biāo):本實(shí)驗(yàn)的目的是從不同側(cè)面了解Windows 2000/XP對(duì)用戶(hù)進(jìn)程的虛擬內(nèi)存空間的管理、分配方法。同時(shí)需要了解跟蹤程序的編寫(xiě)方法(與被跟蹤程序保持同步,使用Windows提供的信號(hào)量)。對(duì)Windows分配虛擬內(nèi)存、改變內(nèi)存狀態(tài),以及對(duì)物理內(nèi)存(physical memory)和頁(yè)面文件(pagefile)狀態(tài)查詢(xún) 的API函數(shù)的功能、參數(shù)限制、使用規(guī)則要進(jìn)一步了解。默認(rèn)情況下,32位 Windows 2000/XP上每個(gè)用戶(hù)進(jìn)程可以占有 2GB的私有地址空間,操作系統(tǒng) 占有剩下的2GB o Windows 2000 /XP在X86體系結(jié)構(gòu)上利用二級(jí)頁(yè)表結(jié)構(gòu)來(lái)實(shí)現(xiàn)虛擬地
2、址向物理地址 的變換。一個(gè) 32位虛擬地址被解釋為三個(gè)獨(dú)立的分量一一頁(yè)目錄索引、頁(yè)表索引和字節(jié)索引一一它們 用于找出描述頁(yè)面映射結(jié)構(gòu)的索引。頁(yè)面大小及頁(yè)表項(xiàng)的寬度決定了頁(yè)目錄和頁(yè)表索引的寬度。實(shí)驗(yàn)要求:使用 Windows 2000/XP的API函數(shù),編寫(xiě)一個(gè)包含兩個(gè)線(xiàn)程的進(jìn)程, 一個(gè)線(xiàn)程用于模擬內(nèi)存分配活動(dòng),一個(gè)線(xiàn)程用于跟蹤第一個(gè)線(xiàn)程的內(nèi)存行為, 而且要求兩個(gè)線(xiàn)程之間通過(guò)信號(hào)量實(shí)現(xiàn)同步。模擬內(nèi)存活動(dòng)的線(xiàn)程可以從一個(gè) 文件中讀出要進(jìn)行的內(nèi)存操作,每個(gè)內(nèi)存操作包括如下內(nèi)容: 時(shí)間:操作等待時(shí)間。塊數(shù):分配內(nèi)存的粒度。操作:包括保留(reserve一個(gè)區(qū)域、提交(commit) 個(gè)區(qū)域、釋放(re
3、lease一個(gè) 區(qū)域、回收(decommit)一個(gè)區(qū)域和加鎖(lock)與解鎖(unlock) 個(gè)區(qū)域,可以將 這些操作編號(hào)存放于文件。保留是指保留進(jìn)程的虛擬地址空間,而不分配物理存儲(chǔ)空間。提交在內(nèi)存中分配物理存儲(chǔ)空間?;厥帐侵羔尫盼锢韮?nèi)存空間,但在虛擬地址空間仍然保留,它與提交相對(duì)應(yīng),即可以回收已經(jīng)提交的內(nèi)存塊。釋放是指將物理存儲(chǔ)和虛擬地址空間全部釋放,它與保留(reserve相對(duì)應(yīng),即可以釋放已經(jīng)保留的內(nèi)存塊。大小:塊的大小。訪(fǎng) 問(wèn) 權(quán) 限: 共五 種, 分別 為PAGE_READONLY,PAGE_READWRITE, PAGE_EXECUTE,PAGE_EXECUTE_READ 禾口
4、PAGE EXETUTE_READWRITE??梢詫⑦@些權(quán)限編號(hào)存放于文件中跟蹤線(xiàn)程將頁(yè)面大小、已使用的地址范圍、物理內(nèi)存總量,以及虛擬內(nèi)存總量等信息顯示出來(lái)。三、主要內(nèi)容1. 設(shè)計(jì)思路Windows進(jìn)程的虛擬地址空間中也有三種狀態(tài)的頁(yè)面:空閑頁(yè)面、保留頁(yè)面和提交頁(yè)面??臻e(Free)頁(yè)面:空閑頁(yè)面是指那些可以保留或提交的可用頁(yè)面。保留(Reserved)頁(yè)面:保留頁(yè)面是邏輯頁(yè)面已分配但沒(méi)有分配物理存儲(chǔ)的頁(yè)面。設(shè)置這種狀態(tài)的效果是可以保留一部分虛擬地址,這樣,如果不預(yù)先釋放 這些地址,就不能被其他應(yīng)用程序(如Malloc,LocalAlloc等)的操作所使用。試圖讀或?qū)懣臻e頁(yè)面或保留頁(yè)面將導(dǎo)致
5、頁(yè)面出錯(cuò)異常。保留頁(yè)面可被釋放或提交。提交(Committed)頁(yè)面:提交頁(yè)面是物理存儲(chǔ)(在內(nèi)存中或磁盤(pán)上)已被分配的頁(yè)面。可對(duì)它加以保護(hù),不許訪(fǎng)問(wèn)或允許只讀訪(fǎng)問(wèn),或允許讀寫(xiě)訪(fǎng)問(wèn)。提交 也可以被回收以釋放存儲(chǔ)空間,從而變成保留頁(yè)面。在本實(shí)驗(yàn)中,首先創(chuàng)建工程 makefile生成隨機(jī)輸入文件,其中包含對(duì)內(nèi)存要求作的各種操作;然后 創(chuàng)建工程MemoryAllocation,實(shí)現(xiàn)輸入文件所要求的各項(xiàng)內(nèi)存管理操作。2. 主要數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)內(nèi)存在管理的主要 API函數(shù)有:GetSystemlnfo函數(shù)功能:返回當(dāng)前系統(tǒng)信息存放入lpSystemInfo中。GlobalMemoryStatus函數(shù)功能:獲得
6、計(jì)算機(jī)系統(tǒng)中當(dāng)前使用的物理內(nèi)存和虛擬內(nèi)存的信息。使用GlobalMemoryStatus函數(shù)可以判斷應(yīng)用程序能夠分配多少與其它應(yīng)用程序不沖突的內(nèi)存空間。但GlobalMemoryStatus函數(shù)返回的信息是不穩(wěn)定的,我們不能保證兩次調(diào)用該函數(shù)都能返回到相同的信息。VirtualQuery函數(shù)功能:提供有關(guān)調(diào)用進(jìn)程虛擬窨中的頁(yè)面信息VirtualAlloc函數(shù)功能:在調(diào)用進(jìn)程的虛擬地址中保留或提交頁(yè)面。除非設(shè)置了MEM_RESET標(biāo)志,否則被這個(gè)函數(shù)分配的內(nèi)存單元被自動(dòng)初始化為0。VirtualAllocEX函數(shù)功能:使用該函數(shù)可以保留、提交或者保留和提交進(jìn)程虛擬空間的頁(yè)面的基址,否則返回NUL
7、L。VirtualFree函數(shù)功能:可以釋放或注銷(xiāo)調(diào)用進(jìn)程虛擬空間中的頁(yè)面。成功則返回一個(gè)非零值,否則返回零值。VirtualFreeEx函數(shù)功能:該函數(shù)可以釋放或注銷(xiāo)指定進(jìn)程虛擬空間中的頁(yè)面。VirtualFreeEx函數(shù)和 VirtualFree函數(shù)區(qū)別是:VirtualFree函數(shù)釋放調(diào)用進(jìn)程的地址空間,而VirtualFreeEx函數(shù)可以釋放任意指定的進(jìn)程的地址空間。如果函數(shù)調(diào)用成功則返回非零值,否則返回零值。VirtualLock功能:該函數(shù)可以將進(jìn)程虛擬空間中的內(nèi)存加鎖。以確保后面的對(duì)該區(qū)域的存取操作不會(huì)失敗。成功則 返回一個(gè)非零值,否則返回一個(gè)零值。VirtualUnlock功能
8、:該函數(shù)可以將進(jìn)程虛擬空間指定范圍內(nèi)的頁(yè)面解鎖,從以系統(tǒng)在必要時(shí)可以將這些頁(yè)面換出 到頁(yè)面文件中。函數(shù)調(diào)用成功則返回一個(gè)非零值,否則返回零值。3. 主要代碼段首先,定義兩個(gè)結(jié)構(gòu)體struct operation和struct trace,分別記錄對(duì)內(nèi)存的操作信息和跟蹤每一次分配 活動(dòng),并為之分別定義信號(hào)量allo和rac,以實(shí)現(xiàn)對(duì)內(nèi)存操作的互斥。具體實(shí)現(xiàn)用函數(shù) WaitForSingleObject (trac,INFINITE)和 ReleaseSemaphore (allo,1,NULL)來(lái)實(shí)現(xiàn)。函數(shù)DWORD Tracker (LPDWORD lpdwparm) 用以跟蹤allocato
9、r線(xiàn)程的內(nèi)存行為,并輸出必要信息。 函數(shù)void Allocator ()用以模擬內(nèi)存分配活動(dòng)的線(xiàn)程。4. 主要代碼結(jié)構(gòu)1)makefile.cpp/文件生成程序# include <fstream.h># include <stdio.h># include <stdlib.h># include <time.h>struct operationint time;/起始時(shí)間int block;/內(nèi)存頁(yè)數(shù)int oper;操作int protection; / 權(quán)限;int main ()FILE* file;file=fopen ("
10、opfile","wb"); /"opfile"為二進(jìn)制文件用以確定內(nèi)存操作 operation op;for (int j=0;j<6;j+)/0-保留,1-提交,2-鎖,3-解鎖,4-回收,5-釋放for (int i=0;i<5;i+)0-PAGE_READONLY;1-PAGE_READWRITE;2-PAGE_EXECUTE;3-PAGE_EXECUTE_READ;/4-PAGE_EXECUTE_READWRITE;op.time=rand()%1000;隨機(jī)生成等待時(shí)間op.block=rand()%5+1;隨機(jī)生成塊大
11、小op.oper=j;tection=i;fwrite (&op,sizeof(operation),1,file);/ 將生成的結(jié)構(gòu)寫(xiě)入文件return 0;2) memory_op.cpp# include <stdio.h># include <stdlib.h># include <windows.h># include <iostream.h># include <fstream.h>struct operationint time;/起始時(shí)間int block;內(nèi)存頁(yè)數(shù)int oper;操作int pr
12、otection;/ 權(quán)限;struct trace 跟蹤每一次分配活動(dòng)的數(shù)據(jù)結(jié)構(gòu)LPVOID start; / 起始地址long size;/分配的大小;HANDLE allo,trac;/ 信號(hào)量句柄DWORD Tracker (LPDWORD lpdwparm) /跟蹤allocator線(xiàn)程的內(nèi)存行為,并輸出必要信息 ofstream outfile; / 輸出文件outfile.open ("out.txt");for (int i=0;i<=30;i+)WaitForSingleObject (trac,INFINITE);等待 allocator 一次內(nèi)存
13、分配活動(dòng)結(jié)束/打印內(nèi)存狀況和系統(tǒng)狀況outfilevvivvendl;/以下一段顯示系統(tǒng)信息,每次執(zhí)行操作后系統(tǒng)信息不變SYSTEM_INFO info; / 系統(tǒng)消息GetSystemInfo (&i nfo); outfilevv"dwActiveProcessorMask"vv"t"vvinfo.dwActiveProcessorMaskvvendl;outfilevv"dwAllocationGranularity"vv"t"vvinfo.dwAllocationGranularityvvendl;
14、 outfilevv"dwNumberOfProcessors"vv"t"vvinfo.dwNumberOfProcessorsvvendl;outfilevv"dwOemld"vv"t"vvinfo.dwOemldvvendl; outfilevv"dwPageSize"vv"t"vvinfo.dwPageSizevvendl;outfilevv"dwProcessorType"vv"t"vvinfo.dwProcessorTypev
15、vendl; outfilevv"lpMaximumApplicationAddress"vv"t"vvinfo .l pMaximumApplicationAddressvvendl; outfilevv"lpMinimumapplicationAddress"vv"t"vvinfo .l pMinimumApplicationAddressvvendl; outfilevv"wProcessorArchitecture"vv"t"vvinfo.wProcessorArch
16、itecturevvendl;outfile<v"wProcessorLevel"vv"t"vvinfo.wProcessorLevelv<endl;outfile<v"wProcessorRevision"vv"t"vvinfo.wProcessorRevisionvvendl;outfilevv"wReserved"vv"t"vvinfo.wReservedvvendl;outfilevv'l*l'vvendl;內(nèi)存狀況MEMORYSTA
17、TUS status; / 內(nèi)存狀態(tài)GlobalMemoryStatus (&status); outfilevv"dwAvailPageFile"vv"t"vvstatus.dwAvailPageFilevvendl; outfilevv"dwAvailPhys"vv"t"vvstatus.dwAvailPhysvvendl; outfilevv"dwAvailVirtual"vv"t"vvstatus.dwAvailVirtualvvendl; outfilevv
18、"dwLength"vv"t"vvstatus.dwLengthvvendl; outfilevv"dwMemoryLoad"vv"t"vvstatus.dwMemoryLoadvvendl; outfilevv"dwTotalPageFile"vv"t"vvstatus.dwTotalPageFilevvendl; outfilevv"dwTotalPhy"vv"t"vvstatus.dwTotalPhysvvendl;outfile
19、vv"dwTotalVirtual"vv"t"vvstatus.dwTotalVirtualvvendl;outfilevv'l*l'vvendl;/以下一段顯示內(nèi)存基本信息,每次操作后內(nèi)存基本信息不變TION);MEMORY_BASIC_INFORMA TION mem; / 內(nèi)存基本信息VirtualQuery (info.lpMinimumApplicationAddress,&mem,sizeof(MEMORY_BASIC_INFORMA outfilevv"AllocationBase"vv"
20、;t"vvmem.AllocationBasevvendl;outfilevv"AllocationProtect"vv"t"vvmem.AllocationProtectvvendl;outfilevv"BaseAddress"vv"t"vvmem.BaseAddressvvendl; outfilevv"Protect"vv"t"vvmem.Protectvvendl;outfilevv"RegionSize"vv"t"v
21、vmem.RegionSizevvendl; outfilevv"State"vv"t"vvmem.Statevvendl;outfilevv"Type"vv"t"vvmem.Typevvendl;outfilevv'l*l'vvendl;/釋放信號(hào)量通知allocator可以執(zhí)行下一次內(nèi)存分配活動(dòng)ReleaseSemaphore (allo,1,NULL);return 0;void Allocator () /模擬內(nèi)存分配活動(dòng)的線(xiàn)程trace traceArray5;int index=0;FI
22、LE* file;file=fopen ("opfile","rb");operation op;SYSTEM_INFO info;DWORD temp;GetSystemlnfo (&in fo);for (int i=0;i<30;i+)WaitForSingleObject (allo,INFINITE); / 等待 tracker 打印結(jié)束的信號(hào)量 coutvvivv":"fread (&op,sizeof(operation),1,file);Sleep (op.time); /執(zhí)行時(shí)間,如果想在指定的
23、時(shí)間可以取消注釋GetSystemInfo (&in fo);switch (tection) /根據(jù)文件內(nèi)容確定權(quán)限case 0:index=0;temp=PAGE_READONLY;break;case 1:temp=PAGE_READWRITE;break;case 2:temp=PAGE_EXECUTE;break;case 3:temp=PAGE_EXECUTE_READ;break;case 4:temp=PAGE_EXECUTE_READWRITE;break;default:temp=PAGE_READONLY;switch (op.oper)case 0:
24、 /保留一個(gè)區(qū)域cout<<"reserve now "<<endl;traceArrayindex.start=VirtualAlloc (NULL,op.block*info.dwPageSize, MEM_RESERVE,PAGE_NOACCESS);traceArrayindex+.size=op.block*info.dwPageSize;cout<v"starting address:"vvtraceArrayindex-1.startvv"t"vv"size:"vvtra
25、ceArrayindex-1.size<vendl;break;case 1: /提交一個(gè)區(qū)域cout<<"commit now "<<endl;traceArrayindex.start=VirtualAlloc (traceArrayindex.start, traceArrayindex.size,MEM_COMMIT,temp);index+;cout<<"starting address:"v<traceArrayindex-1.startvv"t"vv"size:&
26、quot; v<traceArrayindex-1.size<vendl;break;case 2: /鎖住一個(gè)區(qū)域coutvv"lock now"vvendl;coutvv"starting address:"vvtraceArrayindex.startvv"size:"vv traceArrayindex.sizevvendl;if (!VirtualLock (traceArrayindex.start,traceArrayindex+.size) coutvvGetLastError ()vvendl;/ 函數(shù)返
27、回錯(cuò)誤號(hào)break;case 3: /解鎖一個(gè)區(qū)域coutvv"unlock now"vvendl;coutvv"starting address:"vvtraceArrayindex.startvv"t"vv"size:" vvtraceArrayindex.sizevvendl;if (!VirtualUnlock (traceArrayindex.start,traceArrayindex+.size) coutvvGetLastError ()vvendl;break;case 4: /回收一個(gè)區(qū)域coutvv"decommit now"vvendl;coutvv"starting address:"vvtraceArrayindex.startvv"t" vv"size:"vvtraceArrayindex.sizevvendl;if
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息通信信息化系統(tǒng)管理員安全教育水平考核試卷含答案
- 鋼水罐準(zhǔn)備工班組考核強(qiáng)化考核試卷含答案
- 數(shù)碼沖印師安全操作能力考核試卷含答案
- 氣體分離工操作管理考核試卷含答案
- 海上平臺(tái)電氣培訓(xùn)
- 酒店客房預(yù)訂操作規(guī)范及風(fēng)險(xiǎn)控制制度
- 酒店餐飲服務(wù)規(guī)范制度
- 車(chē)站客運(yùn)服務(wù)安全操作規(guī)程制度
- 綠色建筑構(gòu)件裝備制造項(xiàng)目可行性研究報(bào)告模板-備案審批
- 水基型滅火器生產(chǎn)線(xiàn)項(xiàng)目環(huán)境影響報(bào)告表
- 2026年標(biāo)準(zhǔn)版離婚協(xié)議書(shū)(有財(cái)產(chǎn))
- 養(yǎng)老院電氣火災(zāi)培訓(xùn)課件
- 中國(guó)工商銀行2025年度春季校園招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 對(duì)外話(huà)語(yǔ)體系構(gòu)建的敘事話(huà)語(yǔ)建構(gòu)課題申報(bào)書(shū)
- 中國(guó)家庭財(cái)富與消費(fèi)報(bào)告2025年第三季度
- 馬年猜猜樂(lè)(馬的成語(yǔ))打印版
- 精神障礙防治責(zé)任承諾書(shū)(3篇)
- 2025年擔(dān)保公司考試題庫(kù)(含答案)
- 合肥新鑫人力資源服務(wù)有限公司介紹企業(yè)發(fā)展分析報(bào)告
- 2025年金融控股公司行業(yè)分析報(bào)告及未來(lái)發(fā)展趨勢(shì)預(yù)測(cè)
- 質(zhì)量控制計(jì)劃模板全行業(yè)適用
評(píng)論
0/150
提交評(píng)論