操作系統(tǒng)課程設計內存管理_第1頁
操作系統(tǒng)課程設計內存管理_第2頁
操作系統(tǒng)課程設計內存管理_第3頁
操作系統(tǒng)課程設計內存管理_第4頁
操作系統(tǒng)課程設計內存管理_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

內存管理模擬實驗目標:本實驗的目的是從不同側面了解Windows2000/XP對用戶進程的虛擬內存空間的管理、分配方法。同時需要了解跟蹤程序的編寫方法(與被跟蹤程序保持同步,使用Windows提供的信號量)。對Windows分配虛擬內存、改變內存狀態(tài),以及對物理內存(physicalmemory)和頁面文件(pagefile)狀態(tài)查詢的API函數(shù)的功能、參數(shù)限制、使用規(guī)則要進一步了解。默認情況下,32位Windows2000/XP上每個用戶進程可以占有2GB的私有地址空間,操作系統(tǒng)占有剩下的2GBoWindows2000/XP在X86體系結構上利用二級頁表結構來實現(xiàn)虛擬地址向物理地址的變換。一個32位虛擬地址被解釋為三個獨立的分量一一頁目錄索引、頁表索引和字節(jié)索引一一它們用于找出描述頁面映射結構的索引。頁面大小及頁表項的寬度決定了頁目錄和頁表索引的寬度。實驗要求:使用Windows2000/XP的API函數(shù),編寫一個包含兩個線程的進程,一個線程用于模擬內存分配活動,一個線程用于跟蹤第一個線程的內存行為,而且要求兩個線程之間通過信號量實現(xiàn)同步。模擬內存活動的線程可以從一個文件中讀出要進行的內存操作,每個內存操作包括如下內容:時間:操作等待時間。塊數(shù):分配內存的粒度。操作:包括保留(reserve)一個區(qū)域、提交(commit)一個區(qū)域、釋放(release)一個區(qū)域、回收(decommit)一個區(qū)域和加鎖(lock)與解鎖(unlock)一個區(qū)域,可以將這些操作編號存放于文件。保留是指保留進程的虛擬地址空間,而不分配物理存儲空間。提交在內存中分配物理存儲空間。回收是指釋放物理內存空間,但在虛擬地址空間仍然保留,它與提交相對應,即可以回收已經提交的內存塊。釋放是指將物理存儲和虛擬地址空間全部釋放,它與保留(reserve)相對應,即可以釋放已經保留的內存塊。大?。簤K的大小。訪問權限:共五種,分別為PAGE_READONLYPAGE_READWRITE,PAGE_EXECUTE,PAGE_EXECUTE_READ和PAGEEXETUTE_READWRITE??梢詫⑦@些權限編號存放于文件中跟蹤線程將頁面大小、已使用的地址范圍、物理內存總量,以及虛擬內存總量等信息顯示出來。三、主要內容設計思路Windows進程的虛擬地址空間中也有三種狀態(tài)的頁面:空閑頁面、保留頁面和提交頁面。空閑(Free)頁面:空閑頁面是指那些可以保留或提交的可用頁面。保留(Reserved)頁面:保留頁面是邏輯頁面巳分配但沒有分配物理存儲的頁面。設置這種狀態(tài)的效果是可以保留一部分虛擬地址,這樣,如果不預先釋放這些地址,就不能被其他應用程序(如Malloc,LocalAlloc等)的操作所使用。試圖讀或寫空閑頁面或保留頁面將導致頁面出錯異常。保留頁面可被釋放或提交。提交(Committed)頁面:提交頁面是物理存儲(在內存中或磁盤上)巳被分配的頁面。可對它加以保護,不許訪問或允許只讀訪問,或允許讀寫訪問。提交也可以被回收以釋放存儲空間,從而變成保留頁面。在本實驗中,首先創(chuàng)建工程makefile生成隨機輸入文件,其中包含對內存要求作的各種操作;然后創(chuàng)建工程MemoryAllocation,實現(xiàn)輸入文件所要求的各項內存管理操作。主要數(shù)據(jù)結構實現(xiàn)內存在管理的主要API函數(shù)有:GetSystemInfo函數(shù)功能:返回當前系統(tǒng)信息,存放入lpSystemInfo中。GlobalMemoryStatus函數(shù)功能:獲得計算機系統(tǒng)中當前使用的物理內存和虛擬內存的信息。使用GlobalMemoryStatus函數(shù)可以判斷應用程序能夠分配多少與其它應用程序不沖突的內存空間。但GlobalMemoryStatus函數(shù)返回的信息是不穩(wěn)定的,我們不能保證兩次調用該函數(shù)都能返回到相同的信息。VirtualQuery函數(shù)功能:提供有關調用進程虛擬窨中的頁面信息.VirtualAlloc函數(shù)功能:在調用進程的虛擬地址中保留或提交頁面。除非設置了MEM_RESET標志,否則被這個函數(shù)分配的內存單元被自動初始化為0。VirtualAllocEX函數(shù)功能:使用該函數(shù)可以保留、提交或者保留和提交進程虛擬空間的頁面的基址,否則返回NULL。VirtualFree函數(shù)功能:可以釋放或注銷調用進程虛擬空間中的頁面。成功則返回一個非零值,否則返回零值。VirtualFreeEx函數(shù)功能:該函數(shù)可以釋放或注銷指定進程虛擬空間中的頁面。VirtualFreeEx函數(shù)和VirtualFree函數(shù)區(qū)別是:VirtualFree函數(shù)釋放調用進程的地址空間,而VirtualFreeEx函數(shù)可以釋放任意指定的進程的地址空間。如果函數(shù)調用成功則返回非零值,否則返回零值。VirtualLock功能:該函數(shù)可以將進程虛擬空間中的內存加鎖。以確保后面的對該區(qū)域的存取操作不會失敗。成功則返回一個非零值,否則返回一個零值。VirtualUnlock功能:該函數(shù)可以將進程虛擬空間指定范圍內的頁面解鎖,從以系統(tǒng)在必要時可以將這些頁面換出到頁面文件中。函數(shù)調用成功則返回一個非零值,否則返回零值。主要代碼段首先,定義兩個結構體structoperation和structtrace,分別記錄對內存的操作信息和跟蹤每一次分配活動,并為之分別定義信號量allo和rac,以實現(xiàn)對內存操作的互斥。具體實現(xiàn)用函數(shù)WaitForSingleObject(trac,INFINITE)和ReleaseSemaphore(allo,1,NULL)來實現(xiàn)。函數(shù)DWORDTracker(LPDWORDlpdwparm)用以跟蹤allocator線程的內存行為,并輸出必要信息。函數(shù)voidAllocator()用以模擬內存分配活動的線程。主要代碼結構1)makefile.cpp〃文件生成程序include<fstream.h>include<stdio.h>include<stdlib.h>include<time.h>structoperation{inttime;〃起始時間intblock;〃內存頁數(shù)intoper;〃操作intprotection;〃權限};intmain(){FILE*file;file=fopen("opfile”,"wb”);//"opfile”為二進制文件用以確定內存操作operationop;for(intj=0;j<6;j++)//0--保留,1--提交,2--鎖,3--解鎖,4--回收,5--釋放for(inti=0;i<5;i++)//0_READONLY;//1_READWRITE;//2_EXECUTE;//3_EXECUTE_READ;//4_EXECUTE_READWRITE;{op.time=rand()%1000;〃隨機生成等待時間op.block=rand()%5+1;〃隨機生成塊大小op.oper=j;tection=i;fwrite(&op,sizeof(operation),1,file);〃將生成的結構寫入文件}return0;}2)memory_op.cpp〃從文件讀入每次的操作,并將結果輸出到。ut.txt文件中include<stdio.h>include<stdlib.h>include<windows.h>include<iostream.h>include<fstream.h>structoperation{inttime;〃起始時間intblock;〃內存頁數(shù)intoper;〃操作intprotection;〃權限};structtrace〃跟蹤每一次分配活動的數(shù)據(jù)結構{LPVOIDstart;〃起始地址longsize;〃分配的大小};HANDLEallo,trac;〃信號量句柄DWORDTracker(LPDWORDlpdwparm)//跟蹤allocator線程的內存行為,并輸出必要信息(ofstreamoutfile;〃輸出文件outfile.open("out.txt");for(inti=0;i<=30;i++)(WaitForSingleObject(trac,INFINITE);〃等待allocator一次內存分配活動結束〃打印內存狀況和系統(tǒng)狀況outfile<<i<<endl;〃以下一段顯示系統(tǒng)信息,每次執(zhí)行操作后系統(tǒng)信息不變SYSTEM_INFOinfo;〃系統(tǒng)消息GetSystemInfo(&info);outfile<<"dwActiveProcessorMask"<<"\t"<<info.dwActiveProcessorMask<<endl;outfile<<"dwAllocationGranularity"<<"\t"<<info.dwAllocationGranularity<<endl;outfile<<"dwNumberOfProcessors"<<"\t"<<info.dwNumberOfProcessors<<endl;outfile<<"dwOemId"<<"\t"<<info.dwOemId<<endl;outfile<<"dwPageSize"<<"\t"<<info.dwPageSize<<endl;outfile<<"dwProcessorType"<<"\t"<<info.dwProcessorType<<endl;outfile<<"lpMaximumApplicationAddress"<<"\t"<<info.lpMaximumApplicationAddress<<endl;outfile<<"lpMinimumapplicationAddress"<<"\t"<<info.lpMinimumApplicationAddress<<endl;outfile<<"wProcessorArchitecture"<<"\t"<<info.wProcessorArchitecture<<endl;outfile<<"wProcessorLevel"<<"\t"<<info.wProcessorLevel<<endl;outfile<<"wProcessorRevision"<<"\t"<<info.wProcessorRevision<<endl;outfile<<"wReserved"<<"\t"<<info.wReserved<<endl;outfile<<"************************************************************"<<endl;〃內存狀況MEMORYSTATUSstatus;/內存狀態(tài)GlobalMemoryStatus(&status);outfile<<"dwAvailPageFile"<<"\t"<<status.dwAvailPageFile<<endl;outfile<<"dwAvailPhys"<<"\t"<<status.dwAvailPhys<<endl;outfile<<"dwAvailVirtual"<<"\t"<<status.dwAvailVirtual<<endl;outfile<<"dwLength"<<"\t"<<status.dwLength<<endl;outfile<<"dwMemoryLoad"<<"\t"<<status.dwMemoryLoad<<endl;outfile<<"dwTotalPageFile"<<"\t"<<status.dwTotalPageFile<<endl;outfile<<"dwTotalPhy"<<"\t"<<status.dwTotalPhys<<endl;outfile<<"dwTotalVirtual"<<"\t"<<status.dwTotalVirtual<<endl;outfile<<"**************************************************"<<endl;〃以下一段顯示內存基本信息,每次操作后內存基本信息不變MEMORY_BASIC_INFORMATIONmem;//內存基本信息VirtualQuery(info.lpMinimumApplicationAddress,&mem,sizeof(MEMORY_BASIC_INFORMATION));outfile<<"AllocationBase"<<"\t"<<mem.AllocationBase<<endl;outfile<<"AllocationProtect"<<"\t"<<mem.AllocationProtect<<endl;outfile<<"BaseAddress"<<"\t"<<mem.BaseAddress<<endl;outfile<<"Protect"<<"\t"<<mem.Protect<<endl;outfile<<"RegionSize"<<"\t"<<mem.RegionSize<<endl;outfile<<"State"<<"\t"<<mem.State<<endl;outfile<<"Type"<<"\t"<<mem.Type<<endl;outfile<<"*********************************************************"<<endl;〃釋放信號量通知allocator可以執(zhí)行下一次內存分配活動ReleaseSemaphore(allo,1,NULL);}return0;}voidAllocator()//模擬內存分配活動的線程{tracetraceArray[5];intindex=0;FILE*file;file=fopen("opfile”,"rb”);operationop;SYSTEM_INFOinfo;DWORDtemp;GetSystemInfo(&info);for(inti=0;i<30;i++){WaitForSingleObject(allo,INFINITE);〃等待tracker打印結束的信號量cout<<i<<”:";fread(&op,sizeof(operation),1,file);Sleep(op.time);//執(zhí)行時間,如果想在指定的時間可以取消注釋GetSystemInfo(&info);switch(tection)〃根據(jù)文件內容確定權限{case0:{index=0;temp=PAGE_READONLY;break;}case1:temp=PAGE_READWRITE;break;case2:temp=PAGE_EXECUTE;break;case3:temp=PAGE_EXECUTE_READ;break;case4:temp=PAGE_EXECUTE_READWRITE;break;default:temp=PAGE_READONLY;}switch(op.oper){case0:〃保留一個區(qū)域{cout<<"reservenow"<<endl;traceArray[index].start=VirtualAlloc(NULL,op.block*info.dwPageSize,MEM_RESERVE,PAGE_NOACCESS);traceArray[index++].size=op.block*info.dwPageSize;cout<<"startingaddress:"<<traceArray[index-1].start<<"\t"<<"size:"<<traceArray[index-1].size<<endl;break;}case1:〃提交一個區(qū)域{cout<<"commitnow"<<endl;traceArray[index].start=VirtualAlloc(traceArray[index].start,traceArray[index].size,MEM_COMMIT,temp);index++;cout<<"startingaddress:"<<traceArray[index-1].start<<"\t"<<"size:"<<traceArray[index-1].size<<endl;break;}case2:〃鎖住一個區(qū)域{cout<<"locknow"<<endl;cout<<"startingaddress:"<<traceArray[index].start<<"size:"<<traceArray[index].size<<endl;if(!VirtualLock(traceArray[index].start,traceArray[index++].size))cout<<GetLastError()<<endl;〃函數(shù)返回錯誤號break;}case3:〃解鎖一個區(qū)域{cout<<"unlocknow"<<endl;cout<<"startingaddress:"<<traceArray[index].start<<"\t"<<"size:"<<traceArray[index].size<<endl;if(!VirtualUnlock(traceArray[index].start,traceArray[index++].size))cout<<GetLastError()<<endl;break;}case4:〃回收一個區(qū)域{cout<<"decommitnow"<<endl;cout<<"startingaddress:"<<traceArray[index].start<<"\t”<<"size:"<<traceArray[index].size<<endl;if(!VirtualFree

溫馨提示

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

評論

0/150

提交評論