




版權(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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公交公司宣傳周活動方案
- 公交敬老活動方案
- 語音語調(diào)的奧秘:英語發(fā)音與口語教學(xué)教案
- 英文書信格式及范文展示:初中英語教學(xué)輔導(dǎo)教案
- 公共場所宣傳活動方案
- 公司diy蛋糕活動方案
- 悲慘的湯姆250字(11篇)
- 公司五一郊游活動方案
- 小兔子的冒險旅程童話作文7篇范文
- 2025至2030年中國仿水晶象棋行業(yè)投資前景及策略咨詢報告
- 交通部《公路建設(shè)項目可行性研究報告編制辦法》(新)
- 肺癌的護理查房 課件
- 高級護理實踐知到智慧樹章節(jié)測試課后答案2024年秋浙江中醫(yī)藥大學(xué)
- 【數(shù)學(xué)】現(xiàn)實中的變量教學(xué)設(shè)計 2024-2025學(xué)年北師大版數(shù)學(xué)七年級下冊
- 高一語文暑假講義-初高銜接06:閱讀基本功句子含義的理解(教師版)
- 稅收政策與社會公平分配問題探討-洞察分析
- 2025屆安徽省合肥市重點中學(xué)中考二模生物試題含解析
- 森林生態(tài)旅游與康養(yǎng)基礎(chǔ)知識單選題100道及答案
- DB33T 2239-2020 經(jīng)顱磁刺激戒毒康復(fù)應(yīng)用管理規(guī)范
- 2025年陜西鋅業(yè)有限公司招聘筆試參考題庫含答案解析
- 露營地自然災(zāi)害應(yīng)急預(yù)案
評論
0/150
提交評論