版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)課程實驗報告學(xué)生姓名:尹朋班 學(xué) 號:111131 指導(dǎo)教師:袁國斌中國地質(zhì)大學(xué)信息工程學(xué)院2015 年1 月4 日實習(xí)題目:內(nèi)存管理模型的設(shè)計與實現(xiàn)【需求規(guī)格說明】對內(nèi)存的可變分區(qū)申請采用鏈表法管理進行模擬實現(xiàn)。要求:1.對于給定的一個存儲空間自己設(shè)計數(shù)據(jù)結(jié)構(gòu)進行管理,可以使用單個鏈表,也可以使用多個鏈表,自己負責(zé)存儲空間的所有管理組織,要求采用分頁方式 (指定單元大小為頁,如4k,2k,進程申請以頁為單位) 來組織基本內(nèi)容;2.當進程對內(nèi)存進行空間申請操作時,模型采用一定的策略(如:首先利用可用的內(nèi)存進行分配,如果空間不夠時,進行內(nèi)存緊縮或其他方案進行處理)對進程給予指定的內(nèi)存分配
2、;3.從系統(tǒng)開始啟動到多個進程參與申請和運行時,進程最少要有3 個以上,每個執(zhí)行申請的時候都要能夠?qū)ο到y(tǒng)當前的內(nèi)存情況進行查看的接口;4.對內(nèi)存的申請進行內(nèi)存分配,對使用過的空間進行回收,對給定的某種頁面調(diào)度進行合理的頁面分配。5.利用不同的顏色代表不同的進程對內(nèi)存的占用情況,動態(tài)更新這些信息?!舅惴ㄔO(shè)計】(1)設(shè)計思想:通過建立一個鏈表,來描述已分配和空閑的內(nèi)存分區(qū)。對于每一個分區(qū),它可能存放了某個進程,也可能是兩個進程間的空閑區(qū)。鏈表中的每一個結(jié)點,分別描述了一個內(nèi)存分區(qū),包括它的起始地址、長度、指向下一個結(jié)點的指針以及分區(qū)的當前狀態(tài)。在基于鏈表的存儲管理中, 當一個新的進程到來時, 需要
3、為它分配內(nèi)存空間, 即為它尋找某個空閑分區(qū),該分區(qū)的大小必須大于或等于進程的大小. 最先匹配法 : 假設(shè)新進程的大小為m,那么從鏈表的首節(jié)點開始, 將每一個空閑節(jié)點的大小與 m相比較 , 直到找到合適的節(jié)點. 這種算法查找的節(jié)點很少, 因而速度很快 . 最佳匹配算法 : 搜索整個鏈表 , 將能夠裝得下該進程的最小空閑區(qū)分配出去. 最壞匹配法:在每次分配的時候, 總是將最大的那個空閑區(qū)切去一部分, 分配給請求者 .它的依據(jù)是當一個很大的空閑區(qū)被切割成一部分后, 可能仍然是一個比較大的空閑區(qū) ,從而避免了空閑區(qū)越分越小的問題. (2)設(shè)計表示:分區(qū)結(jié)點設(shè)計: template class chai
4、nnode friend chain; public: char pro; /內(nèi)存塊存放的程序名 o 代表操作系統(tǒng)代表空閑區(qū) t size; /內(nèi)存塊的大小 t begin; /內(nèi)存塊起始地址 chainnode *link; /下一個內(nèi)存塊 ; template 分區(qū)鏈表設(shè)計: class chain public: chain() first=null; chain(); int ff(int manage,char pro,int size); void assign(chainnode *q,char pro,int size);/動態(tài)分配內(nèi)存 int bf(int manage,ch
5、ar pro,int size); / 最佳適應(yīng)法 int wf(int manage,char pro,int size); / 最壞適應(yīng)法 int delpro(int manage,char pro); / 撤銷進程,可能要進行內(nèi)存塊的合并void del_pro(int manage); void init(int manage); / 內(nèi)存的初始化void assign_pro(int manage) ; / public: chainnode *first; chainnode *p; ; (3)詳細設(shè)計表示:main() childmenu( intmanage) / 子菜sho
6、w()/顯示內(nèi)存使用情況/ 給進程 pro 根據(jù)選擇情況分配內(nèi)存/ 最先適應(yīng)法 /最佳適應(yīng)法 /最壞適應(yīng)法【調(diào)試報告】assign_pro(manage) wf(manage,pro,size) ff(manage,pro,size) bf(manage,pro,size) 【附錄】#include #include #include template class chainnode friend chain; public: char pro; /內(nèi)存塊存放的程序名o 代表操作系統(tǒng)代表空閑區(qū) t size; /內(nèi)存塊的大小 t begin; /內(nèi)存塊起始地址 chainnode *link;
7、 /下一個內(nèi)存塊 ; template class chain public: chain() first=null; chain(); int ff(int manage,char pro,int size); void assign(chainnode *q,char pro,int size); / 動態(tài)分配內(nèi)存 int bf(int manage,char pro,int size); / 最佳適應(yīng)法 int wf(int manage,char pro,int size); / 最壞適應(yīng)法 int delpro(int manage,char pro); / 撤銷進程,可能要進行內(nèi)存
8、塊的合并void del_pro(int manage); void init(int manage); / 內(nèi)存的初始化void assign_pro(int manage) ; / public: chainnode *first; chainnode *p; ; memory *base; / 代表內(nèi)存,一個頭指針, 內(nèi)存總大小為256k /int snum=20,50,30,45,54,52; /void assign(memory *q,char pro,int size); void init(int manage) / 內(nèi)存的初始化 memory *p,*q; if(base!=
9、null) / 這一塊是釋放鏈表 p=base; while(p) q=p-next; delete p; p=q; base=new memory; /操作系統(tǒng),大小5k, 起始地址是0k base-begin=0; base-pro=o; base-size=5; if(manage=0) / 靜態(tài)內(nèi)存,初始化7 個內(nèi)存塊,第一個內(nèi)存塊是操作系統(tǒng) p=base; q=new memory; / 空閑塊 1,大小 20,起始地址5k q-begin=5; q-pro=0; q-size=20; p-next=q; p=q; q=new memory; / 空閑塊 2,大小 50,起始地址25
10、k q-begin=25; q-pro=0; q-size=50; p-next=q; p=q; q=new memory; / 空閑塊 3,大小 30,起始地址75k q-begin=75; q-pro=0; q-size=30; p-next=q; p=q; q=new memory; / 空閑塊 4,大小 45,起始地址105k q-begin=105; q-pro=0; q-size=45; p-next=q; p=q; q=new memory; / 空閑塊 5,大小 54,起始地址150k q-begin=150; q-pro=0; q-size=54; p-next=q; p=q
11、; q=new memory; / 空閑塊 6,大小 52,起始地址204k q-begin=204; q-pro=0; q-size=52; p-next=q; q-next=null; else / 動態(tài)內(nèi)存,只有一個大的內(nèi)存塊 p=new memory; / 空閑塊 251k, 起始地址是5k p-begin=5; p-pro=0; p-size=251; p-next=null; base-next=p; void assign(memory *q,char pro,int size) / 動態(tài),給進程pro 在內(nèi)存塊q-next 上分配 size 大小, q 不為空且 q-next
12、不為空 / 因為要進行插入操作,所以傳的是要分配內(nèi)存塊的前指針memory *p=q-next; memory *temp=new memory; temp=new memory; / 代表進程 pro 的內(nèi)存塊temp-begin=p-begin; temp-size=size; temp-pro=pro; q-next=temp; if(p-size!=size) / 插入的內(nèi)存塊小于空閑區(qū)塊 p-size=p-size-size; p-begin=temp-begin+temp-size; temp-next=p; else / 插入的內(nèi)存塊等于空閑區(qū)塊 temp-next=p-next
13、; delete p; int ff(int manage,char pro,int size) / 最先適應(yīng)法 memory *p=base; memory *q=p; while(p) / 遍歷內(nèi)存找到第一個適合進程pro 的內(nèi)存塊,保存它的前指針 if(p-sizepro!=0) q=p; p=p-next; else break; if(p=null)return 0; / 沒找到 , 返回 0 else / 找到了 , 返回 1 if(manage=0)p-pro=pro; / 靜態(tài),直接讓進程進駐內(nèi)存else assign(q,pro,size); / 動態(tài),調(diào)用 assign 來
14、給進程 pro 分配 return 1; int bf(int manage,char pro,int size) / 最佳適應(yīng)法 memory *p=base,*temp=null,*q,*front; int min=256; while(p) / 遍歷內(nèi)存找到最佳的內(nèi)存塊,保存它的前指針 if(p-pro=0&p-size=size&minp-size) min=p-size; front=q; temp=p; q=p; p=p-next; if(temp=null)return 0; / 沒找到 , 返回 0 else if(manage=0)temp-pro=pro;
15、 / 靜態(tài),直接讓進程進駐內(nèi)存else assign(front,pro,size); / 動態(tài),調(diào)用assign 來給進程 pro 分配 return 1; int wf(int manage,char pro,int size) / 最壞適應(yīng)法 memory *p=base,*temp=null,*q,*front; int max=0; while(p) / 遍歷內(nèi)存,找到最大的一塊內(nèi)存 if(p-pro=0&p-size=size&maxsize) max=p-size; front=q; temp=p; q=p; p=p-next; if(temp=null)retu
16、rn 0; / 沒找到 , 返回 0 else / 找到了 , 返回 1 if(manage=0)temp-pro=pro; / 靜態(tài),直接讓進程進駐內(nèi)存else assign(front,pro,size); / 動態(tài),調(diào)用assign 來給進程 pro 分配 return 1; int delpro(int manage,char pro) / 撤銷進程,可能要進行內(nèi)存塊的合并 memory *p=base,*q; while(p) / 遍歷內(nèi)存,尋找進程pro if(p-pro!=pro) q=p; p=p-next; else break; if(p=null)return 0; /
17、沒找到 , 返回 0 else / 找到了 , 返回 1 if(manage=0)p-pro=0; /靜態(tài)內(nèi)存,直接撤銷進程,不用內(nèi)存塊合并else / 動態(tài)內(nèi)存,可能要進行內(nèi)存合并,分4 種情況 if(q-pro!=0) if(p-next=null|p-next-pro!=0) / 前后內(nèi)存塊都不是空閑塊p-pro=0; else / 前內(nèi)存塊不是空閑塊,后內(nèi)存塊是空閑塊 q-next=p-next; p-next-begin=p-begin; p-next-size=p-size+p-next-size; delete p; else if(p-next=null|p-next-pro!
18、=0) / 前內(nèi)存塊是空閑塊,后內(nèi)存塊不是空閑塊 q-next=p-next; q-size=q-size+p-size; delete p; else / 前后內(nèi)存塊都是空閑塊 q-next=p-next-next; q-size=q-size+p-size+p-next-size; delete p-next; delete p; return 1; void print(char ch,int begin,int size) / 根據(jù)內(nèi)存塊內(nèi)容,格式化輸入一塊內(nèi)存塊 switch(ch) case o:printf(操作系統(tǒng)區(qū)t%3dkt%3dk%3dkn,size,begin,begi
19、n+size-1);break; case 0 :printf(空閑區(qū)t%3dkt%3dk%3dkn,size,begin,begin+size-1);break; default :printf(進程%c t%3dkt%3dk%3dkn,ch,size,begin,begin+size-1);break; void show() / 格式化顯示內(nèi)存的儲存情況 memory *p=base; int count=1; cout 內(nèi)存現(xiàn)在的儲存情況是:pro,p-begin,p-size); p=p-next; void del_pro(int manage) / 撤銷進程 pro ,調(diào)用 de
20、lpro memory *p=base; char pro,result; coutpro; if(pro=o)cout操作系統(tǒng)不可撤銷endl; else result=delpro(manage,pro); if(result=0)cout沒有找到進程 pro, 撤銷失敗 endl; else cout進程 pro 撤銷成功 endl; void assign_pro(int manage) / 給進程 pro 根據(jù)選擇情況分配內(nèi)存 int size,result=-1; char choose ,pro; coutpro; coutsize; cout 請選擇分配算法:1,最先適應(yīng)法。 2,最佳適應(yīng)法。 3,最壞適應(yīng)法choose; switch(choose) case 1: result=ff(manage,pro,size); break; case 2: result=bf(manage,pro,size); break; case 3: result=wf(manage,pro,size); break; if(result=0)cou
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版智能門窗安全性能檢測與認證合同3篇
- 二零二五版健身俱樂部健身用品定制與銷售合同2篇
- 2025版美術(shù)教師教育公益活動聘用合同協(xié)議4篇
- 二零二五年度醫(yī)療健康領(lǐng)域投資借款合同大全4篇
- 二零二五版摩托車售后服務(wù)網(wǎng)點建設(shè)與運營合同4篇
- 2025年度智能化中央空調(diào)系統(tǒng)安裝及維護服務(wù)合同協(xié)議4篇
- 2025年度可再生能源暖氣供應(yīng)合同范本4篇
- 2025版膩子乳膠漆施工與色彩設(shè)計合同范本3篇
- 2025版高端住宅內(nèi)墻藝術(shù)涂料施工合同范本4篇
- 2025年高校教授學(xué)術(shù)團隊建設(shè)與管理合同4篇
- 高考滿分作文常見結(jié)構(gòu)完全解讀
- 理光投影機pj k360功能介紹
- 六年級數(shù)學(xué)上冊100道口算題(全冊完整版)
- 八年級數(shù)學(xué)下冊《第十九章 一次函數(shù)》單元檢測卷帶答案-人教版
- 帕薩特B5維修手冊及帕薩特B5全車電路圖
- 系統(tǒng)解剖學(xué)考試重點筆記
- 小學(xué)五年級解方程應(yīng)用題6
- 云南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 年月江西省南昌市某綜合樓工程造價指標及
- 作物栽培學(xué)課件棉花
評論
0/150
提交評論