操作系統(tǒng)課程設(shè)計-模擬設(shè)計頁式存儲管理的分配與回收_第1頁
操作系統(tǒng)課程設(shè)計-模擬設(shè)計頁式存儲管理的分配與回收_第2頁
操作系統(tǒng)課程設(shè)計-模擬設(shè)計頁式存儲管理的分配與回收_第3頁
操作系統(tǒng)課程設(shè)計-模擬設(shè)計頁式存儲管理的分配與回收_第4頁
操作系統(tǒng)課程設(shè)計-模擬設(shè)計頁式存儲管理的分配與回收_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、武漢理工大學操作系統(tǒng)課程設(shè)計說明書學 號:0120910340228課程設(shè)計題目模擬設(shè)計頁式存儲管理的分配與回收學院計算機科學與技術(shù)專業(yè)計算機科學與技術(shù)班級XX姓名XX指導教師XXX2011 年 01月 09 日ii武漢理工大學操作系統(tǒng)課程設(shè)計說明書課程設(shè)計任務(wù)書學生姓名: XX 專業(yè)班級: 計算機0902班指導教師:XXX工作單位:計算機科學與技術(shù)學院題 目:模擬設(shè)計頁式存儲管理的分配與回收初始條件:1 .預備內(nèi)容:閱讀操作系統(tǒng)的內(nèi)存管理章節(jié)內(nèi)容,了解有關(guān)虛擬存儲器、頁式存 儲管理等概念,并體會頁式管理內(nèi)存的分配和回收過程。2 .實踐準備:掌握一種計算機高級語言的使用。要求完成的主要任務(wù):(

2、包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)1 .采用頁式管理方案實施內(nèi)存分配和回收。能夠處理以下的情形 能夠輸入給定的內(nèi)存頁面數(shù),頁面大小,進程的個數(shù)及每個進程的頁數(shù)。 要求當某進程提出申請空間的大小后,顯示能否滿足申請,以及為該進程分配資源后內(nèi)存空間的使用情況(被進程占用的頁面,空閑的頁面) 。2 .設(shè)計報告內(nèi)容應(yīng)說明:課程設(shè)計目的與功能; 需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明 (功能與框圖); 源程序的主要部分;(4)測試用例,運行結(jié)果與運行情況分析; 自我評價與總結(jié):i)你認為你完成的設(shè)計哪些地方做得比較好或比較出色;ii)什么地方做得不太好,以后如何改正;iii)從本設(shè)計得到的

3、收獲(在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗和教訓);iv)完成本題是否有其他的其他方法(如果有,簡要說明該方法);v)對實驗題的評價和改進意見,請你推薦設(shè)計題目。時間安排:設(shè)計安排一周:周1、周2:完成程序分析及設(shè)計。周2、周3:完成程序調(diào)試及測試。 周4、周5:驗收,撰寫課程設(shè)計報告。(注意事項:嚴禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)指導教師簽名:年月日系主任(或責任教師)簽名:年月日模擬設(shè)計頁式存儲管理的分配與回收1需求分析頁式管理是一種內(nèi)存空間存儲管理的技術(shù),頁式管理分為靜態(tài)頁式管理和動態(tài) 頁式管理?;驹硎菍⒏鬟M程的虛擬空間劃分成若干個長度相等的頁(page), 頁式管理把內(nèi)存空間按

4、頁的大小劃分成片或者頁面(page frame),然后把頁式 虛擬地址與內(nèi)存地址建立對應(yīng)頁表,并用相應(yīng)的硬件地址變換機構(gòu),來解決離散地址變換問題。頁式管理采用請求調(diào)頁或預調(diào)頁技術(shù)實現(xiàn)了內(nèi)外存 存儲器的 統(tǒng)一管理。1910 9頁號P頁內(nèi)地址W8圖1頁的劃分頁號頁面號圖2基本頁表小例靜態(tài)分頁管理的第一步是為要求內(nèi)存的作業(yè)或進程分配足夠的頁面。 系統(tǒng)通過存儲頁面表、請求表以及頁表來完成內(nèi)存的分配工作。 頁表指的是內(nèi)存中的一 塊固定存儲區(qū)。頁式管理時每個進程至少有一個頁表。請求表指的是用來確定作 業(yè)或進程的虛擬空間的各頁在內(nèi)存中的實際對應(yīng)位置; 另外整個系統(tǒng)有一個存儲 頁面表,其描述了物理內(nèi)存空間的分

