




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
分區(qū)存儲(chǔ)管理模擬實(shí)驗(yàn)報(bào)告分區(qū)存儲(chǔ)管理模擬實(shí)驗(yàn)報(bào)告了解動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法,加深對(duì)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式及其實(shí)現(xiàn)技術(shù)的理解。2.實(shí)驗(yàn)內(nèi)容用C語言或Pascal語言分別實(shí)現(xiàn)采用首次適應(yīng)算法和最佳適應(yīng)算法的動(dòng)態(tài)分區(qū)分配過程Allocate()和回收過程Free()。其中,空閑分區(qū)采用空閑分區(qū)鏈來組織,內(nèi)存分配時(shí),優(yōu)先使用空閑區(qū)低地址部分的空假設(shè)初始狀態(tài),可用內(nèi)存空間為640KB,作業(yè)請(qǐng)求序列如下(也可以編要求每次分配和回收后顯示出空閑區(qū)鏈的情況。如果不能為作業(yè)的請(qǐng)求進(jìn)行內(nèi)存分配,給出相應(yīng)的提示信息。3.實(shí)驗(yàn)分析和思考采用首次適應(yīng)算法和最佳適應(yīng)算法,對(duì)內(nèi)存的分配和回收速度有什么影詳細(xì)設(shè)計(jì)首次適應(yīng)算法:當(dāng)要分配內(nèi)存空間時(shí),就查表,在各空閑區(qū)中查找滿足大小要求的可用塊。只要找到第一個(gè)足以滿足要球的空閑塊就停止查找,并把它分配出去;如果該空閑空間與所需空間大小一樣,則從空閑表中取消該項(xiàng);如果還有剩余,則余下的部分仍留在空閑表中,但應(yīng)修改分區(qū)大小和分區(qū)始址。最佳適應(yīng)算法:當(dāng)要分配內(nèi)存空間時(shí),就查找空閑表中滿足要求的空閑直按分配;若有剩余塊,則仍保留該余下的空閑分區(qū),并修改分區(qū)大小的起始地址。內(nèi)存回收:將釋放作業(yè)所在內(nèi)存塊的狀態(tài)改為空閑狀態(tài),刪除其作業(yè)名,設(shè)置為空。并判斷該空閑塊是否與其他空閑塊相連,若釋放的內(nèi)存空間與空閑塊相連時(shí),則合并為同一個(gè)空閑塊,同時(shí)修改分區(qū)大小及起始地址。typedefstructfreearea{}ElemType;定義一個(gè)空閑區(qū)說明表結(jié)構(gòu),每申請(qǐng)一個(gè)作業(yè),改作業(yè)便具有此結(jié)構(gòu)體typedefstructDuLNode{}DuLNode,*DuLinkList;定義一個(gè)雙向鏈表StatusInitblock(){}開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表,通過雙向鏈表把申請(qǐng)的作業(yè)鏈接起來,作業(yè)的插入和刪除,和鏈表中節(jié)點(diǎn)的插入和刪除類似。雙向鏈表如圖1所示StatusFirst_fit(intID,intrequest){}傳入作業(yè)名及申請(qǐng)量采用首次適應(yīng)算法實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分區(qū)分配的模擬,初始態(tài)640KB,只是一個(gè)虛態(tài),每申請(qǐng)成功一個(gè)作業(yè),便相應(yīng)的640KB做相應(yīng)的減少,同過雙向鏈表模擬主存的分配情況。內(nèi)存分配流程如圖2所示Statusfree(intID)傳過來需要回收的分區(qū)號(hào)實(shí)現(xiàn)分區(qū)的回收,對(duì)不同情況采取不同的處理voidshow()顯示當(dāng)前主存的分配情況源程序//----------------------------------------------------------------//---------動(dòng)態(tài)分區(qū)分配方式的模擬---------//----------------------------------------------------------------#include<iostream.h>#include<stdlib.h>#defineFree0//空閑狀態(tài)#defineBusy1//已用狀態(tài)#defineOK1//完成#defineERROR0//出錯(cuò)#defineMAX_length640//最大內(nèi)存空間為640KBtypedefintStatus;typedefstructfreearea//定義一個(gè)空閑區(qū)說明表結(jié)構(gòu){intID;//分區(qū)號(hào)longsize;//分區(qū)大小longaddress;//分區(qū)地址intstate;//狀態(tài)}ElemType;//----------線性表的雙向鏈表存儲(chǔ)結(jié)構(gòu)------------typedefstructDuLNode//doublelinkedlist{ElemTypedata;structDuLNode*prior;//前趨指針structDuLNode*next;//后繼指針}DuLNode,*DuLinkList;DuLinkListblock_first;//頭結(jié)點(diǎn)DuLinkListblock_last;//尾結(jié)點(diǎn)Statusalloc(int);//內(nèi)存分配Statusfree(int);//內(nèi)存回收StatusFirst_fit(int,int);//首次適應(yīng)算法StatusBest_fit(int,int);//最佳適應(yīng)算法voidshow();//查看分配StatusInitblock();//開創(chuàng)空間表StatusInitblock()//開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表{block_first=(DuLinkList)malloc(sizeof(DuLNode));block_last=(DuLinkList)malloc(sizeof(DuLNode));block_first->prior=NULL;block_first->next=block_last;block_last->prior=block_first;block_last->next=NULL;block_last->data.address=0;block_last->data.size=MAX_length;block_last->data.ID=0;block_last->data.state=Free;returnOK;}//-----------------------分配主存-------------------------Statusalloc(intch){intID,request;cout<<"請(qǐng)輸入作業(yè)(分區(qū)號(hào)):";cin>>ID;cout<<"請(qǐng)輸入需要分配的主存大小(單位:KB):";cin>>request;{coutendl;returnERROR;}if(ch==2)//選擇最佳適應(yīng)算法{if(Best_fit(ID,request)==OK)cout<<"分配成功!"<<endl;elsecout<<endl;returnOK;}else//默認(rèn)首次適應(yīng)算法{if(First_fit(ID,request)==OK)cout<<"分配成功!"<<endl;elsecout<<endl;returnOK;}}//------------------首次適應(yīng)算法-----------------------StatusFirst_fit(intID,intrequest)//傳入作業(yè)名及申請(qǐng)量{//為申請(qǐng)作業(yè)開辟新空間且初始化DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp->data.ID=ID;temp->data.size=request;temp->data.state=Busy;DuLNode*p=block_first->next;while(p){if(p->data.state==Free&&p->data.size==request){//有大小恰好合適的空閑塊p->data.state=Busy;p->data.ID=ID;returnOK;break;}if(p->data.state==Free&&p->data.size>request){//有空閑塊能滿足需求且有剩余"temp->prior=p->prior;temp->next=p;temp->data.address=p->data.address;p->prior->next=temp;p->prior=temp;p->data.address=temp->data.address+temp->data.size;p->data.size-=request;returnOK;break;}p=p->next;}returnERROR;}//--------------------最佳適應(yīng)算法------------------------StatusBest_fit(intID,intrequest){intch;//記錄最小剩余空間DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp->data.ID=ID;temp->data.size=request;temp->data.state=Busy;DuLNode*p=block_first->next;DuLNode*q=NULL;//記錄最佳插入位置while(p)//初始化最小空間和最佳位置{if(p->data.state==Free&&(p->data.size>request||p->data.size==request)){qp;ch=p->data.size-request;break;}p=p->next;}while(p){if(p->data.state==Free&&p->data.size==request){//空閑塊大小恰好合適p->data.ID=ID;p->data.state=Busy;returnOK;break;}if(p->data.state==Free&&p->data.size>request){//空閑塊大于分配需求if(p->data.size-request<ch)//剩余空間比初值還小{ch=p->data.size-request;//更新剩余最小值q=p;//更新最佳位置指向}}p=p->next;}if(q==NULL)returnERROR;//沒有找到空閑塊e{//找到了最佳位置并實(shí)現(xiàn)分配temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;q->prior->next=temp;q->prior=temp;q->data.address+=request;q->data.size=ch;returnOK;}}//-----------------------主存回收--------------------Statusfree(intID){DuLNode*p=block_first;while(p){if(p->data.ID==ID){p->data.state=Free;p->data.ID=Free;if(p->prior->data.state==Free)//與前面的空閑塊相連{p->prior->data.size+=p->data.size;p->prior->next=p->next;p->next->prior=p->prior;}if(p->next->data.state==Free)//與后面的空閑塊相連{p->data.size+=p->next->data.size;p->next->next->prior=p;p->next=p->next->next;}break;}p=p->next;}returnOK;}//---------------顯示主存分配情況------------------voidshow(){cout<<"---------------------------------------\n";cout<<"---主存分配情況---\n";cout<<"---------------------------------------\n";DuLNode*p=block_first->next;while(p){if(p->data.ID==Free)cout<<"Free"<<endl;elsecout<<p->data.ID<<endl;cout"<<p->data.address<<endl;cout<<"分區(qū)大?。?<<p->data.size<<"KB"<<endl;if(p->data.state==Free)cout<<"空閑"<<endl;elsecout<<"已分配"<<endl;cout<<"--------------"<<endl;p=p->next;}}//-----------------------主函數(shù)---------------------------voidmain(){intch;//算法選擇標(biāo)記cout<<"動(dòng)態(tài)分區(qū)分配方式的模擬\n";cout<<"------------------------------------\n";cout<<"--1)首次適應(yīng)算法2)最佳適應(yīng)算法--\n";cout<<"------------------------------------\n";cin>>ch;Initblock();//開創(chuàng)空間表intchoice;//操作選擇標(biāo)記while(1){cout<<"--------------------------------------------\n";cout<<"--1:分配內(nèi)存2:回收內(nèi)存--\n"
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖北省百強(qiáng)縣中考數(shù)學(xué)聯(lián)考試卷(4月份)
- 客戶洞察面試題及答案
- 廣告設(shè)計(jì)師考試綜合設(shè)計(jì)能力試題及答案
- 端口測(cè)試面試題及答案
- 2024年紡織設(shè)計(jì)師考試的道德與試題及答案
- 保險(xiǎn)從業(yè)考試題庫及答案
- 2024助理廣告師考試備考真經(jīng)試題及答案
- 2024年助理廣告師考試的挑戰(zhàn)與機(jī)遇試題及答案
- 2024年設(shè)計(jì)師客戶需求分析題及答案
- 助理廣告師考試情感與品牌聯(lián)結(jié)試題及答案
- (廣東二模)2025年廣東省高三高考模擬測(cè)試(二)語文試卷(含答案解析)
- SL631水利水電工程單元工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)第3部分:地基處理與基礎(chǔ)工程
- 新22J01 工程做法圖集
- 常見天線以及調(diào)整方法及規(guī)范
- 115個(gè)低風(fēng)險(xiǎn)組病種目錄
- 水磨鉆挖孔施工方案.
- 96拖拉機(jī)撥叉的數(shù)控編程加工設(shè)計(jì)
- UPS電子商務(wù)物流案例分析ppt課件
- 數(shù)學(xué)趣味小故事(課堂PPT)
- 井架現(xiàn)場(chǎng)施工方法
- 2017普通高中地理課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論