




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告存儲(chǔ)器的分配與回收算法實(shí)現(xiàn)姓 名: 學(xué) 號(hào): 09070009 班 級(jí): 09計(jì)算機(jī)1 一、實(shí)驗(yàn)名稱及要求1、實(shí)驗(yàn)名稱:存儲(chǔ)器的分配與回收算法實(shí)現(xiàn)2、實(shí)驗(yàn)要求: 學(xué)生應(yīng)正確地設(shè)計(jì)有關(guān)的數(shù)據(jù)結(jié)構(gòu)與各個(gè)功能模塊,畫出程序的流程圖,編寫程序,程序執(zhí)行結(jié)果應(yīng)正確。3、實(shí)驗(yàn)方式: 學(xué)生通過實(shí)驗(yàn)室的微機(jī)上機(jī),實(shí)際調(diào)試程序。4、實(shí)驗(yàn)環(huán)境: Windows操作系統(tǒng)環(huán)境下的個(gè)人微機(jī) 或程序設(shè)計(jì)語言二、實(shí)驗(yàn)內(nèi)容1 本實(shí)驗(yàn)是模擬操作系統(tǒng)的主存分配,運(yùn)用可變分區(qū)的存儲(chǔ)管理算法設(shè)計(jì)主存分配和回收程序,并不實(shí)際啟動(dòng)裝入作業(yè)。2 采用最先適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法分配主存空間。3 當(dāng)一個(gè)新作業(yè)要求裝入主
2、存時(shí),必須查空閑區(qū)表,從中找出一個(gè)足夠大的空閑區(qū)。若找到的空閑區(qū)大于作業(yè)需要量,這是應(yīng)把它分成二部分,一部分為占用區(qū),加一部分又成為一個(gè)空閑區(qū)。4 當(dāng)一個(gè)作業(yè)撤離時(shí),歸還的區(qū)域如果與其他空閑區(qū)相鄰,則應(yīng)合并成一個(gè)較大的空閑區(qū),登在空閑區(qū)表中。5 運(yùn)行所設(shè)計(jì)的程序,輸出有關(guān)數(shù)據(jù)結(jié)構(gòu)表項(xiàng)的變化和內(nèi)存的當(dāng)前狀態(tài)。三、實(shí)驗(yàn)程序#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ū)號(hào)tt"<<"起始位置t"<<"區(qū)間長(zhǎng)度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é)束操作時(shí)清空“內(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<<"請(qǐng)輸入要分配內(nèi)存的進(jìn)程名"<<endl;cin>>fl->name;cout<<"請(qǐng)輸入要分配內(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<<"請(qǐng)輸入要分配內(nèi)存的進(jìn)程名"<<endl;cin>>fl->name;cout<<"請(qǐng)輸入要分配內(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<<"請(qǐng)輸入要分配內(nèi)存的進(jìn)程名"<<endl;cin>>fl->name;cout<<"請(qǐng)輸入要分配內(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<<"請(qǐng)輸入要回收的內(nèi)存對(duì)應(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)存并未分配給對(duì)應(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<<"請(qǐng)輸入要為系統(tǒng)分配的內(nèi)存塊名"<<endl;cin>>pcb->name;cout<<"請(qǐng)輸入要分配內(nèi)存的大小"<<endl; goto f;e:cout<<"超過內(nèi)存最大容量請(qǐng)重新輸入要
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<<"請(qǐng)從下列選項(xiàng)中進(jìn)行選擇"<<endl;cout<<"1.分配內(nèi)存"&
21、lt;<endl;cout<<"2.回收內(nèi)存"<<endl;cout<<"3.結(jié)束操作"<<endl;cout<<"請(qǐng)輸入你的選擇"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<<"請(qǐng)輸入要為系統(tǒng)分配的內(nèi)存塊名"<<e
23、ndl;cin>>pcb->name;cout<<"請(qǐng)輸入要分配內(nèi)存的大小"<<endl; goto h;g:cout<<"超過內(nèi)存最大容量請(qǐng)重新輸入要分配內(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<<"請(qǐng)從下列選項(xiàng)中進(jìn)行選擇"<<endl;cout<<"1.分配內(nèi)存"<<endl;cout<<"2.回收內(nèi)存"<<endl;cout<<"3.結(jié)束操作"<<endl;cout<<"請(qǐng)輸入你的選擇"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<<"請(qǐng)輸入要為系統(tǒng)分配的內(nèi)存塊名"<<endl;cin>>pcb->name;cout<<"請(qǐng)輸入要分配內(nèi)存的大小"<<endl; goto j;i:cout<<"超過內(nèi)存最大容量請(qǐng)重新輸入要分配內(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<<"請(qǐng)從下列選項(xiàng)中進(jìn)行選擇"<<endl;cout<<"1.分配內(nèi)存"<<endl;cout<<"2.回收內(nèi)存"<<endl;cout<<&q
28、uot;3.結(jié)束操作"<<endl;cout<<"請(qǐng)輸入你的選擇"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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國外周血管支架項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國桐木項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國柬埔寨農(nóng)業(yè)開發(fā)項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國激光診斷儀器項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國進(jìn)口肉類項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國高精度衛(wèi)星導(dǎo)航項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 畢業(yè)論文社會(huì)實(shí)踐報(bào)告
- 樂理調(diào)試簡(jiǎn)譜試題及答案
- 區(qū)塊鏈金融萬億新賽道:Gas+費(fèi)機(jī)制革新、穩(wěn)定幣破局+SWIFT+與資產(chǎn)代幣化商業(yè)圖譜
- 電子支付交易數(shù)據(jù)統(tǒng)計(jì)表格模板
- 俄羅斯勝利日祝福郵件英語
- 幼兒園小班健康教育保護(hù)眼睛課件
- 中華人民共和國標(biāo)準(zhǔn)施工招標(biāo)文件版
- 西師版四年級(jí)下冊(cè)100道口算題大全(全冊(cè)齊全)
- 皮膚型紅斑狼瘡診療指南(2023年版)
- 高中化學(xué)競(jìng)賽預(yù)賽試卷
- 檔煙垂壁驗(yàn)收規(guī)范
- 《視覺傳達(dá)設(shè)計(jì)研究5000字(論文)》
- YY/T 0676-2008眼科儀器視野計(jì)
- 通信工程建設(shè)強(qiáng)制性標(biāo)準(zhǔn)條文培訓(xùn)材料(第1-3章)
- SB/T 10654-2012茶館經(jīng)營服務(wù)規(guī)范
評(píng)論
0/150
提交評(píng)論