操作系統(tǒng)課程設(shè)計報告-主存空間的分配與回收_第1頁
操作系統(tǒng)課程設(shè)計報告-主存空間的分配與回收_第2頁
操作系統(tǒng)課程設(shè)計報告-主存空間的分配與回收_第3頁
操作系統(tǒng)課程設(shè)計報告-主存空間的分配與回收_第4頁
操作系統(tǒng)課程設(shè)計報告-主存空間的分配與回收_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)課程設(shè)計報告學(xué)院:計算機科學(xué)與技術(shù)學(xué)院 專業(yè):軟件工程 班級:軟件*班 姓 名*學(xué) 號*實驗組*實驗時間指導(dǎo)教師*成 績實驗項目名稱主存空間的分配與回收實驗?zāi)康耐ㄟ^該課程設(shè)計使我們理解在不同的存儲管理方式下,如何實現(xiàn)主存空間的分配與回收。使學(xué)生初步具有研究、設(shè)計、編制和調(diào)試操作系統(tǒng)模塊的能力實驗內(nèi)容及要求 設(shè)計要求: 1設(shè)計基于空閑區(qū)說明表的可變分區(qū)分配與回收算法; 2或設(shè)計基于空閑區(qū)鏈表的可變分區(qū)分配與回收算法; 3畫出以上算法流程圖; 4編程實現(xiàn)算法功能; 5編寫課程設(shè)計說明書。 工作量要求:完成以上設(shè)計要求中的所有算法功能。實驗環(huán)境硬件環(huán)境:Windows 7系統(tǒng)軟件環(huán)境: VC

2、+6.0開發(fā)工具總體設(shè)計本次課程設(shè)計中主要是模擬主存分配與回收,考慮到一個進程的五個狀態(tài),初始,就緒,等待,執(zhí)行,終止五個狀態(tài),所以決定從一個進程的運行過程進行模擬,總體流程大致是首先創(chuàng)建一個進程即填寫PCB信息,然后將進程送到后備集合,然后從后備集合從取出一個進程進行是分配。如果能分配,就將其送入就緒集合,然后從就緒集合中取出一個進程運行一個時間片(即一秒鐘),接著將該進程送入就緒集合,如果運行時間減為零,就不送入就緒集合中??紤]到實際的需要,我添加了一個掛起狀態(tài),還添加了一個撤銷進程函數(shù),一個強制回收函數(shù)。在本次設(shè)計中用多線程模擬多進程,所以各個共享表都應(yīng)該設(shè)置為線程安全的。程序框圖及流程

3、圖程序框圖: 程序流程圖:主要源代碼及注釋#include#include#include#define OK 1 #define ERROR 0 typedef int Status;typedef struct node/定義一個空閑區(qū)說明表結(jié)構(gòu) int num; /分區(qū)序號 long start; /起始地址 long length; /分區(qū)大小 int state; /分區(qū)狀態(tài) char tag20;/作業(yè)名稱job;typedef struct Node/ 線性表的雙向鏈表存儲結(jié)構(gòu) job data; struct Node *prior; /前趨指針 struct Node *ne

4、xt; /后繼指針Node,*LinkList; LinkList 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-data.num=1; end-data.start=0; end-data.len

5、gth=600; end-data.state=0; strcpy(end-data.tag,無作業(yè)); return OK;void sort()/分區(qū)序號重新排序 Node *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; /顯示主存分配情況void show() int flag=0;/用來記錄分區(qū)序號 Node *p=first; p-data.num=0; p-data.start=0; p-data.

6、length=0; p-data.state=1;strcpy(p-data.tag,); sort(); printf(ntt主存空間分配情況n); printf(*nn); printf(分區(qū)序號t作業(yè)名tt起始地址t分區(qū)大小t分區(qū)狀態(tài)nn);p=p-next; while(p) printf(%dtt%stt%dtt%d,p-data.num,p-data.tag,p-data.start,p-data.length); if(p-data.state=0) printf(tt空閑nn); else printf(tt已分配nn); p=p-next; printf(*nn);/首次適應(yīng)

