計算機操作系統內存分配實驗源代碼_第1頁
計算機操作系統內存分配實驗源代碼_第2頁
計算機操作系統內存分配實驗源代碼_第3頁
計算機操作系統內存分配實驗源代碼_第4頁
計算機操作系統內存分配實驗源代碼_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、#in clude#in clude#defi ne OK 1/ 完成#defi ne ERROR 0 / 出錯typedef int Status;typedef struct free_table定義一個空閑區說明表結構int num; /分區序號long address; /起始地址long len gth; /分區大小int state; /分區狀態ElemType;線性表的雙向鏈表存儲結構前趨指針后繼指針typedef struct Node/ElemType data;struct Node *prior; / struct Node *next; / Node,*L in kLi

2、st;Lin kList first; /頭結點Lin kList end; / 尾結點int flag;/ 記錄要刪除的分區序號Status In itblock()開創帶頭結點的內存空間鏈表first=(L in kList)malloc(sizeof(Node);en d=(Li nkList)malloc(sizeof(Node);first-prior=NULL;first- n ext=e nd;en d-prior=first;en d- next=NULL;en d-data .num=1;en d-data.address=40;en d-data.le ngth=600;e

3、n d-data.state=0;return OK;void sort()/分區序號重新排序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;用來記錄分區序號Node *p=first;p-data .num=0;p-data.address=0;p-data .len gth=40;p-data.state=1;sort();p

4、rin tf(ntt主存空間分配情況n ”);printf(*nn);printf(分區序號t起始地址t分區大小t分區狀態nn);while(p)prin tf(%dtt%dtt%d,p-data. nu m,p-data.address,p-data.le ngth); if(p-data.state=0) printf(tt空閑 nn);else printf(tt已分配 nn”);p=p-n ext;printf(*nn);/首次適應算法Status First_fit(i nt request)/為申請作業開辟新空間且初始化Node *p=first- n ext;Lin kList

5、temp=(L in kList)malloc(sizeof(Node); temp-data .len gth=request; temp-data.state=1;p-data .num=1;while(p)if(p-data.state=0)&(p-dataen gth=request)/有大小恰好合適的空閑塊p-data.state=1;return OK;break;else if(p-data.state=0) & (p-dataen gthrequest)/有空閑塊能滿足需求且有剩余temp_prior=p_prior;temp-n ext=p;temp-data.address

6、=p-data.address;temp-data .num=p-data .num;p-prior- n ext=temp;p-prior=temp; p-data.address=temp-data.address+temp-data .len gth; p-data .len gth-=request;p-data .nu m+=1;return OK;break;p=p-n ext;return ERROR;/最佳適應算法Status Best_fit(i nt request)int ch; /記錄最小剩余空間Node *p=first;Node *q=NULL; /記錄最佳插入位置

7、Lin kList temp=(Li nkList)malloc(sizeof(Node);temp-data .len gth=request; temp-data.state=1;p-data .num=1;while(p) /初始化最小空間和最佳位置if(p-data.state=0) & (p-data .len gth=request)if(q=NULL)q=p;ch=p-dataen gth-request;else if(q-dataen gth p-data .len gth)q=p;ch=p-data .len gth-request;p=p-n ext;if(q=NULL)

8、 retur n ERROR;/ 沒有找到空閑塊 else if(q-data .len gth=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-data .len gth=ch;q-data .nu m+=1;return OK;return OK;/最差適應算法St

9、atus Worst_fit(i nt request)int ch; / 記錄最大剩余空間Node *p=first- n ext;Node *q=NULL; /記錄最佳插入位置Lin kList temp=(Li nkList)malloc(sizeof(Node); temp-data .len gth=request;temp-data.state=1;p-data .num=1;while(p) /初始化最大空間和最佳位置if(p-data.state=O & (p-dataen gth=request)if(q=NULL)q=p;ch=p-data .len gth-request

10、;else if(q-data .len gth data .len gth)q=p;ch=p-data .len gth-request;p=p-n ext;if(q=NULL) return ERROR;/ 沒有找到空閑塊 else if(q-data .len gth=request)q-data .len 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

11、=temp;q-data.address+=request;q-data .len gth=ch;q-data .nu m+=1;return OK;return OK;/分配主存Status allocati on (i nt a)int request;/ 申請內存大小printf(”請輸入申請分配的主存大小(單位:KB):);scan f(%d,&request);if(requestn ext)if(q=p)if(q-prior-data.state=0&q-n ext-data.state!=O) q-prior-data .len gth+=q-dataen gth;q-prior

12、- n ext=q _n ext;q_n ext-prior=q-prior;q=q-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state=0)分配成功!*);*好*分配成功! *););分配成功!*););q-data .len gth+=q-n ext-data .len 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&

13、q-n ext-data.state=0)q-prior-data .len gth+=q-dataen gth;q-prior- n ext=q _n ext;q_n ext-prior=q-prior;q=q-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state!=O)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