5、配使用狀況。進程號請求頁面數(shù)曳曲始址負面長度120102420234104434318107813421 *圖3請求表的示例存儲頁面表有兩種構(gòu)成方法:1、位示圖法2、空閑頁面鏈表法模擬設(shè)計頁式存儲管理的分配與回收要求能夠滿足如下的要求:(1)輸入給定的內(nèi)存頁面數(shù),頁面大小,進程的個數(shù)及每個進程的頁數(shù)。(2)要求當某進程提出申請空間的大小后,顯示能否滿足申請,以及為該進 程分配資源后內(nèi)存空間的使用情況(被進程占用的頁面,空閑的頁面)2功能設(shè)計2.1 算法分析首先,請求表給出進程或作業(yè)要求的頁面數(shù)。然后,由存儲頁面表檢查是否 有足夠的空閑頁面,如果沒有,則本次無法分配。如果有則首先分配設(shè)置頁表,

6、并請求表中的相應(yīng)表項后,按一定的查找算法搜索出所要求的空閑頁面,并將對 應(yīng)的頁好填入頁表中。圖4分配頁面的算法流程2.2 數(shù)據(jù)結(jié)構(gòu)頁式管理把內(nèi)存空間按頁的大小劃分成片或者頁面,再按照一定的規(guī)律建立 起頁表,并通過請求表將分配內(nèi)容顯示出來.將頁表和請求表的內(nèi)容使用結(jié)構(gòu)體 來定義是比較方便的./頁表項結(jié)構(gòu)typedef struct _pagetableitempageid pagenum;頁號blockid blocknum;塊號pgtabitem; 頁表typedef pgtabitem * pagetable;/請求表結(jié)構(gòu)typedef struct _reqtableunsigned pi

7、d;/進程號unsigned reqpagenum; 請求頁面數(shù)pagetable pgtabadr; 頁表始址bool state;狀態(tài) reqtabitem;請求表還引入了支持快速插入和刪除的list順序容器來進行相關(guān)操作list reqtable因為模擬設(shè)計的關(guān)系,頁面的起始地址均應(yīng)該為隨機的數(shù)值,所以程序在 設(shè)計過程中加入了隨機數(shù)類的編寫.class RandomNumberprivate:unsigned long randseed;public:RandomNumber(unsigned long s=0);unsigned short Random(unsigned long n

8、);double fRandom(void);采用當前系統(tǒng)的時間值來生成偽隨機數(shù)分配地址.定義隨機數(shù)產(chǎn)生器:RandomNumber random定義內(nèi)存頁面數(shù):int pagenum定義頁面大小:int pagesize定義進程個數(shù):int pnum用整數(shù)數(shù)組模擬分配的內(nèi)存頁面數(shù)int * mempage=new intpagenum2.3 模塊說明2.3.1 主函數(shù)主函數(shù)依次運行了程序中所實現(xiàn)的關(guān)鍵函數(shù).int main()InitSys();/初始化系統(tǒng)MainChoice();輸出系統(tǒng)菜單Destroy。;/釋放申請的動態(tài)內(nèi)存return 0;2.3.2 各個功能函數(shù)初始化內(nèi)存頁面:v

