版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、學(xué) 號:課程設(shè)計(jì)課程計(jì)算機(jī)操作系統(tǒng)題目模擬設(shè)計(jì)存儲管理的分配與回收學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級計(jì)算機(jī)1404姓名王承禹指導(dǎo)教師王紅霞2016 年 12 月 27 日目錄1需求分析1.1任務(wù)描述1.2系統(tǒng)的功能需求3.功能設(shè)計(jì)2.1算法分析2.2數(shù)據(jù)結(jié)構(gòu)4.頁表結(jié)構(gòu)2.3模塊說明內(nèi)存模塊4.進(jìn)程模塊5.主控模塊5.錯誤處理模塊.7.7.開發(fā)平臺3.1開發(fā)平臺運(yùn)行結(jié)果與運(yùn)行情況分析4.1初始界面以及功能選項(xiàng)4.2內(nèi)存情況4.3進(jìn)程頁表信息自我評價與總結(jié)核心代碼9.4.1內(nèi)存模塊代碼104.2進(jìn)程模塊代碼134.3主控模塊代碼146成績評定表1.6模擬設(shè)計(jì)頁式存儲管理的分配與回收
2、1需求分析1.1任務(wù)描述頁式管理頁式管理是一種內(nèi)存空間存儲管理的技術(shù),分為靜態(tài)頁式管理和動態(tài)頁式管 理。模擬動態(tài)頁式管理,請求調(diào)頁技術(shù),將各進(jìn)程的虛擬空間劃分成若干個長度相等的 頁,將內(nèi)存劃分成若干長度相等的頁框。并且能完成邏輯地址到物理地址的轉(zhuǎn)換。模擬虛擬存儲器的工作。1.2系統(tǒng)的功能需求(1) 能夠輸入給定的內(nèi)存頁面數(shù),頁面大小,進(jìn)程的個數(shù)及每個進(jìn)程的頁數(shù)。(2) 當(dāng)某進(jìn)程提出申請空間的大小后,顯示能否滿足申請,以及為該進(jìn)程分配資源 后內(nèi)存空間的使用情況(被進(jìn)程占用的頁面,空閑的頁面)。(3) 當(dāng)某進(jìn)程撤消時,顯示內(nèi)存回收后內(nèi)存空間的使用情況。(4)實(shí)現(xiàn)缺頁中斷處理。2功能設(shè)計(jì)2.1算法分
3、析首先,請求表給出進(jìn)程或作業(yè)要求的頁面數(shù) 。然后,由存儲頁面表檢查是否有足夠的 空閑頁面,如果沒有,則本次無法分配。如果有則首先分配設(shè)置頁表,并請求表中的相 應(yīng)表項(xiàng)后,按一定的查找算法搜索出所要求的空閑頁面,并將對應(yīng)的頁好填入頁表中。頁面分配算法如圖2.1所示。圖2.1頁面分配算法流程圖2.2數(shù)據(jù)結(jié)構(gòu)頁式管理把內(nèi)存空間按頁的大小劃分成片或者頁面,再按照一定的規(guī)律建立起頁表頁表結(jié)構(gòu)struct Page Process* processPtr;/ 進(jìn)程指針int * memoryPage; / 內(nèi)存頁號bool * valid;II頁是否有效int size; II有用頁個數(shù)int pageSi
4、ze;;2.3模塊說明采用了面向?qū)ο蟮脑O(shè)計(jì)方法,將模塊分為內(nèi)存模塊、進(jìn)程模塊與主控模塊 要說明各個模塊的接口與數(shù)據(jù)定義。內(nèi)存模塊class Memory private :double allNum=1; / 訪問總次數(shù)double missNum = 0; / 不命中次數(shù)Process* processPtr; / 進(jìn)程指針數(shù)組int * allocateTime; /頁被分配時的系統(tǒng)時間bool * valid;/內(nèi)存頁數(shù)組,標(biāo)志頁是否可用int freeSize;/空閑頁數(shù)量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; / 獲取進(jìn)程指針int getTime( int in dex) con st; / 獲取系統(tǒng)時間bool getValid( int index) const; / 獲取頁是否可用int getFreeSizse() c on st return freeSize; / 獲取
6、內(nèi)存空閑頁數(shù)量bool validIndex( int index) const; /index 是否有效int getEarliestPage() con st; /獲取最早進(jìn)入內(nèi)存的頁void allocate(Process* ptr, int index);/ 分配一個內(nèi)存頁給進(jìn)程 indexvoid allocateAII(Process* pr); /為所有進(jìn)程頁分配內(nèi)存頁void revoke(); / 釋放一頁void revoke( int mem); / 釋放一頁void revokeProcess(Process* ptr);/ 釋放進(jìn)程的所有頁void printlnf
7、o() con st; / 內(nèi)存頁信息;進(jìn)程模塊class Process private :string name;/進(jìn)程名double size;/進(jìn)程大小,單位為MBint pageCou nt;/頁數(shù)Page* page;/進(jìn)程的頁表public :Process(str ingnm, double sz); /默認(rèn)構(gòu)造函數(shù)string getName() const return name; / 獲取進(jìn)程名double getSize() const return size; int getPageCount() const return pageCount; Page* getPa
8、ge() const return page; void prin tI nfo() con st;/ 輸岀進(jìn)程信息;主控模塊int mai n() Memory * memory = Memory :get In sta nce();/ 內(nèi)存指針Process* process = new Process*MAX_PROCESS_SIZE; / 進(jìn)程指針數(shù)組/初始化進(jìn)程指針數(shù)組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)建進(jìn)程n2.分配進(jìn)程所有頁n3.分配進(jìn)程一頁n4.釋放進(jìn)程 endl;cout 5.釋放進(jìn)程一頁n6.內(nèi)存狀態(tài)n7.進(jìn)程狀態(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 怎么會運(yù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) 操作系統(tǒng):Windows10(2) 開發(fā)語言:C+(3) 開發(fā)環(huán)境:Visual Studio 2015 Community本程序米用C+作為編程語言,用visual studio 2015進(jìn)行開發(fā)。C+是C語言的繼 承,它既可以進(jìn)行C語言的過程化程序設(shè)計(jì),又可以進(jìn)行以抽象數(shù)據(jù)類型為特點(diǎn)的基于對 象的程序設(shè)計(jì),還可以
12、進(jìn)行以繼承和多態(tài)為特點(diǎn)的面向?qū)ο蟮某绦蛟O(shè)計(jì)。C+擅長面向?qū)ο蟪绦蛟O(shè)計(jì)的同時,還可以進(jìn)行基于過程的程序設(shè)計(jì)。4運(yùn)行結(jié)果與運(yùn)行情況分析 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初始界面以及功能選項(xiàng)4.2內(nèi)存情況33 L:W IN DOWS5yitem3 ZKcmd.exe程程態(tài)態(tài)息 途it-狀言 冊放存押召出 W釋內(nèi)進(jìn)頁退 仁一九.廠蟲二LUtpIllto LitU工口王
13、raFd壬匚土工0王nFn壬口壬 K-VH-*Kr YKrVHr 進(jìn)進(jìn)講進(jìn)進(jìn)進(jìn)進(jìn)進(jìn)進(jìn)進(jìn) 屬屬屬屬屬屬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羊細(xì)內(nèi)存信卓請査看文件4.3進(jìn)程頁表信息HB C :WI N DOWS yitem 32cm d .ewe有頁貝 L所一-
14、程程程程程態(tài)態(tài)息 4進(jìn)4進(jìn)進(jìn)快矢言 -1TA -nA rj hli nA JMdL J 建配配放放存程表出 創(chuàng)分分釋釋內(nèi)進(jìn)頁退輸出進(jìn)程頁表信息=左程名:A1234內(nèi)存頁號 內(nèi)存頁號 內(nèi)存頁號 內(nèi)存頁號 內(nèi)存頁號5I J01234表環(huán)引號引哥nl谷歌拼音輸入袪2半;5自我評價與總結(jié)(1)本次實(shí)驗(yàn)中我認(rèn)為完成的比較好的工作有模塊設(shè)計(jì)和編碼以及分配算法的實(shí)現(xiàn) 其中模塊分為了內(nèi)存、進(jìn)程以及主控模塊三部分。可以方便的完成內(nèi)存分配算法的轉(zhuǎn)換 具有較高的獨(dú)立性,同時也可以方便的完成分頁到分段的轉(zhuǎn)換,采用的調(diào)度算法也有較 高的獨(dú)立性。可見,一個模塊獨(dú)立性高的系統(tǒng),其變更與擴(kuò)展都會變得十分容易。其次,在頁面置換
15、算法的選擇上,我選擇了先進(jìn)先出算法,該算法易于實(shí)現(xiàn),而且不 命中率與隨機(jī)置換算法的不命中率都比較低,是比較理想的頁面置換算法。(2) 需求分析時對題目的理解不完全正確,造成了實(shí)現(xiàn)的系統(tǒng)功能不符合要求,例如,在內(nèi)存中應(yīng)該給每個進(jìn)程分配一定數(shù)量的塊,而我的實(shí)現(xiàn)中并沒有這樣做,而是一個進(jìn)程最極端的情況下可以占用所有內(nèi)存,并且一個進(jìn)程可以替換其他進(jìn)程的頁面。這一點(diǎn)是由于沒有完全理解實(shí)驗(yàn)要求和對頁式虛擬存儲器理解有誤造成的。同時這樣也給系統(tǒng)帶來了很大的影響。我吸取到的教訓(xùn)是,需求分析階段就要搞清楚問題所在,在問 題不明確的情況下,不能貿(mào)然著手實(shí)現(xiàn)系統(tǒng),否則實(shí)現(xiàn)的系統(tǒng)講沒有意義。(3) 本次設(shè)計(jì)中,在編寫
16、、調(diào)試、執(zhí)行的過程中,我熟悉了頁式存儲管理的各個置 換算法與分配方法,以及回收方法。同時,在實(shí)現(xiàn)系統(tǒng)的過程中,我在需求分析階段沒 有搞清楚問題,以至于系統(tǒng)功能有誤,這都是很好的經(jīng)驗(yàn)和教訓(xùn)。6核心代碼6.1內(nèi)存模塊代碼class Memory private :double allNum=1;double missNum = 0;Process* processPtr; / 進(jìn)程指針數(shù)組int * allocateTime;/頁被分配時的系統(tǒng)時間bool * valid; /內(nèi)存頁數(shù)組,標(biāo)志頁是否可用int freeSize; II空閑頁數(shù)量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 獲取進(jìn)程指針int getTime( int in dex) con st; II 獲取系統(tǒng)時間bool getValid( int index) const; II 獲取頁是否可用int getFreeSizs
18、e() c on st return freeSize; II 獲取內(nèi)存空閑頁數(shù)量bool validlndex( int index) const; /index 是否有效int getEarliestPage() con st; II獲取最早進(jìn)入內(nèi)存的頁void allocate(Process* ptr, int index);II 分配一個內(nèi)存頁給進(jìn)程indexvoid allocateAII(Process* pr);II為所有進(jìn)程頁分配內(nèi)存頁void revoke。;/ 釋放一頁void revoke( int mem);/ 釋放一頁void revokeProcess(Proce
19、ss* ptr);/ 釋放進(jìn)程的所有頁void printlnfo() con st; / 內(nèi)存頁信息;/默認(rèn)構(gòu)造函數(shù),私有Memory:Memory() valid = new bool pageNum;processPtr = new Process*pageNum;allocateTime = new int pageNum;freeSize = pageNum;/初始化:頁標(biāo)志、進(jìn)程指針、分配時間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;/獲取進(jìn)程指針Process* Memory:getProcess( int
21、 index) eonst if (validIndex(index)return processPtrindex;else throw Error( Error: in Memory:getProcess(), /獲取系統(tǒng)時間int Memory:getTime( int index) const if (validIndex(index)return allocateTimeindex;else throw Error( Error: in Memory:getTime(), 錯誤的下標(biāo)r);錯誤的下標(biāo)r);/獲取頁是否可用bool Memory:getValid( int index)
22、const if (validIndex(index)return validindex;else throw Error( Error: in Memory.getValid(),錯誤的下標(biāo)r);/index是否有效bool Memory:validIndex( int index) const if (index = pageNum) return false; else return true ;/獲取最早進(jìn)入內(nèi)存的頁int Memory:getEarliestPage() const int min = MAX_TIME;/最小分配時間int pos = -1;/最早進(jìn)入的頁for (
23、int i = 0; i pageNum; i+) if (allocateTimei != -1 & allocateTimei getPage();if (page-getValid(index)throw Error(Error:頁已在內(nèi)存中 r);if (freeSize = 0) revoke(); / 釋放一頁/開始分配for (int i = 0; i allocate(i ndex, i);/更新內(nèi)存信息processPtri = ptr;allocateTimei = time+;validi = false;freeSize-;第vv index cout 分配內(nèi)存頁 i
24、給進(jìn)程getName() 頁. endl;break;catch (Error e) cout e.get lnfo() en dl;6.1進(jìn)程模塊代碼class Process private :string name;/進(jìn)程名double size;/進(jìn)程大小,單位為MBint pageCou nt;/頁數(shù)Page* page;/進(jìn)程的頁表public :Process(str ingnm, double sz); /默認(rèn)構(gòu)造函數(shù)/獲取進(jìn)程信息string getName() const return name; double getSize() const return size; in
25、t getPageCount() const return pageCount; Page* getPage() const return page; /輸岀進(jìn)程信息void pr in tI nfo() con st;;/默認(rèn)構(gòu)造函數(shù)Process:Process(string nm , double sz) /if (sz = pageNum) throw Error(Error:進(jìn)程大小參數(shù)錯誤,構(gòu)造失敗!);int nameSize = nm .size();if (nameSize MAX_NAME_SIZE) throw Error(Error:進(jìn)程名長度錯誤,允許的長度為 110
26、 !);n ame = nm;size = sz;/進(jìn)程大小double temp = size - ( int)size;if (temp = 0) pageCou nt = size;else pageCou nt = size + 1;/新建頁表page = new Page(this , pageCount);/輸岀進(jìn)程信息void Process:printlnfo() const cout 進(jìn)程名: name endl;cout 大小: size endl;cout 頁數(shù): pageCount endl;#en dif6.2主控模塊代碼int mai n() Memory* memory = Memory:getInstan
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國木器修補(bǔ)環(huán)氧樹脂行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國美胸按摩油數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國緊身體內(nèi)衣數(shù)據(jù)監(jiān)測研究報告
- 2024年金屬包覆墊片項(xiàng)目可行性研究報告
- 2024年中國熱風(fēng)木材烘干機(jī)市場調(diào)查研究報告
- 年度新能源掃路車競爭策略分析報告
- 年度水文測量儀器戰(zhàn)略市場規(guī)劃報告
- 年度焙烤食品市場分析及競爭策略分析報告
- 福建省泉州市永春第一中學(xué)2025屆物理高二上期中綜合測試試題含解析
- 河北省灤州市2025屆物理高二第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 北京市第5屆迎春杯小學(xué)數(shù)學(xué)競賽決賽試題doc
- 探究影響滑動摩擦力大小的因素實(shí)驗(yàn)說課課件
- DB11∕994-2021 平戰(zhàn)結(jié)合人民防空工程設(shè)計(jì)規(guī)范
- 信號與系統(tǒng)課設(shè)報告
- 近代科學(xué)革命課件
- 《文言賓語前置句式》課件(廣東省省級優(yōu)課)
- 《霸王別姬》賞析課件
- 《中級微觀經(jīng)濟(jì)學(xué)》考試復(fù)習(xí)題庫(附答案)
- 三年級 上冊科學(xué) 課件-2.4 哺乳動物 |湘教版(一起)(共23張PPT)
- 建設(shè)工程總投資組成表
- 詩詞大會訓(xùn)練題庫(九宮格)課件
評論
0/150
提交評論