版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、主存空間的分配與回收實驗報 告實驗報告課程名稱:操作系統(tǒng)實驗名稱:主存空間的分配與回收學(xué) 號:110310014學(xué)生姓名:于釗班 級:信管1101班指導(dǎo)教師:吳聯(lián)世實驗日期:2013年12月5日1、實驗?zāi)康模菏煜ぶ鞔娴姆峙渑c回收。理解在不同的存儲管理方式下,如何實現(xiàn)主存空間 的分配與回收。掌握動態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動態(tài)分區(qū)存儲 管理方式及其實現(xiàn)過程。2、實驗要求實驗要求使用可變分區(qū)存儲管理方式,分區(qū) 分配中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和空閑 分區(qū)鏈來進(jìn)行,分區(qū)分配中所用的算法采用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種算法來實現(xiàn)主存的分配與回收。同時,要求設(shè) 計一個實
2、用友好的用戶界面,并顯示分配與回收的過程。3、實驗環(huán)境硬件:CPU : AMD QL64內(nèi)存:2GB顯卡:ATI 4570硬盤:日立250G 軟件:Windows 2000/XPo 開發(fā)工具:VC+6.0。4、實驗內(nèi)容1)實現(xiàn)原理主存的分配和回收的實現(xiàn)是與主存儲器的管理方式有關(guān)的。所謂分配,就是 解決多道作業(yè)或多進(jìn)程如何共享主存空間的問題。所謂回收,就是當(dāng)作業(yè)運(yùn)行完 成時將作業(yè)或進(jìn)程所占的主存空間歸還給系統(tǒng)??勺兎謪^(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的 需求,并且分區(qū)個數(shù)是可以調(diào)整的。當(dāng)要裝入一個作業(yè)時,根據(jù)作業(yè)需要的主存 量查看是否有足夠的空閑空間,若有,則按需要量分割
3、一個分區(qū)分配給該作業(yè); 若無,則作業(yè)不能裝入,作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分成許 多大大小小的分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。4)實驗測試及分析:6、實驗心得體會這次實驗比較復(fù)雜,用了很多時間,但同時收獲了很多,對主存空間分配認(rèn)識加深了很多附錄:源代碼#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; /分
4、區(qū)大小int state; /分區(qū)狀態(tài) ElemType;typedef struct Node/ 線性表的雙向鏈表存儲結(jié) 構(gòu)ElemType data;struct Node *prior; /前趨指針struct Node *next; /后繼指針 Node,*LinkList;LinkList first; / 頭結(jié)點(diǎn) LinkList end; /尾結(jié)點(diǎn) int flag;/記錄要刪除的分區(qū)序號Status Initblock()/ 開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈 表first=(LinkList)malloc(sizeof(Node); end=(LinkList)malloc(sizeo
5、f(Node); first-prior=NULL;first-next=end;end-prior=first;end-next=NULL;end-data.num=1;end-data.address=40;end-data.length=600;end-data.state=0;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;/顯示主存分配情況vo
6、id show() int flag=0;/ 用來記錄分區(qū)序號Node *p=first;p-data.num=0;p-data.address=0;p-data.length=40;p-data.state=1;sort();printf(ntt 主存空間分配情況 n);printf(*nn);printf( 分區(qū)序號 t 起始地址 t 分區(qū)大小 t 分區(qū)狀態(tài) nn);while(p)printf(%dtt%dtt%d,p-data.num,p-data.address,p-data.length);if(p-data.state=0) printf(tt 空 閑 nn);else prin
7、tf(tt 已分配 nn);p=p-next;printf(*nn);/首次適應(yīng)算法Status First_fit(int request)/為申請作業(yè)開辟新空間且初始化Node *p=first-next;LinkList temp=(LinkList)malloc(sizeof(Node);temp-data.length=request;temp-data.state=1;p-data.num=1;while(p)if(p-data.state=0)&(p-data.length=request)/有大小恰好合適的空閑塊 p-data.state=1; return OK;break;
8、else if(p-data.state=0) &(p-data.lengthrequest)/有空閑塊能滿足需求且有剩余 temp-prior=p-prior; temp-next=p; temp-data.address=p-data.address; temp-data.num=p-data.num; p-prior-next=temp; p-prior=temp;p-data.address=temp-data.address+temp-da ta.length;p-data.length-=request;p-data.num+=1;return OK;break;p=p-next;
9、return ERROR;/最佳適應(yīng)算法Status Best_fit(int request)int ch; /記錄最小剩余空間Node *p=first;Node *q=NULL; / 記錄最佳插入位置LinkListtemp=(LinkList)malloc(sizeof(Node);temp-data.length=request;temp-data.state=1;p-data.num=1;while(p) /初始化最小空間和最佳位置if(p-data.state=0) &(p-data.length=request) )if(q=NULL)q=p;ch=p-data.length-
10、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)q-data.state=1;return OK;elsetemp-prior=q-prior; temp-next=q; temp-data.address=q-data.address; temp-data.num=q-data.num; q-prior-next=temp; q-prior=temp;
11、q-data.address+=request; q-data.length=ch; q-data.num+=1; return OK;return OK;/最差適應(yīng)算法Status Worst_fit(int request)int ch; /記錄最大剩余空間Node *p=first-next;Node *q=NULL; / 記錄最佳插入位置LinkList temp=(LinkList)malloc(sizeof(Node);temp-data.length=request; temp-data.state=1;p-data.num=1;while(p) /初始化最大空間和最佳位置if(
12、p-data.state=0 & (p-data.length=request) )if(q=NULL)q=p;ch=p-data.length-request;elseif(q-data.lengthp-data.length)q=p;ch=p-data.length-request; p=p-next;閑塊if(q=NULL) return ERROR;/ 沒有找到空else if(q-data.length=request)q-data.length=1;return OK;elsetemp-prior=q-prior; temp-next=q;temp-data.address=q-d
13、ata.address; temp-data.num=q-data.num; q-prior-next=temp;q-prior=temp;q-data.address+=request;q-data.length=ch;q-data.num+=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-prior-data.state=
14、0&q-next-data.s tate!=0) q-prior-data.length+=q-data.length; q-prior-next=q-next; q-next-prior=q-prior; q=q-prior; q-data.state=0; q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.state=0) q-data.length+=q-next-data.length;q-next=q-next-next; q-next-next-prior=q; q-data.state=0; q-data.num=fla
15、g;if(q-prior-data.state=0&q-next-data.state=0)q-prior-data.length+=q-data.length; q-prior-next=q-next; q-next-prior=q-prior; q=q-prior;q-data.state=0;q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.state!=0) q-data.state=0; return OK;Status deal2(Node *p)/處理回收空間Node *q=first;for(;q!=NULL;q=q-
16、next)if(q=p)if(q-prior-data.state=0&q-next-data.s tate!=0)q-prior-data.length+=q-data.length; q-prior-next=q-next;q-next-prior=q-prior; q=p-prior;q-data.state=0; q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.stat e=0)q-data.state=0;if(q-prior-data.state=0&q-next-data.sta te=0)q-prior-data.l
17、ength+=q-data.length; q-prior-next=q-next; q-next-prior=q-prior; q=q-prior;q-data.state=0; q-data.num=flag-1;if(q-prior-data.state!=0&q-next-data.state!=0)q-data.state=0;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)/當(dāng)前
18、 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; p-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-next!=end)deal1(p);elsedeal2(p);/結(jié)束 if(p-prior!=block_first) 的情況/結(jié)束 if(p-data.num=flag) 的情況printf(t* 回收成功 *);return OK;/主函數(shù)void main()int i; / 操作選擇標(biāo)記int a;/算法選
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 縫紉機(jī)用針項目運(yùn)營指導(dǎo)方案
- 煙草加工機(jī)產(chǎn)品供應(yīng)鏈分析
- 亞麻籽油膳食補(bǔ)充劑產(chǎn)品供應(yīng)鏈分析
- 給水加熱器工業(yè)用市場發(fā)展前景分析及供需格局研究預(yù)測報告
- 硅外延片產(chǎn)品供應(yīng)鏈分析
- 圖書出租行業(yè)經(jīng)營分析報告
- 家政人員招聘輔助行業(yè)經(jīng)營分析報告
- 個人用磨腳石產(chǎn)品供應(yīng)鏈分析
- 眼鏡商業(yè)機(jī)會挖掘與戰(zhàn)略布局策略研究報告
- 休養(yǎng)所行業(yè)營銷策略方案
- 小學(xué)美術(shù)11-身邊的伙伴ppt課件
- SQL-Server基礎(chǔ)培訓(xùn)PPT優(yōu)秀課件
- 汽車排放控制系統(tǒng)的檢修
- 乳腺癌英文相關(guān)
- 團(tuán)隊管理經(jīng)典案例分析
- 李燕璇植樹問題卡通版5
- 《新能源》題庫(試題及答案29個)
- 手井施工檢驗批質(zhì)量驗收記錄[共2頁]
- (完整版)油罐換底工程施工方案
- 懸吊技術(shù)的臨床應(yīng)
- 精益管理與精益服務(wù)
評論
0/150
提交評論