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

下載本文檔

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

文檔簡介

1、#include#include#define OK 1/完成#define ERROR 0 / 出錯typedef int Status;typedef struct free_table定義一個空閑區(qū)說明表結(jié)構(gòu)int num; / 分區(qū)序號long address; /起始地址long length;/分區(qū)大小int state;/分區(qū)狀態(tài)ElemType;typedef struct Node/ 線性表的雙向鏈表存儲結(jié)構(gòu)ElemType data;struct Node *prior; / 前趨指針struct Node *next; /后繼指針Node,*LinkList;LinkLi

2、st first; / 頭結(jié)點LinkList end;/尾結(jié)點int flag;/記錄要刪除的分區(qū)序號Status Initblock()/ 開創(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-=1;end-=40;end-=600;end-=0;return OK;void sort()/ 分區(qū)序號重新排序Node *p=first-next,*q

3、;q=p-next;for(;p!=NULL;p=p-next)for(q=p-next;q;q=q-next)if(p-=q-q-+=1; /顯示主存分配情況 void show() int flag=0;/ 用來記錄分區(qū)序號Node *p=first;p-=0;p-=0;p-=40;p-=1;sort();printf(ntt 主存空間分配情況n);printf(*nn);printf(*nn);printf(分區(qū)序號t起始地址t分區(qū)大小t分區(qū)狀態(tài)nn);while(p)printf(%dtt%dtt%d,p-,p-,p-;if(p-=0) printf(tt 空閑 nn); else p

4、rintf(tt 已分配 nn);p=p-next;printf(*nn);printf(*nn);/首次適應(yīng)算法Status First_fit(int request)/為申請作業(yè)開辟新空間且初始化Node *p=first-next;LinkList temp=(LinkList)malloc(sizeof(Node);temp-=request;temp-=1;p-=1;while(p)if(p-=0)&(p-=request)/有大小恰好合適的空閑塊p-=1;return OK;break;else if(p-=0) & (p-request)/有空閑塊能滿足需求且有剩余temp-p

5、rior=p-prior;temp-next=p;temp-=p-;temp-=p-;p-prior-next=temp;p-prior=temp;p-=temp-+temp-;p-=request;p-+=1;return OK;break;p=p-next;return ERROR;/最佳適應(yīng)算法Status Best_fit(int request)int ch; /記錄最小剩余空間Node *p=first;Node *q=NULL; / 記錄最佳插入位置LinkList temp=(LinkList)malloc(sizeof(Node);temp-=request;temp-=1;

6、p-=1;while(p) / 初始化最小空間和最佳位置if(p-=0) & (p-=request) )if(q=NULL)q=p;ch=p-;else if(q- p-q=p;ch=p-;p=p-next;if(q=NULL) return ERROR;/ 沒有找到空閑塊else if(q-=request)q-=1;return OK;elsetemp-prior=q-prior;temp-next=q;temp-=q-;temp-=q-;q-prior-next=temp;q-prior=temp;q-+=request;q-=ch;q-+=1;return OK; return OK

7、;/最差適應(yīng)算法Status Worst_fit(int request) int ch; /記錄最大剩余空間Node *p=first-next;Node *q=NULL; / 記錄最佳插入位置LinkList temp=(LinkList)malloc(sizeof(Node);temp-=request;temp-=1;p-=1;while(p) / 初始化最大空間和最佳位置if(p-=0 & (p-=request)(if(q=NULL) (q=p;ch=p-;) else if(q- (q=p;ch=p-;) p=p-next;)if(q=NULL) return ERROR;/ 沒

8、有找到空閑塊 else if(q-=request)(q-=1;return OK;)else(temp-prior=q-prior;temp-next=q;temp-=q-;temp-=q-;q-prior-next=temp;q-prior=temp;q-+=request;q-=ch;q-+=1;return OK;) return OK;)/分配主存Status allocation(int a)(int request;/申請內(nèi)存大小printf(請輸入申請分配的主存大小(單位:KB):); scanf(%d,&request);if(requestnext)if(q=p)if(q-

9、prior-=0&q-next-!=0)q-prior-+=q-;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-=0;q-=flag-1;if(q-prior-!=0&q-next-=0)q-+=q-next-;q-next=q-next-next;q-next-next-prior=q;q-=0;q-=flag;)if(q-prior-=0&q-next-=0)(q-prior-+=q-;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-=0;q-=flag-1;)if(q-p

10、rior-!=0&q-next-!=0)(q-=0;)return OK;)Status deal2(Node *p)/ 處理回收空間(Node *q=first;for(;q!=NULL;q=q-next)(if(q=p)(if(q-prior-=0&q-next-!=0)(q-prior-+=q-;q-prior-next=q-next;q-next-prior=q-prior;q=p-prior;q-=0;q-=flag-1;)if(q-prior-!=0&q-next-=0)(q-=0;)if(q-prior-=0&q-next-=0)q-prior-+=q-;q-prior-next

11、=q-next;q-next-prior=q-prior;q=q-prior;q-=0;q-=flag-1;)if(q-prior-!=0&q-next-!=0)(q-=0;)return OK;)/主存回收Status recovery(int flag)(Node *p=first;for(;p!=NULL;p=p-next)(if(p-=flag)(if(p-prior=first)(if(p-next!=end)/當(dāng)前P指向的下一個不是最后一個時(if(p-next-=0)與后面的空閑塊相連(p-+=p-next-;p-next-next-prior=p;p-next=p-next-n

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

13、);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);printf( 請輸入所使用的內(nèi)存分配算法:);scanf(%d,&a);while(a3)printf( 輸入錯誤,請重新輸入所使用的內(nèi)存分配算法:n);scanf(%d,&a);switch(a)case 1:printf(nt*使用首次適應(yīng)算法:*n);break;case 2:printf(nt*使用最佳適應(yīng)算法:*n);break;case 3:printf(nt*使用最壞適應(yīng)算法

14、:*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)存 else if(i=2)/ 內(nèi)存回收printf(請輸入您要釋放的分區(qū)號:); scanf(%d,&flag);recovery(flag);else if(i=0) printf(n 退出程序 n); break; 退出else 輸入操作有誤printf(輸入有誤,請重試!); continue;八、執(zhí)行結(jié)果和結(jié)果分析初始化

15、首次適應(yīng)算法:請輸入所使用的內(nèi)存分配算法:1一*使用首次適應(yīng)算法;*主存空間分配情況分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)040已分配140630空 j對1己內(nèi)存2=回收內(nèi)存M:退出當(dāng)作業(yè)1、2、31己內(nèi)存2=回收內(nèi)存M:退出已內(nèi)存2;回收內(nèi)存0:退出已內(nèi)存2;回收內(nèi)存0:退出里存空間分配情況配的王育大小單位*B。頷場酉即功LH*、- q工存空間分配情況分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)a鞫4G已分配140138已分配217060已分配3230100已分配433U310空閑回收序號2里面的內(nèi)存:分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)4M已分配14M133已分配Z!/ba空閑32JU已分配4330310空閑分配作業(yè)4:分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)0840已分配14團130已分配21701&0空閑433S28Q已分配55N國110空閑U ,分配內(nèi)存 ,的藻格1不回收內(nèi)存請分配的主存大小 單位;200*7S王存空間分配情況分區(qū)序號起始地址040170239339分區(qū)大小U ,分配內(nèi)存 ,的藻格1不回收內(nèi)存請分配的主存大小 回 信釋 1:的翳E 你除出 艮11 I0回收序

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論