版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rè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 .當(dāng)進程對內(nèi)存進行空間申請操作時,模型采用一定的策略(如:首先利用可 用的內(nèi)存進行分配,如果空間不夠時,進行內(nèi)存緊縮或其他方案進行處理)對進程 給予指定的內(nèi)存分配
2、;3 .從系統(tǒng)開始啟動到多個進程參與申請和運行時,進程最少要有3個以上,每個執(zhí)行申請的時候都要能夠?qū)ο到y(tǒng)當(dā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ū)的當(dāng)前狀態(tài)。在基于鏈表的存儲管理中,當(dāng)一個新的進程到來時,需
3、要為它分配內(nèi)存空間,即為它尋找 某個空閑分區(qū),該分區(qū)的大小必須大于或等于進程的大小.最先匹配法:假設(shè)新進程白大小為 M,那么從鏈表的首節(jié)點開始,將每一個空閑節(jié)點 的大小與M相比較,直到找到合適的節(jié)點.這種算法查找的節(jié)點很少,因而速度很快.最佳匹配算法:搜索整個鏈表,將能夠裝得下該進程的最小空閑區(qū)分配出去.最壞匹配法:在每次分配的時候,總是將最大的那個空閑區(qū)切去一部分,分配給請 求者.它的依據(jù)是當(dāng)一個很大的空閑區(qū)被切割成一部分后,可能仍然是一個比較大的空閑區(qū),從而避免了空閑區(qū)越分越小的問題 .(2)設(shè)計表示:分區(qū)結(jié)點設(shè)計:template<class T> class ChainNo
4、defriend Chain<T>public:char pro; /內(nèi)存塊存放的程序名"o”代表操作系統(tǒng)代表空閑區(qū)T size; /內(nèi)存塊的大小T begin; /內(nèi)存塊起始地址ChainNode<T> *link; 下一個內(nèi)存塊;template<class T>分區(qū)鏈表設(shè)計:class Chainpublic:Chain()first=NULL;Chain();int ff(int manage,char pro,int size);void assign(ChainNode<T> *q,char pro,int size);/
5、int bf(int manage,char pro,int size);int wf(int manage,char pro,int size);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<T> *first;ChainNode<T> *p;(3)詳細設(shè)計表示:.childmenM(呼)Vmanashowo/ 制/菜、< 選擇
6、情況分配內(nèi)存二晶愀(咚密11/ff(ma na|M報口】bf(manage,pro,size)【附錄】 . pro,size)#include'<iostream.h>#include <stdio.h>#include <process.h>template<class T>class ChainNode動態(tài)分配內(nèi)存/最佳適應(yīng)法/最壞適應(yīng)法/撤銷進程,可能要進>/給進程pro根據(jù)/wf(manage, 一)friend Chain<T>public:char pro; 內(nèi)存塊存放的程序名"o"代表操
7、作系統(tǒng)代表空閑區(qū)T size; 內(nèi)存塊的大小T begin; 內(nèi)存塊起始地址ChainNode<T> *link; 下一個內(nèi)存塊; template<class T> class Chain public: Chain() first=NULL; Chain(); int ff(int manage,char pro,int size);void assign(ChainNode<T> *q,char pro,int size);/ 動態(tài)分配內(nèi)存int bf(int manage,char pro,int size);/ 最佳適應(yīng)法int wf(int ma
8、nage,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<T> *first;ChainNode<T> *p;memory *base;代表內(nèi)存,一個頭指針,內(nèi)存總大小為256k/int snum尸20,50,30,45,54,52;/void assign(memor
9、y *q,char pro,int size);void init(int manage)/ 內(nèi)存的初始化memory *p,*q;if(base!=NULL)/這一塊是釋放鏈表 p=base; while(p) q=p->next; delete p;p=q;base=new memory; / 操作系統(tǒng),大小 5k,起始地址是 Okbase->begin=O;base->pro='o'base->size=5;if(manage=O) /靜態(tài)內(nèi)存,初始化 7個內(nèi)存塊,第一個內(nèi)存塊是操作系統(tǒng)p=base;q=new memory;q->begin
10、=5;q->pro=0;q->size=20; p->next=q;P=q;q=new memory; q->begin=25;q->pro=0;q->size=50; p->next=q;P=q;q=new memory; q->begin=75;q->pro=0;q->size=30; p->next=q;P=q;q=new memory; q->begin=105;q->pro=0;q->size=45; p->next=q;P=q;q=new memory; q->begin=150;q-&
11、gt;pro=0;q->size=54; p->next=q;P=q;q=new memory;/空閑塊1,大小/空閑塊2,大小/空閑塊3,大小/空閑塊4,大小/空閑塊5,大小/空閑塊6,大小20,起始地址5k50,起始地址25k30,起始地址75k45,起始地址105k54,起始地址150k52,起始地址204kq->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,起始地址是 5kp->begin=5; p-
12、>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不為空/因為要進行插入操作,所以傳的是要分配內(nèi)存塊的前指針memory *p=q->next;memory *temp=new memory;temp=new memory;/代表進程 pro的內(nèi)存塊temp->begin=p->begin; temp->size
13、=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; delete p; int ff(int manage,char pro,int size)/ 最先適應(yīng)法 memory *p=base; memory *q=p; while(p)/遍
14、歷內(nèi)存找到第一個適合進程pro的內(nèi)存塊,保存它的前指針 if(p->size<size|p->pro!=0) q=p;p=p->next;else break;if(p=NULL)return 0; else/沒找到,返回0找到了,返回1if(manage=0)p->pro=pro;else assign(q,pro,size);return 1;int bf(int manage,char pro,int size)memory *p=base,*temp=NULL,*q,*front;int min=256;/靜態(tài),直接讓進程進駐內(nèi)存/動態(tài),調(diào)用assign來
15、給進程pro分配/最佳適應(yīng)法while(p) /遍歷內(nèi)存找到最佳的內(nèi)存塊,保存它的前指針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/沒找到,返回0if(manage=0)temp->pro=pro; else assign(front,pro,size);return 1;int wf(int manage,char pro,int size)
16、memory *p=base,*temp=NULL,*q,*front;int max=0;靜態(tài),直接讓進程進駐內(nèi)存/動態(tài),調(diào)用assign來給進程pro分配/最壞適應(yīng)法while(p)/遍歷內(nèi)存,找到最大的一塊內(nèi)存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;
17、靜態(tài),直接讓進程進駐內(nèi)存else assign(front,pro,size);return 1;int delpro(int manage,char pro)/動態(tài),調(diào)用assign來給進程pro分配/撤銷進程,可能要進行內(nèi)存塊的合并memory *p=base,*q;while(p)if(p->pro!=pro)q=p;p=p->next;else break;if(p=NULL)return 0;else/遍歷內(nèi)存,尋找進程 pro/沒找到,返回0/找到了,返回1if(manage=0)p->pro=0;else靜態(tài)內(nèi)存,直接撤銷進程,不用內(nèi)存塊合并動態(tài)內(nèi)存,可能要進行
18、內(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!=0)/ 前內(nèi)存塊是空閑塊,后內(nèi)存塊不是空閑塊q
19、->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(&
20、quot;操作系統(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()/格式化顯示內(nèi)存的儲存情況 memory *p=base; int count=1; cout<<"內(nèi)存
21、現(xiàn)在的儲存情況是:"<<endl;printf("塊號t內(nèi)容tt 大小t起始-結(jié)束地址n");while(p) printf(" %2d ",count+);print(p->pro,p->beginp>size);p=p->next;void del_pro(int manage)/ 撤銷進程 pro ,調(diào)用 delpromemory *p=base;char pro,result;cout<<"請輸入你要撤銷的進程的名字:"cin>>pro;if(pro=
22、9;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ù)選擇情況分配
23、內(nèi)存int size,result=-1;char choose ,pro;cout<<"請輸入進程的名字:"; cin>>pro;cout<<"請輸入進程請求的內(nèi)存大小:”; cin>>size;cout<<"請選擇分配算法:1,最先適應(yīng)法。2,最佳適應(yīng)法。3,最壞適應(yīng)法"<<endl; cin>>choose;switch(choose) case '1':result=ff(manage,pro,size); break;case '
24、;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 childmenu(int manage)/ 子菜單char choice;init(manage
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版桉樹種植基地土壤污染防治合同3篇
- 2025年度物業(yè)管理公司兼職人員勞動合同書3篇
- 2025年微商代理品牌授權(quán)與分銷渠道建設(shè)合同3篇
- 2025年分期付款地毯家具購買協(xié)議
- 2025年體育特許經(jīng)營協(xié)議
- 2025年版建筑用鋼材采購及施工配套服務(wù)合同范本4篇
- 2025年人事代理協(xié)議范本范例
- 2025年度毛毯原材料環(huán)保認(rèn)證采購合同4篇
- 2025年勞務(wù)派遣用工福利待遇協(xié)議
- 2025年私募基金財產(chǎn)代持及爭議解決機制協(xié)議3篇
- (正式版)QC∕T 1206.1-2024 電動汽車動力蓄電池?zé)峁芾硐到y(tǒng) 第1部分:通 用要求
- 《煤礦地質(zhì)工作細則》礦安﹝2024﹞192號
- 平面向量及其應(yīng)用試題及答案
- 2024高考復(fù)習(xí)必背英語詞匯3500單詞
- 消防控制室值班服務(wù)人員培訓(xùn)方案
- 《貴州旅游介紹》課件2
- 2024年中職單招(護理)專業(yè)綜合知識考試題庫(含答案)
- 無人機應(yīng)用平臺實施方案
- 挪用公款還款協(xié)議書范本
- 事業(yè)單位工作人員年度考核登記表(醫(yī)生個人總結(jié))
- 盾構(gòu)隧道施工數(shù)字化與智能化系統(tǒng)集成
評論
0/150
提交評論