版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、學 號:課程設計課程計算機操作系統題目模擬設計存儲管理的分配與回收學院計算機科學與技術學院專業(yè)計算機科學與技術班級計算機1404姓名王承禹指導教師王紅霞2016 年 12 月 27 日目錄1需求分析1.1任務描述1.2系統的功能需求3.功能設計2.1算法分析2.2數據結構4.頁表結構2.3模塊說明內存模塊4.進程模塊5.主控模塊5.錯誤處理模塊.7.7.開發(fā)平臺3.1開發(fā)平臺運行結果與運行情況分析4.1初始界面以及功能選項4.2內存情況4.3進程頁表信息自我評價與總結核心代碼9.4.1內存模塊代碼104.2進程模塊代碼134.3主控模塊代碼146成績評定表1.6模擬設計頁式存儲管理的分配與回收
2、1需求分析1.1任務描述頁式管理頁式管理是一種內存空間存儲管理的技術,分為靜態(tài)頁式管理和動態(tài)頁式管 理。模擬動態(tài)頁式管理,請求調頁技術,將各進程的虛擬空間劃分成若干個長度相等的 頁,將內存劃分成若干長度相等的頁框。并且能完成邏輯地址到物理地址的轉換。模擬虛擬存儲器的工作。1.2系統的功能需求(1) 能夠輸入給定的內存頁面數,頁面大小,進程的個數及每個進程的頁數。(2) 當某進程提出申請空間的大小后,顯示能否滿足申請,以及為該進程分配資源 后內存空間的使用情況(被進程占用的頁面,空閑的頁面)。(3) 當某進程撤消時,顯示內存回收后內存空間的使用情況。(4)實現缺頁中斷處理。2功能設計2.1算法分
3、析首先,請求表給出進程或作業(yè)要求的頁面數 。然后,由存儲頁面表檢查是否有足夠的 空閑頁面,如果沒有,則本次無法分配。如果有則首先分配設置頁表,并請求表中的相 應表項后,按一定的查找算法搜索出所要求的空閑頁面,并將對應的頁好填入頁表中。頁面分配算法如圖2.1所示。圖2.1頁面分配算法流程圖2.2數據結構頁式管理把內存空間按頁的大小劃分成片或者頁面,再按照一定的規(guī)律建立起頁表頁表結構struct Page Process* processPtr;/ 進程指針int * memoryPage; / 內存頁號bool * valid;II頁是否有效int size; II有用頁個數int pageSi
4、ze;;2.3模塊說明采用了面向對象的設計方法,將模塊分為內存模塊、進程模塊與主控模塊 要說明各個模塊的接口與數據定義。內存模塊class Memory private :double allNum=1; / 訪問總次數double missNum = 0; / 不命中次數Process* processPtr; / 進程指針數組int * allocateTime; /頁被分配時的系統時間bool * valid;/內存頁數組,標志頁是否可用int freeSize;/空閑頁數量int pageSize = 2;static Memory* in sta nee;Memory。;public
5、 :static Memory* getl nsta nce();int getPageNum();void setPageNum( int Num);int getPageSize();void setPageSize( int Size);Process* getProcess( int index) const; / 獲取進程指針int getTime( int in dex) con st; / 獲取系統時間bool getValid( int index) const; / 獲取頁是否可用int getFreeSizse() c on st return freeSize; / 獲取
6、內存空閑頁數量bool validIndex( int index) const; /index 是否有效int getEarliestPage() con st; /獲取最早進入內存的頁void allocate(Process* ptr, int index);/ 分配一個內存頁給進程 indexvoid allocateAII(Process* pr); /為所有進程頁分配內存頁void revoke(); / 釋放一頁void revoke( int mem); / 釋放一頁void revokeProcess(Process* ptr);/ 釋放進程的所有頁void printlnf
7、o() con st; / 內存頁信息;進程模塊class Process private :string name;/進程名double size;/進程大小,單位為MBint pageCou nt;/頁數Page* page;/進程的頁表public :Process(str ingnm, double sz); /默認構造函數string getName() const return name; / 獲取進程名double getSize() const return size; int getPageCount() const return pageCount; Page* getPa
8、ge() const return page; void prin tI nfo() con st;/ 輸岀進程信息;主控模塊int mai n() Memory * memory = Memory :get In sta nce();/ 內存指針Process* process = new Process*MAX_PROCESS_SIZE; / 進程指針數組/初始化進程指針數組for (i nt i = 0; i MAX_PROCESS_SIZE; i+)processi = NULL_PTR;in it();int select = -1;/ 操作編號do cout n=菜單= endl;
9、cout 1.創(chuàng)建進程n2.分配進程所有頁n3.分配進程一頁n4.釋放進程 endl;cout 5.釋放進程一頁n6.內存狀態(tài)n7.進程狀態(tài)n8.頁表信息n9.退岀 endl;cout select;if (cin.fail() badl nput();/ 輸入流錯誤else if (select 9) cout n 操作編號錯誤! endl;else break; while (true);switch (select) case 1:op1(memory, process);break;case 2:op2(memory, process);break;case 3:op3(memory,
10、 process);break;case 4:op4(memory, process);break;case 5:op5(memory, process);break;case 6:op6(memory, process);break;case 7:op7(memory, process);break;case 8:op8(memory, process); break ;case 9: break;default:cout n 怎么會運行到這里? endl; break; while (select != 9);return 0;錯誤處理模塊class Error private :stri
11、ng info; / 異常信息public :Error() :info( Error: exception occured! ) Error( string i) :info( i) string getlnfo() const return info; ;3.1開發(fā)平臺(1) 操作系統:Windows10(2) 開發(fā)語言:C+(3) 開發(fā)環(huán)境:Visual Studio 2015 Community本程序米用C+作為編程語言,用visual studio 2015進行開發(fā)。C+是C語言的繼 承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基于對 象的程序設計,還可以
12、進行以繼承和多態(tài)為特點的面向對象的程序設計。C+擅長面向對象程序設計的同時,還可以進行基于過程的程序設計。4運行結果與運行情況分析 CWI N DOWSsysternSScrnd .cws D X- -Q-一-nF -Q ft?* 0乘-程程程趕程態(tài)態(tài)息 戰(zhàn)一曲曲赴l(fā)a-fr-u.-信 邏gl配奴KI存桎衣岀 11分分w欄山啟貞退 S - - V 1 2LJ 4 t 7 cl- b-屎作編號:4.1初始界面以及功能選項4.2內存情況33 L:W IN DOWS5yitem3 ZKcmd.exe程程態(tài)態(tài)息 途it-狀言 冊放存押召出 W釋內進頁退 仁一九.廠蟲二LUtpIllto LitU工口王
13、raFd壬匚土工0王nFn壬口壬 K-VH-*Kr YKrVHr 進進講進進進進進進進 屬屬屬屬屬屬SK屬屬 圻所m所所所所所0-123456789ml J -0- 一 F 0 1 .4f寸中4f1 f1 f1 f山4r屮 MHH H nnH nnu- nuo- nHM nn nu HHM nn rL- - i i -JH rtJ nJ nJ mJ 己己 nJ fi B Raffia 存分分分分分分分 八刀分分o- 1 2 3 4 s 6 7 8 9output, txt羊細內存信卓請査看文件4.3進程頁表信息HB C :WI N DOWS yitem 32cm d .ewe有頁貝 L所一-
14、程程程程程態(tài)態(tài)息 4進4進進快矢言 -1TA -nA rj hli nA JMdL J 建配配放放存程表出 創(chuàng)分分釋釋內進頁退輸出進程頁表信息=左程名:A1234內存頁號 內存頁號 內存頁號 內存頁號 內存頁號5I J01234表環(huán)引號引哥nl谷歌拼音輸入袪2半;5自我評價與總結(1)本次實驗中我認為完成的比較好的工作有模塊設計和編碼以及分配算法的實現 其中模塊分為了內存、進程以及主控模塊三部分。可以方便的完成內存分配算法的轉換 具有較高的獨立性,同時也可以方便的完成分頁到分段的轉換,采用的調度算法也有較 高的獨立性。可見,一個模塊獨立性高的系統,其變更與擴展都會變得十分容易。其次,在頁面置換
15、算法的選擇上,我選擇了先進先出算法,該算法易于實現,而且不 命中率與隨機置換算法的不命中率都比較低,是比較理想的頁面置換算法。(2) 需求分析時對題目的理解不完全正確,造成了實現的系統功能不符合要求,例如,在內存中應該給每個進程分配一定數量的塊,而我的實現中并沒有這樣做,而是一個進程最極端的情況下可以占用所有內存,并且一個進程可以替換其他進程的頁面。這一點是由于沒有完全理解實驗要求和對頁式虛擬存儲器理解有誤造成的。同時這樣也給系統帶來了很大的影響。我吸取到的教訓是,需求分析階段就要搞清楚問題所在,在問 題不明確的情況下,不能貿然著手實現系統,否則實現的系統講沒有意義。(3) 本次設計中,在編寫
16、、調試、執(zhí)行的過程中,我熟悉了頁式存儲管理的各個置 換算法與分配方法,以及回收方法。同時,在實現系統的過程中,我在需求分析階段沒 有搞清楚問題,以至于系統功能有誤,這都是很好的經驗和教訓。6核心代碼6.1內存模塊代碼class Memory private :double allNum=1;double missNum = 0;Process* processPtr; / 進程指針數組int * allocateTime;/頁被分配時的系統時間bool * valid; /內存頁數組,標志頁是否可用int freeSize; II空閑頁數量int pageSize = 2;static Mem
17、ory* in sta nee;Memory。;public :static Memory* getl nsta nce();int getPageNum();void setPageNum( int Num);int getPageSize();void setPageSize( int Size);Process* getProcess( int index) const; II 獲取進程指針int getTime( int in dex) con st; II 獲取系統時間bool getValid( int index) const; II 獲取頁是否可用int getFreeSizs
18、e() c on st return freeSize; II 獲取內存空閑頁數量bool validlndex( int index) const; /index 是否有效int getEarliestPage() con st; II獲取最早進入內存的頁void allocate(Process* ptr, int index);II 分配一個內存頁給進程indexvoid allocateAII(Process* pr);II為所有進程頁分配內存頁void revoke。;/ 釋放一頁void revoke( int mem);/ 釋放一頁void revokeProcess(Proce
19、ss* ptr);/ 釋放進程的所有頁void printlnfo() con st; / 內存頁信息;/默認構造函數,私有Memory:Memory() valid = new bool pageNum;processPtr = new Process*pageNum;allocateTime = new int pageNum;freeSize = pageNum;/初始化:頁標志、進程指針、分配時間for (int i = 0; i pageNum; i+) validi = true ;processPtri = NULL_PTR;allocateTimei = -1;int Memo
20、ry:getPageNum() return pageNum;int Memory:getPageSize()return pageSize; void Memory:setPageNum( int Num) pageNum = Num; void Memory:setPageSize( int Size)pageSize = Size;Memory* Memory:i nsta nee =new Memory。;/獲取單例Memory* Memory:get In sta nce() return instanee;/獲取進程指針Process* Memory:getProcess( int
21、 index) eonst if (validIndex(index)return processPtrindex;else throw Error( Error: in Memory:getProcess(), /獲取系統時間int Memory:getTime( int index) const if (validIndex(index)return allocateTimeindex;else throw Error( Error: in Memory:getTime(), 錯誤的下標r);錯誤的下標r);/獲取頁是否可用bool Memory:getValid( int index)
22、const if (validIndex(index)return validindex;else throw Error( Error: in Memory.getValid(),錯誤的下標r);/index是否有效bool Memory:validIndex( int index) const if (index = pageNum) return false; else return true ;/獲取最早進入內存的頁int Memory:getEarliestPage() const int min = MAX_TIME;/最小分配時間int pos = -1;/最早進入的頁for (
23、int i = 0; i pageNum; i+) if (allocateTimei != -1 & allocateTimei getPage();if (page-getValid(index)throw Error(Error:頁已在內存中 r);if (freeSize = 0) revoke(); / 釋放一頁/開始分配for (int i = 0; i allocate(i ndex, i);/更新內存信息processPtri = ptr;allocateTimei = time+;validi = false;freeSize-;第vv index cout 分配內存頁 i
24、給進程getName() 頁. endl;break;catch (Error e) cout e.get lnfo() en dl;6.1進程模塊代碼class Process private :string name;/進程名double size;/進程大小,單位為MBint pageCou nt;/頁數Page* page;/進程的頁表public :Process(str ingnm, double sz); /默認構造函數/獲取進程信息string getName() const return name; double getSize() const return size; in
25、t getPageCount() const return pageCount; Page* getPage() const return page; /輸岀進程信息void pr in tI nfo() con st;;/默認構造函數Process:Process(string nm , double sz) /if (sz = pageNum) throw Error(Error:進程大小參數錯誤,構造失敗!);int nameSize = nm .size();if (nameSize MAX_NAME_SIZE) throw Error(Error:進程名長度錯誤,允許的長度為 110
26、 !);n ame = nm;size = sz;/進程大小double temp = size - ( int)size;if (temp = 0) pageCou nt = size;else pageCou nt = size + 1;/新建頁表page = new Page(this , pageCount);/輸岀進程信息void Process:printlnfo() const cout 進程名: name endl;cout 大小: size endl;cout 頁數: pageCount endl;#en dif6.2主控模塊代碼int mai n() Memory* memory = Memory:getInstan
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理健康知識課件
- 施工現場橋梁施工技術方案
- 醫(yī)療廢物管理系統方案
- 施工現場規(guī)劃與布局優(yōu)化方案
- 道路施工文檔管理方案
- 施工現場材料驗收管理方案
- 房屋基礎工程質量控制方案
- 植物多樣性保護與提升方案
- 隧道施工防火措施方案
- 外墻施工質量監(jiān)督與檢查方案
- 2026年標準版離婚協議書(有財產)
- 養(yǎng)老院電氣火災培訓課件
- 中國工商銀行2025年度春季校園招聘筆試歷年典型考題及考點剖析附帶答案詳解
- 對外話語體系構建的敘事話語建構課題申報書
- 中國家庭財富與消費報告2025年第三季度
- 馬年猜猜樂(馬的成語)打印版
- 精神障礙防治責任承諾書(3篇)
- 2025年擔保公司考試題庫(含答案)
- 合肥新鑫人力資源服務有限公司介紹企業(yè)發(fā)展分析報告
- 2025年金融控股公司行業(yè)分析報告及未來發(fā)展趨勢預測
- 質量控制計劃模板全行業(yè)適用
評論
0/150
提交評論