




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實驗報告存儲器的分配與回收算法實現(xiàn)姓 名: 學(xué) 號: 09070009 班 級: 09計算機(jī)1 一、實驗名稱及要求1、實驗名稱:存儲器的分配與回收算法實現(xiàn)2、實驗要求: 學(xué)生應(yīng)正確地設(shè)計有關(guān)的數(shù)據(jù)結(jié)構(gòu)與各個功能模塊,畫出程序的流程圖,編寫程序,程序執(zhí)行結(jié)果應(yīng)正確。3、實驗方式: 學(xué)生通過實驗室的微機(jī)上機(jī),實際調(diào)試程序。4、實驗環(huán)境: Windows操作系統(tǒng)環(huán)境下的個人微機(jī) 或程序設(shè)計語言二、實驗內(nèi)容1 本實驗是模擬操作系統(tǒng)的主存分配,運(yùn)用可變分區(qū)的存儲管理算法設(shè)計主存分配和回收程序,并不實際啟動裝入作業(yè)。2 采用最先適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法分配主存空間。3 當(dāng)一個新作業(yè)要求裝入主
2、存時,必須查空閑區(qū)表,從中找出一個足夠大的空閑區(qū)。若找到的空閑區(qū)大于作業(yè)需要量,這是應(yīng)把它分成二部分,一部分為占用區(qū),加一部分又成為一個空閑區(qū)。4 當(dāng)一個作業(yè)撤離時,歸還的區(qū)域如果與其他空閑區(qū)相鄰,則應(yīng)合并成一個較大的空閑區(qū),登在空閑區(qū)表中。5 運(yùn)行所設(shè)計的程序,輸出有關(guān)數(shù)據(jù)結(jié)構(gòu)表項的變化和內(nèi)存的當(dāng)前狀態(tài)。三、實驗程序#include <iostream.h>#include <malloc.h>#include <stdlib.h>typedef struct FreeLink/定義自由鏈struct FreeLink *prior;char name;i
3、nt start;int size;bool flag;struct FreeLink *next;* ptr,*head;head top;ptr p;void print()/將內(nèi)存分配情況打印到屏幕上p=top;cout<<"*內(nèi)存分配情況表*"<<endl;cout<<"區(qū)號tt"<<"起始位置t"<<"區(qū)間長度t"<<"區(qū)間狀態(tài)t"<<endl;docout<<p->name<&
4、lt;"tt"<<p->start<<"tt"<<p->size<<"tt"if(p->flag=false)cout<<"空閑"<<endl;elsecout<<"已占用"<<endl;p=p->next;while(p!=NULL);void clear()/結(jié)束操作時清空“內(nèi)存”以備其他操作dop=top;top=top->next;free(p);while(to
5、p!=NULL);void asc(ptr &p)/最佳適應(yīng)法的內(nèi)存分配函數(shù)int min;ptr op;FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout<<"請輸入要分配內(nèi)存的進(jìn)程名"<<endl;cin>>fl->name;cout<<"請輸入要分配內(nèi)存的大小"<<endl;cin>>fl->size;min=256;fl->flag=true;doif(p->flag=false&
6、&p->size<=min&&p->size>=fl->size)min=p->size;op=p;p=p->next;while(p!=NULL);if(op->size>fl->size) fl->start=op->start; op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op; fl->prior=op->prior; op->prior-&g
7、t;next=fl; op->prior=fl; goto flag1;if(op->size=fl->size) op->flag=fl->flag; op->name=fl->name; free(fl); goto flag1;cout<<"內(nèi)存過小,分配失??!"<<endl;goto flag2;flag1: cout<<"分配成功!"<<endl;flag2: ;void dec(ptr &p)/最壞適應(yīng)法的內(nèi)存分配函數(shù)int max;ptr op
8、;FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout<<"請輸入要分配內(nèi)存的進(jìn)程名"<<endl;cin>>fl->name;cout<<"請輸入要分配內(nèi)存的大小"<<endl;cin>>fl->size;max=fl->size;fl->flag=true;doif(p->flag=false&&p->size>=max)max=p->size;op=p;p=p-
9、>next;while(p!=NULL);if(op->size>fl->size) fl->start=op->start; op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op; fl->prior=op->prior; op->prior->next=fl; op->prior=fl; goto flag3;if(op->size=fl->size) op->flag=fl-&g
10、t;flag; op->name=fl->name; free(fl); goto flag3;cout<<"內(nèi)存過小,分配失??!"<<endl;goto flag4;flag3: cout<<"分配成功!"<<endl;flag4: ;void splice(ptr &p)/若被操作的內(nèi)存有相鄰空閑區(qū)則將空閑區(qū)拼接合并int x;if(p->prior->flag=false&&p->next->flag=false)x=1;if(p->p
11、rior->flag=false&&p->next->flag=true)|(p->prior->flag=false&&p->next=NULL)x=2;if(p->prior->flag=true&&p->next->flag=false)|(p->prior=NULL&&p->next->flag=false)x=3;if(p->prior->flag=true&&p->next->flag=true)|(p
12、->prior=NULL&&p->next->flag=true)|(p->prior->flag=true&&p->next=NULL)x=4; switch(x)case 1:p->next->prior=p->prior; p->prior->next=p->next; p->prior->size=p->prior->size+p->size+p->next->size; p->prior->next=p->next->
13、;next; if(p->next->next!=NULL)p->next->next->prior=p->next->prior; free(p->next); free(p); break; case 2:if(p->next=NULL) p->prior->next=p->next; else p->next->prior=p->prior; p->prior->next=p->next; p->prior->size=p->prior->size+p-&g
14、t;size; free(p); break;case 3:if(p->prior=NULL) top=p->next; p->next->prior=NULL; p->next->start=p->start; p->next->size=p->next->size+p->size; else p->next->prior=p->prior; p->prior->next=p->next;p->next->start=p->start; p->next->
15、size=p->next->size+p->size; free(p); break;case 4:p->name='' p->flag=false; break;void allocate(ptr &p)/最先適應(yīng)法的內(nèi)存分配函數(shù)FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout<<"請輸入要分配內(nèi)存的進(jìn)程名"<<endl;cin>>fl->name;cout<<"請輸入要分配內(nèi)存的大小"&
16、lt;<endl;cin>>fl->size;fl->flag=true;doif(p->flag=false&&p->size>fl->size) fl->start=p->start; p->start=fl->start+fl->size; p->size=p->size-fl->size; fl->next=p; fl->prior=p->prior; p->prior->next=fl; p->prior=fl; goto a;if
17、(p->flag=false&&p->size=fl->size) p->flag=fl->flag; p->name=fl->name; free(fl); goto a;p=p->next;while(p!=NULL);cout<<"內(nèi)存過小,分配失敗!"<<endl;goto b;a: cout<<"分配成功!"<<endl;b: ;void recover(ptr &p)/內(nèi)存回收函數(shù)char n = ' 'co
18、ut<<"請輸入要回收的內(nèi)存對應(yīng)的進(jìn)程名"cin>>n;do if(p->flag=true&&p->name=n)splice(p); goto c; p=p->next;while(p!=NULL);cout<<"內(nèi)存并未分配給對應(yīng)進(jìn)程,回收失敗!"<<endl;goto d;c: cout<<"內(nèi)存回收成功!"<<endl;d: ;int ffa()/最先適應(yīng)法char choice=' 'print();p
19、tr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb->next=top;pcb->prior=top->prior; top->prior=pcb;pcb->start=top->start;cout<<"請輸入要為系統(tǒng)分配的內(nèi)存塊名"<<endl;cin>>pcb->name;cout<<"請輸入要分配內(nèi)存的大小"<<endl; goto f;e:cout<<"超過內(nèi)存最大容量請重新輸入要
20、分配內(nèi)存的大小"<<endl;f:cin>>pcb->size;if(pcb->size>256) goto e;top->size=top->size-pcb->size;top=pcb;top->flag=true;top->next->start+=top->size;print();while(true)dop=top->next;cout<<"請從下列選項中進(jìn)行選擇"<<endl;cout<<"1.分配內(nèi)存"&
21、lt;<endl;cout<<"2.回收內(nèi)存"<<endl;cout<<"3.結(jié)束操作"<<endl;cout<<"請輸入你的選擇"cin>>choice;while(choice!='1'&&choice!='2'&&choice!='3');switch(choice)case '1':allocate(p);print();break;case '2
22、':recover(p);print();break;case '3':clear();return 0;break;int bfa()/最佳適應(yīng)法char choice=' 'print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb->next=top;pcb->prior=top->prior; top->prior=pcb;pcb->start=top->start;cout<<"請輸入要為系統(tǒng)分配的內(nèi)存塊名"<<e
23、ndl;cin>>pcb->name;cout<<"請輸入要分配內(nèi)存的大小"<<endl; goto h;g:cout<<"超過內(nèi)存最大容量請重新輸入要分配內(nèi)存的大小"<<endl;h:cin>>pcb->size;if(pcb->size>256) goto g;top->size=top->size-pcb->size;top=pcb;top->flag=true;top->next->start+=top->si
24、ze;print();while(true)dop=top->next;cout<<"請從下列選項中進(jìn)行選擇"<<endl;cout<<"1.分配內(nèi)存"<<endl;cout<<"2.回收內(nèi)存"<<endl;cout<<"3.結(jié)束操作"<<endl;cout<<"請輸入你的選擇"cin>>choice;while(choice!='1'&&
25、choice!='2'&&choice!='3');switch(choice)case '1':asc(p);print();break;case '2':recover(p);print();break;case '3':clear();return 0;break;int wfa()/最壞適應(yīng)法char choice=' 'print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb->next=top;pcb->p
26、rior=top->prior; top->prior=pcb;pcb->start=top->start;cout<<"請輸入要為系統(tǒng)分配的內(nèi)存塊名"<<endl;cin>>pcb->name;cout<<"請輸入要分配內(nèi)存的大小"<<endl; goto j;i:cout<<"超過內(nèi)存最大容量請重新輸入要分配內(nèi)存的大小"<<endl;j:cin>>pcb->size;if(pcb->size&g
27、t;256) goto i;top->size=top->size-pcb->size;top=pcb;top->flag=true;top->next->start+=top->size;print();while(true)dop=top->next;cout<<"請從下列選項中進(jìn)行選擇"<<endl;cout<<"1.分配內(nèi)存"<<endl;cout<<"2.回收內(nèi)存"<<endl;cout<<&q
28、uot;3.結(jié)束操作"<<endl;cout<<"請輸入你的選擇"cin>>choice;while(choice!='1'&&choice!='2'&&choice!='3');switch(choice)case '1':dec(p);print();break;case '2':recover(p);print();break;case '3':clear();return 0;break;int main()/主函數(shù)char choice = ' ' ptr free=(FreeLink *)malloc(sizeof(FreeLink); top=free; top->name='' top->start=0; top-
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 差旅服務(wù)定制化解決方案合作協(xié)議
- 車輛抵押反擔(dān)保借款合同解除后的后續(xù)處理
- 建筑行業(yè)常年法律顧問專業(yè)服務(wù)協(xié)議
- 土地利用規(guī)劃保密及實施合同
- 倉儲空間轉(zhuǎn)讓與倉儲管理軟件應(yīng)用合同
- 釣魚艇轉(zhuǎn)讓協(xié)議書范本
- 木房合同協(xié)議書范本
- 生物質(zhì)發(fā)電項目安裝與運(yùn)營管理合同
- 旅游企業(yè)特色旅游辦公用品采購及服務(wù)協(xié)議
- 城市綜合體停車場場地租賃及收費(fèi)管理制度合同
- 智能機(jī)器人介紹課件
- 胎心監(jiān)護(hù)醫(yī)學(xué)宣教
- 2024屆四川省成都市溫江區(qū)八年級語文第二學(xué)期期末達(dá)標(biāo)測試試題含解析
- 電商平臺的運(yùn)營和增長策略
- 家庭安全隱患排查和應(yīng)對策略及方案
- 《塞翁失馬》課件
- 慣性導(dǎo)航與組合導(dǎo)航
- 急性腎盂腎炎疾病查房
- 第九屆全國大學(xué)生化學(xué)實驗邀請賽無機(jī)分析題
- 單位就業(yè)人員登記表
- 《應(yīng)用寫作》(第三版)復(fù)習(xí)思考、案例訓(xùn)練參考答案
評論
0/150
提交評論