9、oid Init_Mempage(void) 獲取內(nèi)存使用情況:int Get_Mempagenum(void) 初始化默認的請求表:void Init_Reqtable(void) 為默認的進程分配內(nèi)存:void Init_DistMem(void) 手動創(chuàng)建進程,并分配內(nèi)存:void Dist_Mem(void) 釋放申請的動態(tài)內(nèi)存:void Destroy(void) 結(jié)束指定進程:void Kill(void)2.3.3 打印函數(shù)打印出進程請求表:void PrintReqtable(void) 打印出頁表:void PrintPageTable(void) 打印出內(nèi)存使用情況:voi

10、d PrintMem(void) 打印出物理塊的大?。簐oid PrintBlockSize(void)2.3.4 其他函數(shù)初始化系統(tǒng):void InitSys(void) 輸出主菜單:void MainMenu(void) 選擇運彳T分支:void MainChoice()武漢理工大學操作系統(tǒng)課程設(shè)計說明書3開發(fā)平臺3.1開發(fā)平臺(1)使用系統(tǒng):Windows 7(2)使用語言:C+(3)開發(fā)工具:Visual C+ 20084測試用例,運行結(jié)果與運行情況分析4.1 測試方法通過輸入正常數(shù)據(jù)以及非正常數(shù)據(jù)對程序進行全方位測試4.2 測試結(jié)果(1)程序主界面 65”軌Huang學習相關(guān)闡保疏深

11、程命中飄頁防治豈胖對岳與回收陳!8轉(zhuǎn)。區(qū)8煙9騙進晦內(nèi)物系您 5于示銷示前人 式手顯顯撤顯顯退輸 IM-LB.klfJei,1九程富統(tǒng)的(2)輸入進程號和頁面數(shù) 6U沁rHEJflng學習相關(guān)偎作系貌專程度小根挎頁式印第本的方武與回收曲小弟 03#武漢理工大學操作系統(tǒng)課程設(shè)計說明書(3)顯示進程頁表:f中心悔9字習同段隹緊舒烹推觀”模年口的開向定皚泗與回笈展同03詠23一配k刀2 7-面量 J- J. 面進頁表i選號 口建程A程至統(tǒng)的程用大工頁#青:.方不示銷示套人久式手顯顯撤&顯退箱i(4)顯示請求表0U導” E w ng導刁用云段隹緊齊深框浸L,唱引口式枳i忠守腕滿與亙曲5曰6總的(5)顯

12、示內(nèi)存使用情況以及物理塊大小.LeF-uanm學三隹W飛冬汽手叁及、,每三二式孑哈三不四一配二回門”e(6)錯誤檢驗 cAU$用Huang學習相關(guān)果方西回收tRdea33。5啟% LHgl程表況W 月大 I7)-20-i s:SQ5存 選后的內(nèi)言建程末程存理薪程,存加不示銷示一!人人足式手顯顯撤顯顯退 B0,3,4.5-L7.售清沒ft的程表 也造天表況目一人 金白0 不陽山干 it 講:該 選號在管建程求程停理統(tǒng)捫程仁內(nèi)物番鍍小 存功示示銷小屯入入中式手顯顯描顯顯退 頁l-e-B-ft-E-,r?,請耍 CL -SHuan不學習唱關(guān)抵作系講洗4苴計甄頁式于諸百歪的方元與回收、達用訶回時程哀況

13、月大理途頁表e送UL:紅 言建程求程存理統(tǒng)的程已 壽內(nèi)與仔口示示銷示lsA廠 式下顯顯撤顯后 一Q :一二6.7.工頁 1, 2L清輸入進程號二5源程序的主要部分#include #include #include #include #include page.h#include Random.husing namespace std;list reqtable;RandomNumber random;碰機數(shù)產(chǎn)生器unsigned pagenum=random.Random(80)+21;附存頁面數(shù) 21-100unsigned pagesize=random.Random(16)+5;灰面大

