計算機(jī)操作系統(tǒng)_第1頁
計算機(jī)操作系統(tǒng)_第2頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機(jī)操作系統(tǒng)(課程設(shè)計)年級專業(yè)05級計算機(jī)2班學(xué)生姓名XXX學(xué)號時間:2008-5-231課程設(shè)計意義32課程設(shè)計內(nèi)容33課程設(shè)計目的34設(shè)計詳細(xì)要求45課程設(shè)計說明46課程設(shè)計源代碼107運(yùn)行結(jié)果及分析198設(shè)計總結(jié)和體會20209參考文獻(xiàn)一 課程設(shè)計的意義:通過模擬操作系統(tǒng)的實現(xiàn),加深對操作系統(tǒng)工作原理理解,提高綜合運(yùn)用所學(xué)知識的能力;進(jìn)一步了解操作系統(tǒng)的實現(xiàn)方法;培養(yǎng)我們自主查閱參考資料的習(xí)慣,增強(qiáng)獨立思考和解決問題的能力;并可練習(xí)提高自己程序設(shè)計能力并可通過課程設(shè)計,培養(yǎng)嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度。通過本課程設(shè)計,使學(xué)生對操作系統(tǒng)的核心概念和算法有一個透徹的理解,并對系統(tǒng)運(yùn)行的機(jī)制有一個全面的

2、掌握,從而充分理解系統(tǒng)調(diào)用與程序設(shè)計之間的關(guān)系。二 課程設(shè)計內(nèi)容:1. 課程設(shè)計題目:模擬內(nèi)存管理2. 內(nèi)容要求:自定義內(nèi)存管理策略對應(yīng)的數(shù)據(jù)結(jié)構(gòu);隨機(jī)產(chǎn)生一組申請和收回進(jìn)程及要求分配和收回內(nèi)存的大小,實現(xiàn)內(nèi)存分配和收回算法(可以采用多種分配算法),計算內(nèi)存利用率;顯示內(nèi)存分區(qū)管理的分配和收回過程。三 課程設(shè)計目的1. 從不同側(cè)面了解WindowsXP對用戶進(jìn)程的虛擬內(nèi)存空間的管理、分配方法。2. 了解跟蹤程序的編寫方法(與被跟蹤程序保持同步,使用Windows提供的信號量)。對Windows分配虛擬內(nèi)存、改變內(nèi)存狀態(tài),以及對物理內(nèi)存(physicalmemory)和頁面文件(pagefile

3、)狀態(tài)查詢的API函數(shù)的功能、參數(shù)限制、使用規(guī)則要進(jìn)一步了解。3. 默認(rèn)情況下,32位WindowsXP上每個用戶進(jìn)程可以占有2GB的私有地址空間,操作系統(tǒng)占有剩下的2GB。WindowsXP在X86體系結(jié)構(gòu)上利用二級頁表結(jié)構(gòu)來實現(xiàn)虛擬地址向物理地址的變換。一個32位的虛擬地址被解釋為三個獨立的分量頁目錄索引,頁表索引和字節(jié)索引它們用于找出描述頁面映射結(jié)構(gòu)的索引。頁面大小及頁表項的寬度決定了頁目錄和頁表索引的寬度。4. Windows進(jìn)程的虛擬地址空間中也有三種狀態(tài)的頁面:空閑頁面、保留頁面和提交頁面。(1)空閑(Free)頁面:空閑頁面是指那些可以保留或提交的可用頁面。(2)保留(Reser

4、ved頁面:保留頁面是邏輯頁面已分配但沒有分配物理存儲的頁面。設(shè)置這種狀態(tài)的效果是可以保留一部分虛擬地址,這樣,如果不預(yù)先釋放這些地址,就不能被其他應(yīng)用程序(如Malloc,LocalAlloc等)的操作所使用。試圖讀或?qū)懣臻e頁面或保留頁面將導(dǎo)致頁面出錯異常。保留頁面可被釋放后提(3)提交(Committed)頁面:提交頁面是物理存儲(在內(nèi)存中或磁盤上)已被分配的頁面??蓪λ右员Wo(hù),不許訪問或允許只讀訪問,或允許讀寫訪問。提交也可以被回收以釋放存儲空間,從而變成保留頁面。四 設(shè)計詳細(xì)要求使用windows2000/XP的API函數(shù),編寫一個包含兩個線程的進(jìn)程,一個線程用于模擬內(nèi)存分配活動,一

