動(dòng)態(tài)分區(qū)分配方式首次適應(yīng)算法_第1頁(yè)
動(dòng)態(tài)分區(qū)分配方式首次適應(yīng)算法_第2頁(yè)
動(dòng)態(tài)分區(qū)分配方式首次適應(yīng)算法_第3頁(yè)
動(dòng)態(tài)分區(qū)分配方式首次適應(yīng)算法_第4頁(yè)
動(dòng)態(tài)分區(qū)分配方式首次適應(yīng)算法_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、動(dòng)態(tài)分區(qū)分配方式首次適應(yīng)算法?算法思路使用動(dòng)態(tài)分區(qū)分配中的數(shù)據(jù)結(jié)構(gòu)和分配算法,編輯動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式并實(shí)現(xiàn)。本程序主要采用首次適應(yīng)算法的動(dòng)態(tài)分區(qū)分配過(guò)程alloc()和回收過(guò)程free()??臻e分區(qū)通過(guò)空閑分區(qū)鏈表來(lái)管理,在進(jìn)行內(nèi)存分配時(shí),系統(tǒng)優(yōu)先使用空閑區(qū)低端的空間,即每次分配內(nèi)存空間是總是從低址部分開(kāi)始進(jìn)行循環(huán),找到第一個(gè)合適的空間,便按作業(yè)所需分配的大小分配給作業(yè)。二、算法流程圖檢查完否?從頭開(kāi)始查表YesNo與要求內(nèi)存是否一致?繼續(xù)查找下一個(gè)表NoYes三、函數(shù)代碼#include<iostream.h>#include<stdlib.h># defineFr

2、ee0空閑狀態(tài)# defineBusy1/已用狀態(tài)# defineOK1/浣成# defineERROR0加錯(cuò)#defineMAX_length640最大內(nèi)存空間為640KBtypedefintStatus;typedefstructfreearea/定義一個(gè)空閑區(qū)說(shuō)明表結(jié)構(gòu)intID;longsize;longaddress;intstate;ElemType;typedefstructDuLNode/doublelinkedlist(ElemTypedata;structDuLNode*prior;/前趨指針structDuLNode*next;/后繼指針DuLNode,*DuLinkLi

3、st;DuLinkListblock_first;/頭結(jié)點(diǎn)DuLinkListblock_last;/尾結(jié)點(diǎn)Statusalloc();內(nèi)存分配Statusfree(int);內(nèi)存回收StatusFirst_fit(int,int);/首次適應(yīng)算法voidshow();/查看分配StatusInitblock();/開(kāi)創(chuàng)空間表StatusInitblock()/開(kāi)創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表(block_first=(DuLinkList)malloc(sizeof(DuLNode);block_last=(DuLinkList)malloc(sizeof(DuLNode);block_first

4、->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()intID,request;cout<<”請(qǐng)輸入作業(yè)(分區(qū)號(hào)):"c

5、in>>ID;cout<<呼青輸入需要分配的主存大小(單位:KB):"cin>>request;if(request<0|request=0)cout<<"分配大小不合適,請(qǐng)重試!"<<endl;returnERROR;if(First_fit(ID,request)=OK)cout<<"分酉己成功!"<<endl;elsecout<<"內(nèi)存不足,分配失??!"<<endl;/首次適應(yīng)算法StatusFirst_f

6、it(intID,intrequest)/傳入作業(yè)名及申請(qǐng)量(/為申請(qǐng)作業(yè)開(kāi)辟新空間且初始化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

7、;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-&

8、gt;data.size-=request;returnOK;break;p=p->next;returnERROR;/主存回收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-&g

9、t;next->prior=p->prior;if(p->next->data.state=Free)/與后面的空閑塊相連(p->data.size+=p->next->data.size;if(p->next->next=NULL)p->next=NULL;elsep->next->next->prior=p;p->next=p->next->next;break;p=p->next;cout<<"分區(qū):"<<ID<<"回收成

10、功"<<endl;returnOK;/)/顯示主存分配情況voidshow()(cout<<"+n"cout<<"+主存分酉己,青況+n"cout<<"+n"DuLNode*p=block_first->next;while(p)(cout<<"分區(qū)號(hào):";if(p->data.ID=Free)cout<<"Free"<<endl;elsecout<<p->data.ID&

11、lt;<endl;cout<<"起始地址:"<<p->data.address;cout<<"分區(qū)大?。?quot;<<p->data.size<<"KB"cout<<"狀態(tài):";if(p->data.state=Free)cout<<"空閑"<<endl;elsecout<<"已分配"<<endl;p=p->next;)/主函數(shù)void

12、main()(Initblock();intchoice;inti;for(i=0;i+)cout<<"+n"cout<<"+動(dòng)態(tài)分區(qū)分配方式的模擬一+n"cout<<"+首次適應(yīng)算法+n"cout<<"+n"cout<<"+1分配內(nèi)存2:回收內(nèi)存+n”;cout<<"+3查看分配0:退出+n”;cout<<"+n"cout<<"請(qǐng)輸入您的操作:"cin>>choice;if(choice=1)/分配內(nèi)存alloc();elseif(choice=2)/內(nèi)存回收intID;cout<<情輸入您要釋放的分區(qū)號(hào):"cin>>ID;free(ID);elseif(choice=3)/顯示主存show();elseif(choice=0)/退出break;else輸入操作有誤cout&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論