14、小 5-20unsigned pnum=random.Random(4)+5;冊程的八數(shù) 5-8int * mempage=new intpagenum; /用整數(shù)數(shù)組模擬內(nèi)存頁面數(shù)/*初始化內(nèi)存頁面*/void Init_Mempage(void) int i=0;for(i=0;iint(pagenum);i+) mempagei=0;/數(shù)組全部賦初值/*獲取內(nèi)存的使用情況*/ int Get_Mempagenum(void) int sum=0;for(int i=0;iint(pagenum);i+) if(mempagei=0)sum+;return sum; /判斷有多少內(nèi)存頁面已

15、經(jīng)被使用 /*初始化默認的請求表*/ void Init_Reqtable(void) int i;for(i=1;i=int(pnum);i+) reqtabitem preq; preq.pid=i;preq.reqpagenum=random.Random(4)+2;進程請求的頁面大小-5 preq.state=false;preq.pgtabadr=NULL;reqtable.push_back(preq); /依次壓入容器一/*為默認的進程分配內(nèi)存*/void Init_DistMem(void)/進程請求頁面數(shù)int reqpnum;int i;list二iterator pos=

16、reqtable.begin();for(;pos!=reqtable.end();pos+)reqpnum=(*pos).reqpagenum;if(reqpnumint(Get Mempagenum() 判斷請求的內(nèi)存頁面數(shù)目是否大cout”沒有足夠的內(nèi)存!endl;coutendl;else(*pos).state=true;pagetable temp = new pgtabitemreqpnum; 新建臨時頁表項數(shù)組 if(temp=NULL) cout”內(nèi)存分配失?。ndl;exit(0);(*pos).pgtabadr=temp;for(i=0;ireqpnum;i+)temp

17、i.pagenum=i; /頁表的頁號.一int randnum=random.Random(pagenum)+1;/l 機產(chǎn)生一個塊號 while(mempagerandnum=1)randnum=random.Random(pagenum)+1;tempi.blocknum=randnum;/頁裝的塊號 mempagerandnum=1;/*手動創(chuàng)建進程,并分配內(nèi)存*/void Dist_Mem(void)int i;reqtabitem preq;新創(chuàng)建進程記錄int pid;進程號int reqpnum;/請求頁面數(shù)bool flag=false;docoutpid;for(list:

18、iteratorif(*pos).pid=pid)pos=reqtable.begin();pos!=reqtable.end();pos+) flag=true;cout該進程號已經(jīng)存在,請重新輸入endl;coutendl;break;while(flag=true);/循環(huán)直到輸入的Pid滿足條件preq.pid=pid;coutreqpnum;preq.reqpagenum=reqpnum;preq.state=false;preq.pgtabadr=NULL;reqpnum=preq.reqpagenum;if(reqpnumGet_Mempagenum() cout沒有足夠的內(nèi)存,

19、進程創(chuàng)建失敗!endl; coutendl; elsepreq.state=true;pagetable temp = new pgtabitemreqpnum; if(temp=NULL)C cout”內(nèi)存分配失??!endl;exit(0);preq.pgtabadr=temp;for(i=0;iint(reqpnum);i+)tempi.pagenum=i; /頁表的頁號.一int randnum=random.Random(pagenum)+1;/l 機產(chǎn)生一個塊號 while(mempagerandnum=1)randnum=random.Random(pagenum)+1;reqta

20、ble.push_back(preq); /將該進程的記錄加入請求表一tempi.blocknum=randnum;/頁裝的塊號 mempagerandnum=1;/*程序結(jié)束時,釋放申請的動態(tài)內(nèi)存*/void Destroy(void)list二iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).state=true)reqtable.clear();delete (*pos).pgtabadr;/*打印出進程請求表*/void PrintReqtable(void

21、) (coutendl;cout|endl;cout進程請求表|endl;cout|endl;cout setw(8)進程號setw(16)請求頁面數(shù)setw(16)頁表起始地址setw(16)頁表長度setw(16)狀態(tài) |endl;cout|endl;list二iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+)(coutTsetw(8)(*pos).pidsetw(16)(*pos).reqpagenumsetw(16)(*pos).pgtabadrsetw(16)(*pos).r

22、eqpagenum) * pagesize;if(*pos).state)coutsetw(4)已分配 |endl;elsecoutsetw(4)未分配 |endl;if(*pos).pid!=reqtable.back().pid)cout|endl;elsecout|endl;)/*打印頁表*/void PrintPageTable(void)(unsigned pid;int i;bool flag=false;coutpid;list二iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();p

23、os+) (if(*pos).pid=pid&(*pos).state=true)(cout cout cout|endl;此進程的頁表|endl;|endl;flag=true;coutsetw(16)頁號setw(6)塊號 |endl; cout|endl;int reqpagenum=(*pos).reqpagenum;for(i=0;ireqpagenum;i+)coutTsetw(16)(*pos).pgtabadri.pagenumsetw(6)(*pos).pgtabadri.blocknum |endl;if(i!=reqpagenum-1) cout|endl;else co

24、ut|endl;if(flag=false)cout”系統(tǒng)中不存在該進程或者該進程還沒有被分配內(nèi)存!n”;coutendl;void PrintMem(void)cout”內(nèi)存總塊數(shù)為 pagenum”,已經(jīng)使用了 pagenum-Get_Mempagenum()塊!endl;cout現(xiàn)在還有Get_Mempagenum()塊內(nèi)存區(qū)域空閑!endl;coutendl;void PrintBlockSize(void)Ccout物理塊大小為:pagesizeKBendl;coutendl;/*結(jié)束指定進程*/void Kill(void)bool flag;int i;reqtabitem te

25、mp;list二iterator pos=reqtable.begin();int pid;docoutpid;for(pos=reqtable.begin();pos!=reqtable.end();pos+)if(*pos).pid=pid)flag=true;temp=*pos;break;if(flag=false)cout素統(tǒng)中不存在該進程!endl;coutendl;while(flag=false);or(i=0;iint(temp.reqpagenum);i+)mempagetemp.pgtabadri.blocknum=0;reqtable.remove(temp);/手新為

