計算機(jī)操作系統(tǒng)內(nèi)存分配實驗源代碼_第1頁
計算機(jī)操作系統(tǒng)內(nèi)存分配實驗源代碼_第2頁
計算機(jī)操作系統(tǒng)內(nèi)存分配實驗源代碼_第3頁
計算機(jī)操作系統(tǒng)內(nèi)存分配實驗源代碼_第4頁
計算機(jī)操作系統(tǒng)內(nèi)存分配實驗源代碼_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、謝謝觀賞# includestdio.h#include# defineOK1/完成# defineERROR0/出錯typedefintStatus;typedefstructfree_table/定義一個空閑區(qū)說明表結(jié)構(gòu)intnum;/分區(qū)序號longaddress;/起始地址longlength;/分區(qū)大小intstate;/分區(qū)狀態(tài)ElemType;typedefstructNode/線性表的雙向鏈表存儲結(jié)構(gòu)ElemTypedata;structNode*prior;/前趨指針structNode*next;/后繼指針Node,*LinkList;LinkListfirst;/頭結(jié)點L

2、inkListend;/尾結(jié)點intflag;/記錄要刪除的分區(qū)序號StatusInitblock()/開創(chuàng)帶頭結(jié)點的內(nèi)存空間鏈表first=(LinkList)malloc(sizeof(Node);end=(LinkList)malloc(sizeof(Node);first-prior=NULL;first-next=end;end-prior=first;end-next=NULL;end-data.num=1;end-data.address=40;end-data.length=600;end-data.state=0;returnOK;voidsort()/分區(qū)序號重新排序Nod

3、e*p=first-next,*q;q=p-next;for(;p!=NULL;p=p-next)for(q=p-next;q;q=q-next)if(p-data.num=q-data.num)q-data.num+=1;/顯示主存分配情況voidshow()intflag=0;/用來記錄分區(qū)序號Node*p=first;p-data.num=0;p-data.address=0;p-data.length=40;p-data.state=1;sort();printf(ntt主存空間分配情況n);printf(”*nn);printf(分區(qū)序號t起始地址t分區(qū)大小t分區(qū)狀態(tài)nn);whil

4、e(p)printf(%dtt%dtt%d,p-data.num,p-data.address,p-data.length);if(p-data.state=0)printf(tt空閑nn);elseprintf(tt已分配nn);p=p-next;printf(”*nn);/首次適應(yīng)算法StatusFirst_fit(intrequest)/為申請作業(yè)開辟新空間且初始化Node*p=first-next;LinkListtemp=(LinkList)malloc(sizeof(Node);temp-data.length=request;temp-data.state=1;p-data.nu

5、m=1;while(p)if(p-data.state=0)&(p-data.length=request)/有大小恰好合適的空閑塊p-data.state=1;returnOK;break;elseif(p-data.state=0)&(p-data.lengthrequest)/有空閑塊能滿足需求且有剩余temp-prior=p-prior;temp-next=p;temp-data.address=p-data.address;temp-data.num=p-data.num;p-prior-next=temp;p-prior=temp;p-data.address=temp-data.

6、address+temp-data.length;p-data.length-=request;p-data.num+=1;returnOK;break;p=p-next;returnERROR;/最佳適應(yīng)算法StatusBest_fit(intrequest)intch;/記錄最小剩余空間Node*p=first;Node*q=NULL;/記錄最佳插入位置LinkListtemp=(LinkList)malloc(sizeof(Node);temp-data.length=request;temp-data.state=1;p-data.num=1;while(p)/初始化最小空間和最佳位置

7、if(p-data.state=0)&(p-data.length=request)if(q=NULL)q=p;ch=p-data.length-request;elseif(q-data.lengthp-data.length)q=p;ch=p-data.length-request;p=p-next;if(q=NULL)returnERROR;/沒有找到空閑塊elseif(q-data.length=request)q-data.state=1;returnOK;elsetemp-prior=q-prior;temp-next=q;temp-data.address=q-data.addr

8、ess;temp-data.num=q-data.num;q-prior-next=temp;q-prior=temp;q-data.address+=request;q-data.length=ch;q-data.num+=1;returnOK;returnOK;/最差適應(yīng)算法StatusWorst_fit(intrequest)intch;/記錄最大剩余空間Node*p=first-next;Node*q=NULL;/記錄最佳插入位置LinkListtemp=(LinkList)malloc(sizeof(Node);temp-data.length=request;temp-data.s

9、tate=1;p-data.num=1;while(p)/初始化最大空間和最佳位置if(p-data.state=0&(p-data.length=request)if(q=NULL)q=p;ch=p-data.length-request;elseif(q-data.lengthdata.length)q=p;ch=p-data.length-request;p=p-next;if(q=NULL)returnERROR;/沒有找到空閑塊elseif(q-data.length=request)q-data.length=1;returnOK;elsetemp-prior=q-prior;te

10、mp-next=q;temp-data.address=q-data.address;temp-data.num=q-data.num;q-prior-next=temp;q-prior=temp;q-data.address+=request;q-data.length=ch;q-data.num+=1;returnOK;returnOK;/分配主存Statusallocation(inta)intrequest;/申請內(nèi)存大小printf(請輸入申請分配的主存大小(單位:KB):);scanf(%d,&request);if(requestnext)if(q=p)if(q-prior-da

11、ta.state=0&q-next-data.state!=0)q-prior-data.length+=q-data.length;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-data.state=0;q-data.num=flag-1;)if(q-prior-data.state!=0&q-next-data.state=0)q-data.length+=q-next-data.length;q-next=q-next-next;q-next-next-prior=q;q-data.state=0;q-data.num=flag

12、;)if(q-prior-data.state=0&q-next-data.state=0)q-prior-data.length+=q-data.length;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-data.state=0;q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.state!=0)q-data.state=0;returnOK;Statusdeal2(Node*p)/處理回收空間Node*q=first;for(;q!=NULL;q=q-next)if(q

13、=p)if(q-prior-data.state=0&q-next-data.state!=0)q-prior-data.length+=q-data.length;q-prior-next=q-next;q-next-prior=q-prior;q=p-prior;q-data.state=0;q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.state=0)q-data.state=0;if(q-prior-data.state=0&q-next-data.state=0)q-prior-data.length+=q-data.l

14、ength;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-data.state=0;q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.state!=0)q-data.state=0;returnOK;/主存回收Statusrecovery(intflag)Node*p=first;for(;p!=NULL;p=p-next)if(p-data.num=flag)if(p-prior=first)if(p-next!=end)/當(dāng)前P指向的下一個不是最后一個時if(p-next

15、-data.state=0)/與后面的空閑塊相連p-data.length+=p-next-data.length;p-next-next-prior=p;p-next=p-next-next;p-data.state=0;p-data.num=flag;elsep-data.state=0;if(p-next=end)/當(dāng)前P指向的下一個是最后一個時p-data.state=0;/結(jié)束if(p-prior=block_first)的情況elseif(p-prior!=first)if(p-next!=end)deal1(p);elsedeal2(p);的情況/結(jié)束if(p-prior!=bl

16、ock_first)/結(jié)束if(p-data.num=flag)的情況printf(t*回收成功*);returnOK;/主函數(shù)voidmain()inti;/操作選擇標(biāo)記inta;/算法選擇標(biāo)記printf(”*n);printf(tt用以下三種方法實現(xiàn)主存空間的分配n);printf(t(1)首次適應(yīng)算法t(2)最佳適應(yīng)算法t(3)最差適應(yīng)算法n);printf(”*n);printf(n);printf(請輸入所使用的內(nèi)存分配算法:);scanf(%d,&a);while(a3)printf(輸入錯誤,請重新輸入所使用的內(nèi)存分配算法:n);scanf(%d,&a);case 1:printf(nt*case 2:printf(nt*case 3:printf(nt*switch(a)使用首次適應(yīng)算法:*n);break;使用最佳適應(yīng)算法:*n);break;使用最壞適應(yīng)算法:*n);break;Initblock();/開創(chuàng)空間表while(1)show();printf(t1:分配內(nèi)存t2:回收內(nèi)存t0:退出n);printf(請輸入您的操作:);scanf(%d,&i);if(i=1)allocation(a);/分配內(nèi)存elseif(i=2)/內(nèi)存

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論