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

下載本文檔

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

文檔簡介

1、#defi ne OK 1/ 完成#defi ne ERROR 0 / 出錯typedef int Status;typedef struct free_table定義一個空閑區(qū)說明表結(jié)構(gòu)long address; /long len gth; / int state; /ElemType;typedef struct Node/ElemType data;struct Node *prior; /struct Node *n ext; / Node,*Li nkList;Lin kList first; /int num; / 分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)線性表的雙向鏈表存儲結(jié)構(gòu)前趨指針

2、后繼指針頭結(jié)點(diǎn)Lin kList e nd; / 尾結(jié)點(diǎn)int flag;/記錄要刪除的分區(qū)序號Status In itblock()幵創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表first=(Li nkList)malloc(sizeof(Node);en d=(Li nkList)malloc(sizeof(Node);first-prior二NULL;first- n ext=e nd;en d-prior二first;end-n ext=NULL;en d-data .num=1;en d-data.address=40;en d-dataen gth=600;en d-data.state=0;retu

3、rn OK;void sort()分區(qū)序號重新排序Node *p=first- n ext,*q;q=p-n ext;for(;p!=NULL;p=p-n ext)for(q=p-n ext;q;q=q-n ext)if(p-data .num =q-data .num)q-data .nu m+=1;/顯示主存分配情況void show() int flag=O;用來記錄分區(qū)序號Node *p=first;p-data .num=0;p-data.address=O;p-dataen gth=4O;p-data.state=1;sort();prin tf(ntt?主存空間分配情況?n);p

4、rintf(nn);printf分區(qū)序號t起始地址t分區(qū)大小t分區(qū)狀態(tài)nn;while(p)prin tf(%dtt%dtt%d,p-data .nu m,p-data.address,p-dataen gth); if(p-data.state=0) pr in tf(tt空閑 nn);else prin tf(tt已分配 nn);p=p-n ext;printf(H*nn);/首次適應(yīng)算法Status First_fit(i nt request) /為申請作業(yè)幵辟新空間且初始化Node *p=first- n ext;Lin kList temp=(Li nkList)malloc(si

5、zeof(Node);temp-dataen gth二request;temp-data.state=1;p-data .num=1;while(p)if(p-data.state=0)&(p-data.le ngth=request)/有大小恰好適宜的空閑塊p-data.state=1;return OK;break;else if(p-data.state=0) & (p-data.le ngthrequest)/有空閑塊能滿足需求且有剩余temp-prior=p-prior;temp-n ext二p;temp-data.address二p-data.address;temp-data.

6、num 二p-data. num;p-prior- n ext二temp;p-prior=temp;p-data.address=temp-data.address+temp-dataen gth;p-dataen gth-二request;p-data .nu m+=1;return OK;break;p=p-n ext;return ERROR;/最正確適應(yīng)算法Status Best_fit(i nt request)int ch; /記錄最小剩余空間Node *p=first;Node *q=NULL; /記錄最正確插入位置Lin kList temp=(Li nkList)malloc

7、(sizeof(Node);temp-dataen gth=request;temp-data.state=1;p-data .num=1;while(p) /初始化最小空間和最正確位置if(p-data.state=0) & (p-data.le ngth=request)if(q=NULL)q=p;ch=p-dataen gth-request;else if(q-dataen gth p-dataen gth)q=p;ch=p-dataen gth-request;p=p-n ext;if(q=NULL) return ERROR;/沒有找到空閑塊else if(q-dataen gth

8、=request)q-data.state=1;return OK;elsetemp-prior二q-prior;temp-n ext=q;temp-data.address二q-data.address;temp-data. num 二q-data. num; q-prior- n ext二temp;q-prior=temp;q-data.address+二request;q-dataen gth=ch;q-data .nu m+=1;return OK;return OK;/最差適應(yīng)算法Status Worst_fit( int request)int ch; /記錄最大剩余空間Node

9、*p=first- n ext;Node *q=NULL; /記錄最正確插入位置Lin kList temp=(Li nkList)malloc(sizeof(Node);temp-dataen gth二request;temp-data.state=1;p-data .num=1;while(p) /初始化最大空間和最正確位置if(p-data.state=0 & (p-data.le ngth=request)if(q=NULL)q=p;ch=p-dataen gth-request;else if(q-dataen gth dataen gth)q=p;ch=p-dataen gth-r

10、equest;p=p-n ext;if(q=NULL) return ERROR;/沒有找到空閑塊else if(q-dataen gth=request)q-dataen gth=1;return OK;elsetemp-prior二q-prior;temp-n ext=q;temp-data.address=q-data.address; temp-data. num 二q-data. num;q-prior- n ext二temp;q-prior=temp;q-data.address+二request;q-dataen gth=ch;q-data .nu m+=1;return OK;

11、return OK;/分配主存Status allocatio n(i nt a)prin tf(請輸入申請分配的主存大小(單位:KB):);sea nf(%d,&request);if(requestn ext)if(q=p)if(q-prior-data.state=0&q-n ext-data.state!=O)q-prior-data.le ngth+二q-datae ngth;q-prior- n ext=q-n ext;q- next-prior二q-prior;q=q-prior;q-data.state=0;q-data .num 二flag-1;if(q-prior-data

12、.state!=0&q-n ext-data.state=0)q-dataen gth+=q-n ext-dataen gth;q-n ext=q-n ext- n ext;q-n ext- n ext-prior二q;q-data.state=O;q-data .num 二flag;if(q-prior-data.state=0&q-n ext-data.state=O)q-prior-data.le ngth+二q-data.le ngth;q-prior- n ext=q-n ext;q- next-prior二q-prior;q=q-prior;q-data.state=0;q-dat

13、a .num 二flag-1;if(q-prior-data.state!=0&q-n ext-data.state!=0)q-data.state=0;return OK;Status deal2(Node *p)處理回收空間Node *q=first;for(;q!二NULL;q=q-n ext)if(q=p)if(q-prior-data.state=0&q-n ext-data.state!=O)q-prior-datae ngth+二q-datae ngth;q-prior- n ext=q-n ext;q- next-prior二q-prior;q=p-prior;q-data.s

14、tate=0;q-data .num 二flag-1;if(q-prior-data.state!=0&q-n ext-data.state=0)q-data.state=0;if(q-prior-data.state=0&q-n ext-data.state=0)q-prior-data.le ngth+二q-data.le ngth;q-prior- n ext=q-n ext;q- next-prior二q-prior;q=q-prior;q-data.state=O;q-data .num 二flag-1;if(q-prior-data.state!二 0&q-n ext-data.s

15、tate!=O)q-data.state=0;return OK;/主存回收Status recovery nt flag)Node *p=first;for(;p!=NULL;p=p-n ext)if(p-data .num=flag)if(p-prior=first)if(p-n ext!=e nd)/當(dāng)前P指向的下一個不是最后一個時與后面的空閑塊相連if(p-n ext-data.state=O)/p-dataen gth+=p-n ext-dataen gth;p-n ext- n ext-prior=p;p-n ext=p-n ext- n ext;p-data.state=O;p-

16、data .num 二flag;else p-data.state=0;if(p-next=end)/當(dāng)前P指向的下一個是最后一個時p-data.state=0;/ 結(jié)束 if(p-prior=block_first)的情況else if(p-prior!二first)if(p-n ext!=e nd)deal1(p); elsedeal2(p);/ 結(jié)束 if(p-prior!二block_first)的情況/ 結(jié)束 if(p-data.num=flag) 的情況printf(t*回收成功 *);return OK;/主函數(shù)void mai n()int i; /操作選擇標(biāo)記int a;/算

17、法選擇標(biāo)記n);printf(prin tf(tt用以下三種方法實(shí)現(xiàn)主存空間的分配n);printf(t(1)首次適應(yīng)算法t(2)最正確適應(yīng)算法t(3)最差適應(yīng)算法n);n)printf(prin tf(n);prin tf(請輸入所使用的內(nèi)存分配算法:);sca nf(%d, &a);while(a3)prin tf輸入錯誤,請重新輸入所使用的內(nèi)存分配算法:n;sea nf(%d, &a);switeh(a)使用首次適應(yīng)算法:*n;break;使用最正確適應(yīng)算法:*n;break;使用最壞適應(yīng)算法:*n;break;ease 1:pri ntf(nt*ease 2:pr in tf(nt*case 3:pri ntf(nt*In itblock(); /幵創(chuàng)空間表while(1)show();printf(t1:分配內(nèi)存t2: 回收內(nèi)存t0: 退出n);prin tf(請輸入您的操作:);sea nf(%d,&i);if(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

提交評論