26、沒有分配到內(nèi)存的進程分配內(nèi)存for(pos=reqtable.begin();pos!=reqtable.end();pos+)if(*pos).state=false)int reqpnum;reqpnum=(*pos).reqpagenum;if(reqpnum=Get_Mempagenum()(*pos).state=true;pagetable temp = new pgtabitemreqpnum;if(temp=NULL)Ccout”內(nèi)存分配失??!endl;coutendl;exit(0);(*pos).pgtabadr=temp;for(i=0;iint(reqpnum);i+)

27、tempi.pagenum=i; /頁表的頁號 int randnum=random.Random(pagenum)+1;/ffi機產(chǎn)生一個塊 while(mempagerandnum=1)randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;頁表的塊號 mempagerandnum=1;/*初始化系統(tǒng)*/void InitSys(void)一cout.setf(ios二left);左對齊 Init_Mempage();Init_Reqtable(); Init_DistMem();*輸出主菜單*/void MainMenu(void

28、)cout頁式存儲管理的分配與回收endl;cout1.手動倉建進程endl;cout2.顯示逐程頁表endl;cout3.顯示請求表endl;cout4.撤銷迸程endl;cout5.顯示內(nèi)存使用情況endl;cout6.顯示物理塊大小endl;cout7.退山系統(tǒng)endl;coutchoice;switch(choice)case 1:Dist_Mem();break;case 2:PrintPageTable();break;case 3:PrintReqtable();break;case 4:Kill();break;case 5:PrintMem();break;case 6:PrintBlockSize();break;case 7:break;default :cout輸入有誤,請重新輸入.n; coutvvendl;break;while(choice!=7); int main()IInitSys();/初始化系統(tǒng)

溫馨提示

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

最新文檔

評論

0/150

提交評論