




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實驗報告操作系統(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)的主存分配,運用可變分區(qū)的存儲管理算法設(shè)計主存分配和回收程序,并不實際啟動裝入作業(yè)。2 采用最先適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法分配主存空間。3 當(dāng)一個
2、新作業(yè)要求裝入主存時,必須查空閑區(qū)表,從中找出一個足夠大的空閑區(qū)。若找到的空閑區(qū)大于作業(yè)需要量,這是應(yīng)把它分成二部分,一部分為占用區(qū),加一部分又成為一個空閑區(qū)。4 當(dāng)一個作業(yè)撤離時,歸還的區(qū)域如果與其他空閑區(qū)相鄰,則應(yīng)合并成一個較大的空閑區(qū),登在空閑區(qū)表中。5 運行所設(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;cha
3、r name;int 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->n
4、ame<<"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);
5、while(top!=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=fa
6、lse&&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->
7、prior->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 ma
8、x;ptr op;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;o
9、p=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->next=fl; op->prior=fl; goto flag3;if(op->size=fl->size) op->fl
10、ag=fl->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
11、(p->prior->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=
12、true)|(p->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->
13、next->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->s
14、ize+p->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->n
15、ext->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、小"<<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; g
17、oto a;if(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 = '
18、 'cout<<"請輸入要回收的內(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=' 'p
19、rint();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)存塊名"<<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、存"<<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;cas
22、e '2':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)存塊名"&
23、lt;<endl;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+=to
24、p->size;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'&a
25、mp;&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;p
26、cb->prior=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-&g
27、t;size>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&l
28、t;<"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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鏈家房屋買賣定金支付及退還標(biāo)準(zhǔn)協(xié)議
- 二零二五年度住房租賃補(bǔ)貼擔(dān)保服務(wù)合同
- 二零二五年度蘇州市教育機(jī)構(gòu)用工企業(yè)勞動合同書
- 二零二五年度云計算資源合作共享合同
- 2025年度電子商務(wù)平臺招防范合同法律風(fēng)險合作協(xié)議
- 2025年度涂料班組涂料行業(yè)市場分析咨詢合同
- 二零二五年度特色日租房短租體驗協(xié)議書
- 二零二五年度貸款居間代理及金融科技創(chuàng)新應(yīng)用合同
- 2025年度高端合同事務(wù)律師服務(wù)合同
- 2025年度智慧交通項目提前終止合同及交通設(shè)施移交協(xié)議
- 司機(jī)安全駕駛培訓(xùn)課件
- 硬化性肺泡細(xì)胞瘤-課件
- 簡明新疆地方史趙陽
- 狹窄性腱鞘炎中醫(yī)臨床路徑及表單
- Q∕SY 19001-2017 風(fēng)險分類分級規(guī)范
- 智慧消防綜合解決方案
- 市場營銷組合策略及營銷戰(zhàn)略課件
- 信息技術(shù)基礎(chǔ)ppt課件(完整版)
- DGJ 08-70-2021 建筑物、構(gòu)筑物拆除技術(shù)標(biāo)準(zhǔn)
- 2022年義務(wù)教育語文課程標(biāo)準(zhǔn)(2022版)解讀【新課標(biāo)背景下的初中名著閱讀教學(xué)質(zhì)量提升思考】
- 屋面網(wǎng)架結(jié)構(gòu)液壓提升施工方案(50頁)
評論
0/150
提交評論