




已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗報告班級: 系統(tǒng)本111學號:2011415108 姓名: 張國鋒 日期: 2013.5.30 實驗題目主存儲器空間分配實驗。2實驗要求編寫一段程序來模擬可變分區(qū)管理方法。要求能通過文件形式定義空閑區(qū)表;能隨意輸入作業(yè)及需要分配的空間;能分別使用首次適應(yīng)算法、最佳適應(yīng)算法和最壞適應(yīng)算法對輸入的作業(yè)進行空間分配;能顯示系統(tǒng)空閑表和已分配空間表。3. 實驗?zāi)康耐ㄟ^首次適應(yīng)算法、最佳適應(yīng)算法和最壞適應(yīng)算法實現(xiàn)主存空間的分配,可以使讀者可好地理解存儲分配算法。 實驗原理分析可變分區(qū)方式是按作業(yè)需要的主存空間大小來分區(qū)。當裝入一個作業(yè)時,首先要查看是否有足夠的空閑空間來分配,若有則按指定的分配方式進行分配;否則作業(yè)不能裝入。隨著作業(yè)的裝入和撤離主存空間被分為若干個大大小小的不連續(xù)的區(qū)間,為了表明各區(qū)間的狀態(tài)可以用一個內(nèi)存分區(qū)表如表1所示來表示。表1 內(nèi)存分區(qū)表起始地址長度標志120k20k作業(yè)1200k50k空閑這樣我們可以定義一個如下的結(jié)構(gòu)表示內(nèi)存分區(qū)信息。typedef struct nodeint start;/起始地址int length; /長度char tag20;/標志job;可變分區(qū)的三種算法就是為作業(yè)分配主存空間的方法。 首次適應(yīng)算法:在空閑區(qū)間中查詢滿足作業(yè)需要的空間,并將作業(yè)裝入第一個滿足條件的空間中去。 最佳適應(yīng)算法:在空閑區(qū)間中查詢滿足作業(yè)需要的空間,并將作業(yè)裝入滿足條件的空閑空間中最小的一個空間中去。 最壞適應(yīng)算法:在空閑區(qū)間中查詢滿足作業(yè)需要的空間,并將作業(yè)裝入滿足條件的空閑空間中最大的一個空間中去。從三種算法的說明可以看出,分配空間的過程主要可以分兩步: 查詢所有滿足作業(yè)需求的空間塊。 按照指定的算法將作業(yè)裝入空間塊中。在操作的最初主存空間實際就是一個大的空閑區(qū),不涉及到如何分配的問題。為直接模擬運行一段時間后主存中出現(xiàn)了多個空閑塊的狀態(tài),題目要求從一個文件讀入空閑區(qū)表。在這里我們可以設(shè)計一個空閑區(qū)表文件的結(jié)構(gòu)為如表2所示:表2 空閑區(qū)表起始地址長度200k50k這樣也可以方便地將空閑表一次讀入程序中,而不必再一個個的輸入。主要變量及函數(shù)說明如表3所示。表3 變量與函數(shù)說明表typedef struct node內(nèi)存塊結(jié)構(gòu)job frees空閑區(qū)表job occupys已分配區(qū)表free_quantity空閑區(qū)數(shù)量occupy_quantity已分配區(qū)數(shù)量void initial()初始化函數(shù)int readData()從文件讀入空閑表函數(shù)void sort()排序空閑表void view()顯示分區(qū)信息void earliest()最先適應(yīng)分配算法void excellent()最優(yōu)適應(yīng)分配算法void worst()最壞適應(yīng)算法mem.txt空閑表文件5. 實驗代碼清單#include#include#include#define max 100typedef struct nodeint start;int length;char tag20;job;job freesmax;job occupysmax;int free_quantity,occupy_quantity;int SIZE;void initial() /初始化函數(shù)int i;for(i=0;imax;i+)freesi.start=-1;freesi.length=0;strcpy(freesi.tag,free);occupysi.start=-1;occupysi.length=0;strcpy(occupysi.tag,);free_quantity=0;occupy_quantity=0;void writedata() /把分區(qū)函數(shù)寫入磁盤文件FILE *fp;char fname20;int i,j;printf(請輸入初始空閑表文件名:n);scanf(%s,&fname);printf(現(xiàn)在進行初始化空閑分區(qū)!n);printf(請輸入您要建立的空閑分區(qū)數(shù):n);scanf(%d,&SIZE);for(i=0;iSIZE;i+)j=i+1;printf(輸入第%d個分區(qū)的起始地址:n,j);scanf(%d,&freesi.start);printf(輸入第%d個分區(qū)的長度:n,j);scanf(%d,&freesi.length);if(fp=fopen(fname,wb)=NULL)printf(錯誤,文件打不開,請檢查文件名n);for(i=0;iSIZE;i+)if(fwrite(&freesi,sizeof(struct node),1,fp)!=1)printf(文件寫入錯誤!n);fclose(fp);void readdata() /從文件讀入分區(qū)表函數(shù)FILE *fp; char fname20; printf(請輸入讀入空閑表文件名:);/輸入空閑表文件的文件名 scanf(%s,&fname); if(fp=fopen(fname,rb)=NULL)printf(錯誤,文件打不開,請檢查文件名n);exit(0);elsefor(int i=0;iSIZE;i+)fread(&freesi,sizeof(struct node),1,fp);free_quantity+;fclose(fp);void sort() /排序空閑表for(int i=0;ifree_quantity-1;i+)int t=i;for(int j=i+1;jfree_quantity;j+)if(freesj.start=freest.start)t=j;freesfree_quantity.start=freesi.start;freesfree_quantity.length=freesi.length;freesi.start=freest.start;freesi.length=freest.length;freest.start=freesfree_quantity.start;freest.length=freesfree_quantity.length;void view() /顯示分區(qū)信息printf(空閑分區(qū)表顯示如下:n);printf(起始地址t長度t狀態(tài)標志n);for(int i=0;ifree_quantity;i+)printf(%6dkt%10dkt%stn,freesi.start,freesi.length,freesi.tag);printf(nn已分配分區(qū)表顯示如下:n);printf(起始地址t長度t占用作業(yè)名n);for(int j=0;joccupy_quantity;j+)printf(%6dkt%10dkt%stn,occupysj.start,occupysj.length,occupysj.tag);getchar();getchar();void earliest() /首次適應(yīng)算法char jobname20;int joblength,f=0;int i,j;printf(請輸入作業(yè)名:n);scanf(%s,&jobname);printf(輸入作業(yè)的長度:n);scanf(%d,&joblength);for(i=0;i=joblength) f=1;if(f=0)printf(n當前沒有能滿足你申請長度的空閑內(nèi)存,請稍候再試n);getchar();else/找到了滿足的空間int t=0; j=0; while(t=0)if(freesj.length=joblength)t=1; j+; j-; occupysoccupy_quantity.start=freesj.start;/分配滿足條件的空間 strcpy(occupysoccupy_quantity.tag,jobname); occupysoccupy_quantity.length=joblength; occupy_quantity+; if(freesj.lengthjoblength)freesj.start+=joblength;freesj.length-=joblength;elsefor(i=j;ifree_quantity-1;i+)freesi.start=freesi+1.start; freesi.length=freesi+1.length; free_quantity-;printf(作業(yè)申請內(nèi)存空間成功!n);getchar();getchar();void excellent() /最佳適應(yīng)法char jobname20;int joblength,f=0;int i,j;printf(請輸入作業(yè)名:n);scanf(%s,&jobname);printf(輸入作業(yè)的長度:n);scanf(%d,&joblength);for(i=0;i=joblength) f=1;if(f=0)printf(n當前沒有能滿足你申請長度的空閑內(nèi)存,請稍候再試n);getchar();else /找到了滿足的空間int t=0; j=0; while(t=0)if(freesj.length=joblength)t=1; j+; j-;for(i=0;i=joblength&freesi.lengthjoblength) freesj.start+=joblength;freesj.length-=joblength;elsefor(i=j;ifree_quantity-1;i+)freesi.start=freesi+1.start; freesi.length=freesi+1.length; free_quantity-; printf(作業(yè)申請內(nèi)存空間成功!n); getchar(); getchar(); void worst()char jobname20;int joblength,f=0;int i,j;printf(請輸入作業(yè)名:n);scanf(%s,&jobname);printf(輸入作業(yè)的長度:n);scanf(%d,&joblength);for(i=0;i=joblength) f=1;if(f=0)printf(n當前沒有能滿足你申請長度的空閑內(nèi)存,請稍候再試n);getchar();getchar();else /找到了滿足的空間int t=0; j=0; while(t=0)if(freesj.length=joblength)t=1; j+; j-;for(i=0;i=joblength&freesi.lengthfreesj.length)j=i;occupysoccupy_quantity.start=freesj.start; /分配空閑空間 strcpy(occupysoccupy_quantity.tag,jobname); occupysoccupy_quantity.length=joblength; occupy_quantity+; if(freesj.lengthjoblength) freesj.start+=joblength;freesj.length-=joblength;elsefor(i=j;ifree_quantity-1;i+)freesi.start=freesi+1.start; freesi.length=freesi+1.length; free_quantity-;printf(作業(yè)申請內(nèi)存空間成功!n);getchar();getchar();void main()initial();int n;writedata();system(cls);readdata();for(;)sort();printf(*n);printf(*n);printf(* 歡迎使用可變分區(qū)存儲管理系統(tǒng) *n);printf(*n);printf(* 1.顯示空閑表和分配表 *n);printf(* 2.首次適應(yīng)算法 *n);printf(* 3.最佳適應(yīng)算法 *n);printf(* 4.最壞適應(yīng)算法 *n);printf(* 0.退出系統(tǒng) *n);printf(*n);printf(*n);printf(請輸入您要選擇的項目:n);scanf(%d,&n);for(;)if(n4)printf(沒有這個選項,請重新輸入!);scanf(%d,&n);elsebreak;switch(n)case 0:printf(感謝您的使用!再見!n);exit(0);case 1:view();break;case 2:earliest();break;case 3:excellent();break;case 4:worst();break;system(cls);6. 實現(xiàn)建立文件以a為名字的文件輸入如圖1所示圖1 建立文件a建立3個空閑分區(qū)起始地址和行實現(xiàn)如圖2所示圖2 建立起始地址顯示空閑表和分配表實現(xiàn)如圖3所示 圖3 顯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC PAS 61980-5:2024 EN Electric vehicle wireless power transfer (WPT) systems - Part 5: Interoperability and safety of dynamic wireless power transfer (D-WPT) for electric
- 保函擔保的合同
- 新能源儲能系統(tǒng)研發(fā)合作項目投資合同
- 產(chǎn)品運輸服務(wù)合作合同
- 微信在線簽署合同
- 貨物運輸合同與貨物運輸合同
- 綠化苗木購銷合同書
- 電子產(chǎn)品工程安裝合同
- 動物疫病防控技術(shù)服務(wù)合同
- 建筑安裝工程合同書
- 小班數(shù)學課件《認識長方形》
- 淺談第三方物流的倉儲管理
- 21ZJ111 變形縫建筑構(gòu)造
- 醫(yī)院各委員會職責制度
- 心理健康與職業(yè)生涯(中職)PPT完整全套教學課件
- 改良經(jīng)皮經(jīng)肝膽道鏡術(shù)New
- 2萬噸馬鈴薯深加工(淀粉)項目可行性研究報告
- 服飾品設(shè)計PPT完整全套教學課件
- 顱腦橫斷層解剖09課件
- 2023年同等學力申碩英語真題
- 2023年04月廣東深圳市市場監(jiān)督管理局許可審查中心招考聘用醫(yī)療器械注冊審評員(員額)筆試參考題庫附答案解析
評論
0/150
提交評論