14、-data.state=0&q-n ext-data.state!=0)q-prior-data .len gth+=q-data .len gth;q-prior- n ext=q _n ext;q_n ext-prior=q-prior;q=p-prior;q-data.state=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 .len gth+=q-dat

15、aen gth;q-prior- n ext=q _n ext;q_n ext-prior=q-prior; q=q-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state!=O)q-data.state=0;return OK;/主存回收Status recovery(i nt flag)Node *p=first;for(;p!=NULL;p=p-n ext)if(p-data. num=flag)if(p-prior=first)if(p-next!=end)/ 當前P指向的下

16、一個不是最后一個時if(p- next-data.state=O)/與后面的空閑塊相連p-data .len gth+=p-n ext-data .len gth;p_n ext- n ext-prior=p;p-n ext=p-n ext-n ext;p-data.state=0; p-data .num=flag;else p-data.state=0;if(p-next=end)/當前P指向的下一個是最后一個時p-data.state=0;/ 結束 if(p-prior=block_first)的情況else if(p-prior!=first)if(p-n ext!=e nd)deal

17、1(p);elsedeal2(p);/ 結束 if(p-prior!=block_first)的情況/ 結束 if(p-data.num=flag)的情況printf(t*回收成功 *);return OK; /主函數void mai n()int i; /操作選擇標記int a;/算法選擇標記*n);printf(prin tf(tt用以下三種方法實現主存空間的分配 n);printf(t(1)首次適應算法t(2)最佳適應算法t(3)最差適應算法n);printf(*n);prin tf(n);prin tf(請輸入所使用的內存分配算法:”);scan f(%d, &a);while(a3)

18、printf(”輸入錯誤,請重新輸入所使用的內存分配算法:n);sca nf(%d,&a);switch(a)使用首次適應算法:* n );break; 使用最佳適應算法:* n );break; 使用最壞適應算法:* n );break;case 1:pri ntf(nt*case 2:pri ntf(nt*case 3:pri ntf(nt*開創空間表In itblock(); /while(1)show();printf(t1:分配內存t2: 回收內存tO: 退出n);prin tf(請輸入您的操作:);sea nf(%d,&i);if(i=1)alloeati on (a); /分配內

19、存else if(i=2) /內存回收printf(請輸入您要釋放的分區號:);scan f(%d, &flag);reeovery(flag);else if(i=0)printf(n 退出程序 n); break; / 退出else II輸入操作有誤prin tf(輸入有誤,請重試!);con ti nue;八、執行結果和結果分析初始化首次適應算法:請輸入所使用的內存分配算法江j使用首次適應算法;*-主存空間分配情況分區序號起始地址分區大小分區狀態a040己分配140600空閑當作業1、2、3順利分配內存空間后:金聲內存2=回收內存 0=退出*分酉 E.圭奩大小單位:KB:tHO 王存空間分配情況婭分區序號起始地址分區大小分區狀態H0轉聊己分配140130已分配217060已分配3230100已分配433U310空閑XKXMEKXMEJfXMEXXMEMXMEXXIgMKXXKXXJOEXXaCXXXXXatKXJEXiMaCKiMJCXiMJfKiMXXiMJfXiMJE2=回收內存0:退出回收序號2里面的內存:心址丄己內存姿的瑾ff: 2.譙要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論