7、算法Status First_fit(int request,char name20) /為申請作業(yè)開辟新空間且初始化 Node *p=first-next; LinkList temp=(LinkList)malloc(sizeof(Node); temp-data.length=request; temp-data.state=1; strcpy(temp-data.tag,name); p-data.num=1; while(p) if(p-data.state=0)&(p-data.length=request) /有大小恰好合適的空閑塊 p-data.state=1; return

8、OK; break; else if(p-data.state=0) & (p-data.lengthrequest) /有空閑塊能滿足需求且有剩余 temp-prior=p-prior; temp-next=p; temp-data.start=p-data.start; temp-data.num=p-data.num; p-prior-next=temp; p-prior=temp; p-data.start=temp-data.start+temp-data.length; p-data.length-=request; p-data.num+=1; return OK; break;

9、 p=p-next; return ERROR;/最佳適應(yīng)算法Status Best_fit(int request,char name20) int ch; /記錄最小剩余空間 Node *p=first; Node *q=NULL; /記錄最佳插入位置 LinkList temp=(LinkList)malloc(sizeof(Node); temp-data.length=request; temp-data.state=1; strcpy(temp-data.tag,name); p-data.num=1; while(p) /初始化最小空間和最佳位置 if(p-data.state=

10、0) & (p-data.length=request) ) if(q=NULL) q=p; ch=p-data.length-request; else if(q-data.length p-data.length)/找到最小插入空閑塊 q=p; ch=p-data.length-request; p=p-next; if(q=NULL) return ERROR;/沒有找到空閑塊 else if(q-data.length=request)/相等字節(jié)寫入 q-data.state=1; return OK; else/不相等,把節(jié)點插入鏈表 temp-prior=q-prior; temp

11、-next=q; temp-data.start=q-data.start; temp-data.num=q-data.num; q-prior-next=temp; q-prior=temp; q-data.start+=request; q-data.length=ch; q-data.num+=1; return OK; return OK;/最差適應(yīng)算法Status Worst_fit(int request,char name20) int ch; /記錄最大剩余空間 Node *p=first-next; Node *q=NULL; /記錄最佳插入位置 LinkList temp=

12、(LinkList)malloc(sizeof(Node); temp-data.length=request; temp-data.state=1; strcpy(temp-data.tag,name); 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; else if(q-data.length data.length)/找到插入最大空閑快 q=p; ch=p-data.length-requ

13、est; p=p-next; if(q=NULL) return ERROR;/沒有找到空閑塊 else if(q-data.length=request) q-data.length=1; return OK; else temp-prior=q-prior; temp-next=q; temp-data.start=q-data.start; temp-data.num=q-data.num; q-prior-next=temp; q-prior=temp; q-data.start+=request; q-data.length=ch; q-data.num+=1; return OK;

14、 return OK; /主存回收Status recovery(int flag) Node *p=first; for(;p!=NULL;p=p-next) if(p-data.num=flag) if(p-prior=first) if(p-next!=end)/當前P指向的下一個不是最后一個時 if(p-next-data.state=0) /與后面的空閑塊相連 p-data.length+=p-next-data.length; p-next-next-prior=p; p-next=p-next-next; p-data.state=0;strcpy( p-data.tag,無作業(yè)

15、); p-data.num=flag; else p-data.state=0; strcpy( p-data.tag,無作業(yè)); if(p-next=end)/當前P指向的下一個是最后一個時 p-data.state=0; strcpy( p-data.tag,無作業(yè)); /結(jié)束if(p-prior=block_first)的情況 else if(p-prior!=first) if(p-next!=end) deal1(p); else deal2(p); /結(jié)束if(p-prior!=block_first)的情況 /結(jié)束if(p-data.num=flag)的情況 printf(t*回

16、收成功*); return OK; /主函數(shù)void main() int i; /操作選擇標記 int a;/算法選擇標記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); switch(a) case 1:printf(nt*使用首次適應(yīng)算法:*n);break; case 2:printf(nt*使用最佳適應(yīng)算法:*n);break; case 3:printf(nt*使用最壞適應(yīng)算法:*n);break; Initblock(); /開創(chuàng)空間表 while(1) show(); printf(t1: 分配內(nèi)存t2: 回收內(nèi)存t0: 退出n); printf(請輸入您的操作:); scanf(%d,

溫馨提示

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

評論

0/150

提交評論