可變分區(qū)分配算法_第1頁(yè)
可變分區(qū)分配算法_第2頁(yè)
可變分區(qū)分配算法_第3頁(yè)
可變分區(qū)分配算法_第4頁(yè)
可變分區(qū)分配算法_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)主要讓大家熟悉內(nèi)存的各種分配和回收。通過本實(shí)驗(yàn),幫助大家理解不同的存儲(chǔ)管理方式下,如何實(shí)現(xiàn)內(nèi)存空間的分配與回收。實(shí)驗(yàn)內(nèi)容確定內(nèi)存空間分配表;采用最先適應(yīng)算法完成內(nèi)存空間的分配和回收;編寫主函數(shù)對(duì)所做工作進(jìn)行測(cè)試。設(shè)計(jì)思路先創(chuàng)建好空閑分區(qū)表,用戶輸入作業(yè)的所需分配的空間大小,從表頭依次查詢空閑分區(qū)表,若有適合該作業(yè)的空閑分區(qū),則將該空閑分區(qū)分配與作業(yè)相同大小的分區(qū)給作業(yè),若無則需等待,然后將空閑分區(qū)表按始地址從小到大順序進(jìn)行排列。帶作業(yè)執(zhí)行完后,釋放該分區(qū),再將空閑分區(qū)表按始地址從小到大順序進(jìn)行排列。關(guān)鍵代碼#include<stdio.h>#defineN5 //空閑區(qū)塊數(shù)typedefstructfreearea(intstartaddress;//空閑分區(qū)始址intsize; //空閑分區(qū)長(zhǎng)度intstate; 〃標(biāo)志位,0表示空,1表示未分配freearea;freeareafreeblock[N]={{87,18,1},{115,25,1},{154,102,1},{300,30,0},{600,100,1}};//給作業(yè)分配主存空間函數(shù)intalloc(intapplysize)(inti,flag=0;〃用來標(biāo)識(shí)是否有滿足作業(yè)的空閑空間,1表示有,0表示無for(i=0;i<N;i++)(if(freeblock[i].state==1&&freeblock[i].size>applysize)(freeblock[i].startaddress二freeblock[i].startaddress+applysize;freeblock[i].size二freeblock[i].size-applysize;flag=1;returnfreeblock[i].startaddress-applysize;}if(freeblock[i].state==1&&freeblock[i].size==applysize)(freeblock[i].state=0;flag=1;returnfreeblock[i].startaddress;}}if(flag==0)return-1;}voidsetfree()(intaddress,size;intflag1=0,flag2=0,flag3=0;//flag1:表示回收區(qū)是否有下鄰空閑區(qū);flag2:表示回收區(qū)是否有上下鄰空閑區(qū);flag3:表示回收區(qū)是否有上鄰空閑區(qū);inti,j;printf("請(qǐng)輸入要釋放區(qū)域的起始地址:\n");scanf("%d",&address);printf("請(qǐng)輸入要釋放區(qū)域的大?。篭n");scanf("%d",&size);for(i=0;i<N;i++)(if(freeblock[i].startaddress==address+size&&freeblock[i].state==1)//回收區(qū)有下鄰空閑區(qū)(size=size+freeblock[i].size;〃向下合并空閑區(qū)flag1=1;for(j=0;j<N;j++)if(freeblock[j].startaddress+freeblock[j].size==address &&freeblock[j].state==1)(freeblock[i].state=0;freeblock[j].size=freeblock[j].size+size;//向上合并空閑區(qū)flag2=1; 〃回收區(qū)有上下鄰空閑區(qū)break;}if(flag2==0)//回收區(qū)無上鄰空閑區(qū)(freeblock[i].startaddress=address;freeblock[i].size二size;break;}}if(flag1==0) //回收區(qū)無下鄰空閑區(qū),檢查其是否有上鄰空閑區(qū)(for(i=0;i<N;i++)if(freeblock[i].startaddress+freeblock[i].size==address &&freeblock[i].state==1)(freeblock[i].size二freeblock[i].size+size;flag3=1;break;}if(flag3==0)//回收區(qū)無上鄰空閑區(qū)for(j=0;j<N;j++)if(freeblock[j].state==0)〃將釋放區(qū)放入空表目中(freeblock[j].startaddress二address;freeblock[j].size二size;freeblock[j].state=1;break;}}}voidadjust()(inti,j;freeareatemp;//中間變量for(i=0;i<N;i++) //將空閑區(qū)按始地址順序在表中排列for(j=0;j<N;j++)if(freeblock[j].startaddress>freeblock[j+1].startaddress)(temp.startaddress=freeblock[j].startaddress;temp.size=freeblock[j].size;temp.state=freeblock[j].state;freeblock[j].startaddress=freeblock[j+1].startaddress;freeblock[j].size=freeblock[j+1].size;freeblock[j].state=freeblock[j+1].state;freeblock[j+1].startaddress=temp.startaddress;freeblock[j+1].size二temp.size;freeblock[j+1].state二temp.state;}for(i=0;i<N;i++)/*將空表目放在表后面*/for(j=0;j<N;j++)if(freeblock[j].state==0&&freeblock[j+1].state==1)(temp.startaddress二freeblock[j].startaddress;temp.size二freeblock[j].size;temp.state二freeblock[j].state;freeblock[j].startaddress二freeblock[j+1].startaddress;freeblock[j].size二freeblock[j+1].size;freeblock[j].state二freeblock[j+1].state;freeblock[j+1].startaddress二temp.startaddress;freeblock[j+1].size二temp.size;freeblock[j+1].state二temp.state;}}〃打印空閑分區(qū)表voidprint()(inti;printf("|start(始址)|size(長(zhǎng)度)|state(標(biāo)志位)|\n〃);for(i=0;i<N;i++)(printf("| %8d | %8d | %8d\n”,freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);}}main()(intapplysize,staAddress;charchoice;printf("\n是否有作業(yè)需要分配空間?(yorn:)\n");choice=getchar();while(choice=='y')(printf("\n空閑分區(qū)表為:\n");adjust();print();printf("\n請(qǐng)輸入需分配的空間大?。篭n");scanf(〃%d〃,&applysize);staAddress二alloc(applysize);adjust();printf("\n經(jīng)過分配后,空閑分配表為:\n");print();if(staAddress==-1)(printf("沒有合適的空閑區(qū),請(qǐng)等待!");}else(printf("\n該作業(yè)在已分配表中的始址為:%d\n”,staA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論