可變分區(qū)存儲管理方案中的內(nèi)存分配_第1頁
可變分區(qū)存儲管理方案中的內(nèi)存分配_第2頁
可變分區(qū)存儲管理方案中的內(nèi)存分配_第3頁
可變分區(qū)存儲管理方案中的內(nèi)存分配_第4頁
可變分區(qū)存儲管理方案中的內(nèi)存分配_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、/*(二)可變分區(qū)存儲管理方案中的內(nèi)存分配 可變分區(qū)調(diào)度算法有:最先適應(yīng)分配算法,最優(yōu)適應(yīng)分配算法,最壞適應(yīng)算法 用戶提出內(nèi)存空間的申請;系統(tǒng)根據(jù)申請者的要求,按照一定的分配策略分析內(nèi)存空間的使用情況,找出能 滿足請求的空閑區(qū),分給申請者;當(dāng)程序執(zhí)行完畢或主動歸還內(nèi)存資源時,系統(tǒng)要收回它所占用的內(nèi)存空間 或它歸還的部分內(nèi)存空間。 1程序運(yùn)行時首先接收輸入:空閑區(qū)數(shù)據(jù)文件,包括若干行,每行有兩個數(shù)據(jù)項:起始地址、長度(均為 整數(shù)),各數(shù)據(jù)項以space隔開。 2建立空閑區(qū)表并在屏幕上顯示輸出空閑區(qū)表內(nèi)容,空閑區(qū)表中記錄了內(nèi)存中可供分配的空閑區(qū)的始址和 長度,用標(biāo)志位指出該分區(qū)是否是未分配的空閑區(qū)

2、。 3從用戶界面根據(jù)用戶提示接收一個內(nèi)存申請,格式為:作業(yè)名、申請空間的大小。 4按照最差(最壞)適配算法選擇一個空閑區(qū),分割并分配,修改相應(yīng)的數(shù)據(jù)結(jié)構(gòu)(空閑區(qū)表),填寫內(nèi) 存已分配區(qū)表(起始地址、長度、標(biāo)志位),其中標(biāo)志位的一個作用是指出該區(qū)域分配給哪個作業(yè)。 5重復(fù)3、4,直到輸入為特殊字符(0)。 6在屏幕上顯示輸出新的空閑區(qū)表和已分配區(qū)表的內(nèi)容。 本程序包括:FIFO,最優(yōu)適應(yīng)分配算法,最壞適應(yīng)算法 data:10 1530 550 2080 12120 25160 18200 8VC+調(diào)試通過 */#include #include #include #include const i

3、nt MAXJOB=100;/定義表最大記錄數(shù)typedef struct nodeint start;int length;char tag20;job;job freesMAXJOB;/定義空閑區(qū)表int free_quantiry;/空閑區(qū)域的個數(shù)job occupysMAXJOB;/定義已分配區(qū)表int occupy_quanity;/初始化函數(shù)void initial(int i;for (i=0;i freesi.start=-1;freesi.length=0;strcpy(freesi.tag,"free"occupysi.start=-1;occupysi

4、.length=0;strcpy(occupysi.tag,""free_quantiry=0;occupy_quanity=0;/讀數(shù)據(jù)函數(shù)int readData(FILE *fp;char fname20;cout<<"請輸入初始空閑表文件名:"< cin>>fname;if (fp=fopen(fname,"r"=NULLcout<<"錯誤,文件打不開,請檢查文件名"< elsewhile(!feof(fpfscanf(fp,"%d %d"

5、,&freesfree_quantiry.start,&freesfree_quantiry.length;free_quantiry+;return 1;return 0;/sortvoid sort(/按空閑區(qū)起始地址排序int i,j,p;for (i=0;i p=i;for (j=i+1;j if (freesj.start p=j;if (p!=ifreesfree_quantiry=freesi;freesi=freesp;freesp=freesfree_quantiry;/顯示函數(shù)void view(int i; cout< cout<<&qu

6、ot;當(dāng)前空閑表:"< cout<<"起始地址 長度 狀態(tài)"< for(i=0;i cout.setf(2; cout.width(12; cout< cout.width(10; cout< cout.width(8; cout< cout< cout<<"當(dāng)前已分配表:"< cout<<"起始地址 長度 占用作業(yè)名"< for (i=0;i cout.setf(2;cout.width(12;cout< cout.width(10;

7、cout< cout.width(8;cout< /最優(yōu)適應(yīng)分配算法void best_fit(char job_name20;int job_length;int i,j,flag,t;cout<<"請輸入新申請內(nèi)存空間的作業(yè)名和空間大小:"< cin>>job_name;cin>>job_length;flag=0;for (i=0;i if (freesi.length>=job_lengthflag=1;if (flag=0cout<<"Sorry,當(dāng)前沒有能滿足你申請長度的空閑內(nèi)存,

8、請稍候再試"< elset=0;i=0;while(t=0if (freesi.length>=job_lengtht=1;i+;i-;for (j=0;j if (freesj.length>=job_length&&freesj.length i=j;occupysoccupy_quanity.start=freesi.start;strcpy(occupysoccupy_quanity.tag,job_name;occupysoccupy_quanity.length=job_length;occupy_quanity+;if (freesi.

9、length>job_lengthfreesi.start+=job_length;freesi.length-=job_length;elsefor (j=i;j freesj=freesj+1;free_quantiry-;cout<<"內(nèi)存分配成功"< /撤銷作業(yè)void finished(char job_name20;int i,j,flag,p=0;int start;int length;cout<<"請輸入要撤銷的作業(yè)名:"< cin>>job_name;flag=-1;for (i=

10、0;i if (!strcmp(occupysi.tag,job_nameflag=i;start=occupysi.start;length=occupysi.length;if (flag=-1cout<<"沒有這個作業(yè)"< elsefor (i=0;i if (freesi.start+freesi.length=startif (i+1 freesi.length=freesi.length+freesi+1.length;for (j=i+1;j freesj=freesj+1;free_quantiry-;p=1;elsefreesi.leng

11、th+=length;p=1;if (freesi.start=(start+lengthfreesi.start=start;freesi.length+=length;p=1;if (p=0freesfree_quantiry.start=start;freesfree_quantiry.length=length;free_quantiry+;for (i=flag;i occupysi=occupysi+1;occupy_quanity-;/顯示版權(quán)信息函數(shù) void version( cout< cout<<" "< cout<<

12、;" 可變分區(qū)存儲管理方案中的內(nèi)存分配 "< cout<<" "< cout<<" siqingyang "< cout<<" version 2011 build 0520 "< cout<<" "< cout< void main( int flag=0; int t=1; int chioce=0; version(; initial(; flag=readData(; view(; while(flag=1 sort(; cout< cout<<" 可變分區(qū)存儲管理模擬系統(tǒng)"< cout<<"="< cout<<" 1.best fit申請空間2.撤消作業(yè) 0.退出"&

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論