5、個線程用于跟蹤第一個線程的內(nèi)存行為,而且要求兩個線程之間通過信號量實現(xiàn)同步。模擬內(nèi)存活動的線程可以從一個文件中讀出要進(jìn)行的內(nèi)存操作,每個內(nèi)存操作包括以下內(nèi)容:時間:操作等待時間。塊數(shù):分配內(nèi)存的粒度。操作:包括保留(reserve)一個區(qū)域,提交(commit)一個區(qū)域,釋放(release一個區(qū)域,回收(decommit)一個區(qū)域和加鎖(lock)與解鎖(unlock)一個區(qū)域,可以將這些操作編號存放于文件。保留時之保留進(jìn)程的虛擬地址空間,而不分配物理存儲空間。提交在內(nèi)存中分配物理存儲空間。回收是指釋放物理內(nèi)存空間,但在虛擬地址空間仍然保留,它與提交相對應(yīng),即可以回收已經(jīng)提交的內(nèi)存塊。釋放是

6、指將物理存儲和虛擬地址空間全部釋放,它與保留相對應(yīng),即可以釋放已經(jīng)保留的內(nèi)存塊。大?。簤K的大小。訪問權(quán)限:共五種。分別為PAGE_READONLY,PAGE_READWRITE,PAGE_EXECUTE,AGE_EXECUTE_READ和PAGE_EXETUTE_READWRITE??梢詫⑦@些權(quán)限編號存放于文件中跟蹤線程將頁面大小、已使用的地址范圍、物理內(nèi)存總量,以及虛擬內(nèi)存總量等信息顯示出來。五 課程設(shè)計說明5-1模塊組成:本程序主要由文件建立和文件寫入模塊一makefile和內(nèi)存操作模塊-memory-op兩大模塊組成。5-2模塊的主要功能及結(jié)構(gòu):(1)文件建立和文件寫入模塊makefil

7、e模塊的主要功能及結(jié)構(gòu)如下:作用:本程序主要實現(xiàn)將操作寫入文件結(jié)構(gòu):本程序采用了C語言的fwrite函數(shù)直接以結(jié)構(gòu)(struct)為單位寫入文件。用了兩層循環(huán),外層循環(huán)控制對內(nèi)存的操作(保留、提交、鎖、解鎖、回收、釋放),內(nèi)層循環(huán)控制對內(nèi)存操作的權(quán)限(PAGE_READON、LYPAGE_READWR、ITEPAGE_EXECUTEPAGE_EXECUTE_READAGE_EXECUTE_READW用隨機(jī)數(shù)生成等待執(zhí)行的時間和分配的粒度。內(nèi)存操作模塊memory-op模塊的主要功能及結(jié)構(gòu)如下:2.2.1主函數(shù)a、創(chuàng)建兩個線程,并將返回的句柄存入數(shù)據(jù)中。b、創(chuàng)建兩個信號量(allo,trac)分

8、別用語通知跟蹤線程和記錄線程。c、用函數(shù)WaitForMultipleObjects來等待兩個線程的結(jié)束。2.2.2Tracker線程(記錄內(nèi)存的狀況)a、打開文件,準(zhǔn)備輸出。b、等待現(xiàn)成Allocator的一次內(nèi)存操作完畢(即等待信號量trac的釋放)。c、用函數(shù)GetSystemInfo得到系統(tǒng)信息(該信息不隨內(nèi)存分配的變化而變化)。d、用函數(shù)GlobalMemorySatus得到內(nèi)存信息(隨內(nèi)存的分配各項信息會有所變化)。用函數(shù)VirtualQuery得到虛擬內(nèi)存基本信息(該信息不隨內(nèi)存分配的變化而變化)。e、釋放信號量,通知Allocator線程可以進(jìn)行下一次內(nèi)存分配活動。2.2.3A

9、llocator線程(模擬內(nèi)存分配活動)a、打開文件(的輸出結(jié)果),準(zhǔn)備讀入。b、等待Tracker輸出的結(jié)束(即等待信號量allo的釋放)。c、讀文件(的輸出結(jié)果)。d、根據(jù)文件內(nèi)容(protection)確定對內(nèi)存操作時的權(quán)限。e、根據(jù)文件內(nèi)容(oper)確定對內(nèi)存的具體操作。f、釋放信號量(trac)通知線程可以進(jìn)行一次輸出。g、如果文件中所有的分配信息已經(jīng)完成,線程退出,否則轉(zhuǎn)到bo5-3程序流程圖及分析:makefile函數(shù):先創(chuàng)建一個文件“opfile”,用以確定內(nèi)存操作信息,隨后用兩層循環(huán)實現(xiàn)對文件寫入內(nèi)存操作的具體信息和結(jié)構(gòu)。memory_op函數(shù):主函數(shù)main主要是生成兩個

10、線程和兩個信號量,最后用函數(shù)WaitForMultipleObjects來等待兩個線程的結(jié)束,退出程序。用信號量trac個allo實現(xiàn)線程Tracker和Allocator的同步。Tracker線程主要用于跟蹤內(nèi)存分配情況并打印信息到文檔中,所以Tracker中首先要創(chuàng)建一個輸出文件,然后輸出系統(tǒng)消息、內(nèi)存狀態(tài)等。Allocator線程用于內(nèi)存分配及操作等。首先要從opfile文件中逐個讀取信息,其次根據(jù)內(nèi)容確定操作權(quán)限,用switch語句實現(xiàn):0代表只讀,1代表可讀寫,2代表可執(zhí)行,3代表可執(zhí)行可讀,4代表可執(zhí)行可讀寫。然后確定內(nèi)存具體操作,用switch實現(xiàn):0代表保留一個區(qū)域,用函數(shù)Vi

11、rutalAlloc實現(xiàn);1代表提交一個區(qū)域,用函數(shù)VirtualAlloc實現(xiàn);2代表鎖一個區(qū)域,用函數(shù)VirtualLock實現(xiàn);3代表解鎖一個區(qū)域,用函數(shù)VirtualUnlock實現(xiàn);4代表回收一個區(qū)域,用函數(shù)VirtualFree實現(xiàn);5代表釋放一個區(qū)域,用函數(shù)VirtualFree實現(xiàn)。makefile函數(shù)和memory_op主函數(shù):memory_op:接下頁:makefile函數(shù):makefile函數(shù):開始YTtracker函數(shù):如下頁:tracker函數(shù):allocator函數(shù):如下頁allocator函數(shù):六 課程設(shè)計主要源代碼1makefile函數(shù)程序的代碼及注釋如下:程序

12、體:#include<fstream.h>#include<stdio.h>#include<stdlib.h>#include<time.h>structoperationinttime;/起始時間intblock;/內(nèi)存頁數(shù)intoper;/操作intprotection;/權(quán)限;intmain()FILE*file;file=fopen("opfile","wb");/"opfile"為二進(jìn)制用以確定內(nèi)存操作operationop;for(intj=0;j<6;j+)/0-保

13、留;1-提交;2-鎖;3-解鎖;4-回收;5-釋放for(inti=0;i<5;i+)op.time=rand()%1000;/隨機(jī)生成等待時間op.block=rand()%5+1;/隨機(jī)生成塊大小op.oper=j;tection=i;fwrite(&op,sizeof(operation),1,file);/將生成的結(jié)構(gòu)寫入文件return0;2memeroy_op函數(shù)程序的代碼及注釋如下:#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<ios

14、tream.h>#include<fstream.h>structoperationinttime;/起始時間intblock;/內(nèi)存頁數(shù)intoper;/操作intprotection;/權(quán)限;structtrace/跟蹤每一次分配活動的數(shù)據(jù)結(jié)構(gòu)LPVOIDstart;/起始地址longsize;/分配的大小;HANDLEallo,trac;/信號量句柄DWORDTracker(LPDWORDlpdwparm)ofstreamoutfile;/輸出文件("");for(inti=0;i<=30;i+)WaitForSingleObject(trac

15、,INFINITE);等待allocator一次內(nèi)存分配活動結(jié)束/打印所有內(nèi)存狀況和系統(tǒng)狀況outfile<<i<<endl;/以下一段顯示系統(tǒng)消息,每次執(zhí)行操作后系統(tǒng)消息不變/如果要才查看系統(tǒng)消息,可以取消注釋/*SYSTEM_INFOinfo;/系統(tǒng)消息GetSystemInfo(&info);outfile<<"dwActiveProcessorMask"<<'t'<<iveProcessorMask<<endl;outfile<<"dwAllocat

16、ionGranularity"<<'t'<<info.dwAllocationGranularity<<endl;outfile<<"dwNumberOfProcessors"<<'t'<<info.dwNumberOfProcessors<<endl;outfile<<"dwOemId"<<'t'<<Id<<endl;outfile<<"dwP

17、ageSize"<<'t'<<eSize<<endl;outfile<<"dwProcessorType"<<'t'<<cessorType<<endl;outfile<<"lpMaximumApplicationAddress"<<'t'<<info.lpMaximumApplicationAddress<<endl;outfile<<"lpM

18、inimumApplicationAddress"<<'t'<<info.lpMinimumApplicationAddress<<endl;outfile<<"wProcessorArchitecture"<<'t'<<essorArchitecture<<endl;outfile<<"wProcessorLevel"<<'t'<<essorLevel<<endl;

19、outfile<<"wProcessorRevision"<<'t'<<essorRevision<<endl;outfile<<"wReserved:"<<'t'<<rved<<endl;outfile<<"*"<<endl;*/內(nèi)存狀況MEMORYSTATUSstatus;/內(nèi)存狀態(tài)GlobalMemoryStatus(&status);outfile<<&qu

20、ot;dwAvailPageFile"<<'t'<<ilPageFile<<endl;outfile<<"dwAvailPhys"<<'t'<<ilPhys<<endl;outfile<<"dwAvailVirtual"<<'t'<<ilVirtual<<endl;outfile<<"dwLength"<<'t

21、9;<<gth<<endl;outfile<<"dwMemoryLoad"<<'t'<<oryLoad<<endl;outfile<<"dwTotalPageFile"<<'t'<<alPageFile<<endl;outfile<<"dwTotalPhy"<<'t'<<alPhys<<endl;outfile<&l

22、t;"dwTotalVirtual"<<'t'<<alVirtual<<endl;outfile<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&a

23、mp;&&&&&&&&&&&&&&&"<<endl;/以下一段顯示內(nèi)存基本信息,每次操作內(nèi)存基本信息不變/如果要查看內(nèi)存基本信息,可以取消注釋/*MEMORY_BASIC_INFORMATIONmen;VirtualQuery(imumApplicationAddress,&men,sizeof(MEMORY_BASIC_INFORMATION);outfile<<"AllocationBase"<<&

24、#39;t'<<ationBase<<endl;outfile<<"AllocationProtect"<<'t'<<ationProtect<<endl;outfile<<"BaseAddress"<<'t'<<ddress<<endl;outfile<<"Protect"<<'t'<<ct<<endl;outf

25、ile<<"RegionSize"<<'t'<<nSize<<endl;outfile<<"State"<<'t'<<<<endl;outfile<<"Type"<<'t'<<<<endl;outfile<<""<<endl;*/釋放信號量通知allocator可以進(jìn)行下一次內(nèi)存分配活動ReleaseS

26、emaphore(allo,1,NULL);return(0);voidAllocator()/模擬內(nèi)存分配活動的線程tracetraceArray5;intindex=0;FILE*file;file=fopen("opfile","rb");/讀入文件operationop;SYSTEM_INFOinfo;DWORDtemp;GetSystemInfo(&info);for(inti=0;i<30;i+)WaitForSingleObject(allo,INFINITE);/等待tracker打印結(jié)束的信號cout<<i&l

27、t;<":"fread(&op,sizeof(operation),1,file);消注釋Sleep(op.time);/執(zhí)行時間,如果想在指定時間執(zhí)行可以取GetSystemInfo(&info);switch(tection)/根據(jù)文件內(nèi)容確定權(quán)限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=

28、PAGE_EXECUTE_READWRITE;break;default:temp=PAGE_READONLY;switch(op.oper)case0:/保留一個區(qū)域cout<<"reservenow"<<endl;traceArrayindex.start=VirtualAlloc(NULL,op.block*eSize,MEM_RESERVE,PAGE_NOACCESS);traceArrayindex+.size=op.block*eSize;cout<<"startingaddress:"<<tr

29、aceArrayindex-1.start<<'/t'<<"size:"<<traceArrayindex-1.size<<endlJbreak;case1:/提交一個區(qū)域cout<<"commitnow"<<endl;traceArrayindex.start=VirtualAlloc(traceArrayindex.start,traceArrayindex.size,MEM_COMMIT,temp);index+;cout<<"starti

30、ngaddress:"<<traceArrayindex-1.start<<'/t'<<"size:"<<traceArrayindex-1.size<<endlJbreak;case2:/鎖一個區(qū)域cout<<"locknow"<<endl;cout<<"startingaddress:"<<traceArrayindex.start<<'t'<<"s

31、ize:"<<traceArrayindex.size<<endl;if(!VirtualLock(traceArrayindex.start,traceArrayindex+.size)cout<<GetLastError()vvendl;/GetLastError()函數(shù)返回錯誤號break;case3:/解鎖一個區(qū)域cout<<"unlocknow"<<endl;cout<<"startingaddress:"<<traceArrayindex.start

32、<<'t'<<"size:"<<traceArrayindex.size<<endl;if(!VirtualUnlock(traceArrayindex.start,traceArrayindex+.size)cout<<GetLastError()<<endl;break;case4:/回收一個區(qū)域cout<<"decommitnow"<<endl;cout<<"startingaddress:"<<

33、;traceArrayindex.start<<'t'<<"size:"<<traceArrayindex.size<<endl;if(!VirtualFree(traceArrayindex.start,traceArrayindex+.size,MEM_DECOMMIT)cout<<GetLastError()<<endl;break;case5:/釋放一個區(qū)域cout<<"releasenow"<<endl;cout<<&qu

34、ot;startingaddress:"<<traceArrayindex.start<<'t'<<"size:"<<traceArrayindex.size<<endl;if(!VirtualFree(traceArrayindex+.start,0,MEM_RELEASE)cout<<GetLastError()<<endl;break;default:cout<<"error"<<endl;ReleaseSemaphore(trac,1,NULL);/釋放信號量通知tracker可以打印信息intmain()DWORDdwThread;HANDLEhandle2;/生成兩個線程handle0=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Tracker,NULL,0,&dwThread);handle1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Allocator,NULL,0,&dwThread);/生成兩個信號量allo=CreateSemap

溫馨提示

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

評論

0/150

提交評論