下載本文檔
版權(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í)題目:存管理模型的設(shè)計與實現(xiàn)【需求規(guī)格說明】對存的可變分區(qū)申請采用鏈表法管理進行模擬實現(xiàn)。要求:1對于給定的一個存儲空間自己設(shè)計數(shù)據(jù)結(jié)構(gòu)進行管理,可以使用單個鏈表,也可以使用多個鏈表,自己負責存儲空間的所有管理組織,要求采用分頁方式(指定單元大小為頁,如 4K, 2K,進程申請以頁為單位)來組織基本容;2當進程對存進行空間申請操作時,模型采用一定的策略(如:首先利用可 用的存進行分配,如果空間不夠時,進行存緊縮或其他方案進行處理)對進程 給予指定的存分配;3從系統(tǒng)開始啟動到多個
2、進程參與申請和運行時,進程最少要有3個以上,每個執(zhí)行申請的時候都要能夠?qū)ο到y(tǒng)當前的存情況進行查看的接口;4對存的申請進行存分配,對使用過的空間進行回收,對給定的某種頁面調(diào) 度進行合理的頁面分配。5利用不同的顏色代表不同的進程對存的占用情況,動態(tài)更新這些信息?!舅惴ㄔO(shè)計】(1)設(shè)計思想:通過建立一個鏈表,來描述已分配和空閑的存分區(qū)。對于每一個分區(qū),它可能存放了某個進程,也可能是兩個進程間的空閑區(qū)。鏈表中的每一個結(jié)點, 分別描述了一個存分區(qū),包括它的起始地址、長度、指向下一個結(jié)點的指針以及分區(qū)的當前狀態(tài)。在基于 鏈表的存儲管理中,當一個新的進程到來時,需要為它分配存空間,即為它尋找某個空閑 分區(qū),
3、該分區(qū)的大小必須大于或等于進程的大小最先匹配法:假設(shè)新進程的大小為 M,那么從鏈表的首節(jié)點開始,將每一個空閑節(jié)點 的大小與M相比較,直到找到合適的節(jié)點.這種算法查找的節(jié)點很少,因而速度很快最佳匹配算法:搜索整個鏈表,將能夠裝得下該進程的最小空閑區(qū)分配出去最壞匹配法:在每次分配的時候,總是將最大的那個空閑區(qū)切去一部分,分配給請求者它的依據(jù)是當一個很大的空閑區(qū)被切割成一部分后,可能仍然是一個比較大的空閑區(qū),從而避免了空閑區(qū)越分越小的問題(2)設(shè)計表示:分區(qū)結(jié)點設(shè)計:templatevclass T>class ChainN odefrie nd Chainv T>public:char
4、 pro; /存塊存放的程序名"o"代表操作系統(tǒng)代表空閑區(qū)T begi n; /存塊起始地址Chai nN ode<T> *li nk; /下一個存塊;templatevclass T>分區(qū)鏈表設(shè)計:class Chai npublic:Chai n()first=NULL;Chai n();int ff(int man age,char pro,i nt size);動態(tài)分配存/最佳適應(yīng)法/最壞適應(yīng)法/撤銷進程,可能要進void assig n(Chai nN ode<T> *q,char pro,i nt size);/ int bf(i
5、nt man age,char pro,i nt size); int wf(int man age,char pro,i nt size);int delpro(i nt man age,char pro);行存塊的合并void del_pro(i nt man age);void in it( int man age);/ 存的初始化void assig n_pro(i nt man age) ; / public:Chai nN ode<T> *first;Chai nN ode<T> *p;【調(diào)試報告】叵)$3E9 C:Wirdowss)rstem32 cmd.
6、exe4441 入入知0 0 5 4 25 3 4 5 5,5hnk、2況區(qū) 昱內(nèi) 衽熾嬴區(qū)區(qū)區(qū)區(qū)區(qū)區(qū)敘弱 儲內(nèi)爲閃閑閑閑閑罰噸 的操空空M:工空贓 鏗齟 野1 2 345 6 2迄建撤返 TJhs Lfw* 、 、 、起始結(jié)束地址Sk" 4k 5k* 24k 25k" 74k ?5kTB4k 105kl49k 150k203k 294k"255k曙乗蒜命大小謫選擇分配算注% 初繼 M璉 %任 二/1匸E9 C:Wircbwssysiem52cmd.exe況區(qū)情統(tǒng)2區(qū)區(qū)區(qū)區(qū)區(qū)儲內(nèi)的曇空空空空空八在 操狽 -半最先適應(yīng)法丁 2,最佳適應(yīng)疾。3,最士了適©
7、S3分錄 舟B 聲進上【缸立銷回 孕號 矍撤返 右£ 丄234562迫 內(nèi)塊 諳I卜 kkkkkkh5 0 0 0 5 4 2X2 5 3 4 5 5起始-結(jié)朿地址Dk 4k5k“ 24k25k* 74k75kl04k 105kl49k ®k"20?k 204k"255k爼幕蕭蘇大小:請選擇分配算法:丄.最尢適應(yīng)法2,最咗適應(yīng):去。3, J憊回丄起始結(jié)束地址0k" 4KR動態(tài)分配 內(nèi)存現(xiàn)它的儲妄情況甦大小bh1 操住糸統(tǒng)匡2 空I耒反塞目錄 內(nèi)存將秋初始他I星的名字皿屋W策的內(nèi)存大小二請刪勁配算法:丄,最兀査應(yīng)法=乙最:t適應(yīng)去。頭最壞適甩 二
8、:Wi r d 3wssy5te m 3 2 cmd.exeE 謝【附錄】#in elude viostream.h>#inelude <stdio.h>#i nclude <proeess.h>templatevclass T>class ChainN odefrie nd Chainv T>public:char pro; /存塊存放的程序名"o"代表操作系統(tǒng)代表空閑區(qū)T size; /存塊的大小T begi n; /存塊起始地址Chai nN ode<T> *li nk; /下一個存塊;templatevclass
9、 T>class Chai npublic:Chai n()first=NULL;Chai n();/ 動態(tài)分配存/ 最佳適應(yīng)法/ 最壞適應(yīng)法/ 撤銷進程,可能要進行存int ff(int manage,char pro,int size);void assign(ChainNode<T> *q,char pro,int size); int bf(int manage,char pro,int size); int wf(int manage,char pro,int size);int delpro(int manage,char pro);塊的合并void del_pr
10、o(int manage);void init(int manage);/ 存的初始化void assign_pro(int manage) ; /public:ChainNode<T> *first;ChainNode<T> *p;memory *base; / 代表存,一個頭指針 , 存總大小為 256k /int snum=20,50,30,45,54,52;/void assign(memory *q,char pro,int size); void init(int manage) / 存的初始化 memory *p,*q;if(base!=NULL) / 這
11、一塊是釋放鏈表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)存,初始化 7 個存塊,第一個存塊是操作系統(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 memo
12、ry; q->begin=25; q->pro=0; q->size=50; p->next=q;p=q;/ 空閑塊 2,大小 50,起始地址 25kq=new memory; q->begin=75; q->pro=0; q->size=30; p->next=q;p=q;/ 空閑塊 3,大小 30,起始地址 75kq=new memory; q->begin=105; q->pro=0; q->size=45;/ 空閑塊 4,大小 45,起始地址 105kp->next=q;p=q;q=new memory; q-&g
13、t;begin=150; q->pro=0; q->size=54; p->next=q;p=q;/ 空閑塊 5,大小 54,起始地址 150kq=new memory; q->begin=204; q->pro=0; q->size=52; p->next=q; q->next=NULL;elsep=new memory; p->begin=5; p->pro=0;/ 空閑塊 6,大小 52,起始地址 204k/ 動態(tài)存,只有一個大的存塊/ 空閑塊 251k, 起始地址是 5kp->size=251;p->next=NU
14、LL;base->next=p;void assign(memory *q,char pro,int size) / 動態(tài),給進程 pro 在存塊 q->next 上分配 size 大小, q 不為空且 q->next 不為空 / 因為要進行插入操作,所以傳 的是要分配存塊的前指針memory *p=q->next;memory *temp=new memory;temp=new memory; / 代表進程 pro 的存塊 temp->begin=p->begin;temp->size=size;temp->pro=pro;q->next
15、=temp;if(p->size!=size) / 插入的存塊小于空閑區(qū)塊p->size=p->size-size; p->begin=temp->begin+temp->size;temp->next=p;else / 插入的存塊等于空閑區(qū)塊temp->next=p->next;delete p;int ff(int manage,char pro,int size)/ 最先適應(yīng)法memory *p=base;memory *q=p;while(p) / 遍歷存找到第一個適合進程 pro 的存塊,保存它 的前指針if(p->size
16、<size|p->pro!=0)q=p;p=p->next;else break;if(p=NULL)return 0; / 沒找到 , 返回 0else / 找到了 , 返回 1 if(manage=0)p->pro=pro;/ 靜態(tài),直接讓進程進駐存else assign(q,pro,size);/ 動態(tài),調(diào)用 assign 來給進程 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) /
17、遍歷存找到最佳的存塊,保存它的前指針 if(p->pro=0&&p->size>=size&&min>p->size) min=p->size; front=q; temp=p;q=p;p=p->next;if(temp=NULL)return 0; else/ 沒找到 , 返回 0 if(manage=0)temp->pro=pro; else assign(front,pro,size);return 1;int wf(int manage,char pro,int size)memory *p=base,*t
18、emp=NULL,*q,*front;/ 靜態(tài),直接讓進程進駐存/ 動態(tài),調(diào)用 assign 來給進程 pro 分配/ 最壞適應(yīng)法while(p)/ 遍歷存,找到最大的一塊存int max=0; if(p->pro=0&&p->size>=size&&max<p->size) max=p->size;front=q;temp=p;q=p; p=p->next;if(temp=NULL)return 0; else/ 沒找到 , 返回 0/ 找到了 , 返回 1if(manage=0)temp->pro=pro; e
19、lse assign(front,pro,size);return 1;int delpro(int manage,char pro) 合并/ 靜態(tài),直接讓進程進駐存/ 動態(tài),調(diào)用 assign 來給進程 pro 分配/ 撤銷進程,可能要進行存塊的memory *p=base,*q; while(p)if(p->pro!=pro)q=p; p=p->next;else break; if(p=NULL)return 0; else/ 遍歷存,尋找進程 pro/ 沒找到 , 返回 0/ 找到了 , 返回 1 if(manage=0)p->pro=0; / else靜態(tài)存,直接撤
20、銷進程,不用存塊合并/ 動態(tài)存,可能要進行存合并,分 4 種情況if(q->pro!=0)if(p->next=NULL|p->next->pro!=0)/ 前后存塊都不是空閑塊p->pro=0;else/ 前存塊不是空閑塊,后存塊是空閑塊q->next=p->next;p->next->begin=p->begin;p->next->size=p->size+p->next->size;delete p;elseif(p->next=NULL|p->next->pro!=0)/ 前存塊
21、是空閑塊,后存塊不是空閑塊q->next=p->next; q->size=q->size+p->size; delete p;else / 前后存塊都是空閑塊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ù)存塊容,格式化輸入一塊存塊switch(ch)case 'o':
22、printf(" 操作系統(tǒng)區(qū) t%3dkt%3dk%3dkn",size,begin,begin+size-1);break;case 0 :printf("空閑區(qū)t%3dkt%3dk%3dkn",size,begin,begin+size-1);break;default :printf("進程 %ct%3dkt%3dk%3dkn",ch,size,begin,begin+size-1);break;void show() / 格式化顯示存的儲存情況memory *p=base;int count=1;cout<<&qu
23、ot; 存現(xiàn)在的儲存情況是: "<<endl;printf(" 塊號t 容tt 大小t起始-結(jié)束地址n");while(p)printf(" %2d",count+);print(p->pro,p->begin,p->size); p=p->next;void del_pro(int manage)/ 撤銷進程 pro ,調(diào)用 delpromemory *p=base;char pro,result;cout<<" 請輸入你要撤銷的進程的名字: "cin>>pro;
24、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 man
25、age) / 給進程 pro 根據(jù)選擇情況分配存int size,result=-1;char choose ,pro;cout<<" 請輸入進程的名字 :"cin>>pro;cout<<" 請輸入進程請求的存大小 :"cin>>size;cout<<" 請選擇分配算法: 1,最先適應(yīng)法。 2,最佳適應(yīng)法。 3,最壞適應(yīng)法 "<<endl;cin>>choose;switch(choose)case '1': result=ff(man
26、age,pro,size); break;case '2':result=bf(manage,pro,size);break;case '3':result=wf(manage,pro,size);break;if(result=0)cout<<" 進程 "<<pro<<" 分配失敗 "<<endl;else if(result=1)cout<<"進程 "<<pro<<" 分配成功 "<<endl;else cout<<" 輸入錯誤 "<<endl;void chil
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 泰山科技學(xué)院《道路交通安全》2024-2025學(xué)年第一學(xué)期期末試卷
- 西安交通大學(xué)《賽事專題設(shè)計》2024-2025學(xué)年第一學(xué)期期末試卷
- 黑龍江司法警官職業(yè)學(xué)院《日志審計與分析》2024-2025學(xué)年第一學(xué)期期末試卷
- 商丘醫(yī)學(xué)高等??茖W(xué)校《創(chuàng)業(yè)管理》2024-2025學(xué)年第一學(xué)期期末試卷
- 濰坊食品科技職業(yè)學(xué)院《油氣藏增產(chǎn)技術(shù)》2024-2025學(xué)年第一學(xué)期期末試卷
- 二零二五年度住宅電路安裝工程勞務(wù)合同范本
- 2025版智能監(jiān)控設(shè)備銷售與安裝監(jiān)理合同
- 項目管理流程全解析及模板
- 教育系統(tǒng)教學(xué)用品采購及驗收標準
- 餐飲連鎖品牌食品質(zhì)量統(tǒng)一標準
- 《北京傳統(tǒng)美食》課件
- 0~36個月兒童中醫(yī)藥健康管理服務(wù)技術(shù)規(guī)范
- 《動物解剖學(xué)》課件
- 鐵道概論(第八版)佟立本主編
- 衛(wèi)生院家庭醫(yī)生簽約服務(wù)考核表
- 智慧零碳園區(qū)解決方案
- 護士長夜查房記錄表
- 重癥患者的容量管理
- 長江三峽水利樞紐施工方案
- 中西醫(yī)執(zhí)業(yè)醫(yī)師-綜合筆試-中西醫(yī)結(jié)合外科學(xué)-第二十三單元泌尿與男性生殖系統(tǒng)疾病
- 高中化學(xué)第一課課件高一上學(xué)期化學(xué)人教版
評論
0/150
提交評論