實(shí)驗(yàn)-存儲(chǔ)器管理(二)_第1頁
實(shí)驗(yàn)-存儲(chǔ)器管理(二)_第2頁
實(shí)驗(yàn)-存儲(chǔ)器管理(二)_第3頁
實(shí)驗(yàn)-存儲(chǔ)器管理(二)_第4頁
實(shí)驗(yàn)-存儲(chǔ)器管理(二)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 存儲(chǔ)器管理(二)一、目的本課題實(shí)驗(yàn)的目的是,使學(xué)生實(shí)驗(yàn)存儲(chǔ)器管理系統(tǒng)的設(shè)計(jì)方法;加深對所學(xué)各種存儲(chǔ)器管理方案的了解;要求采用一些常用的存儲(chǔ)器分配算法,設(shè)計(jì)一個(gè)存儲(chǔ)器管理模擬系統(tǒng)并調(diào)試運(yùn)行。題目存儲(chǔ)器管理三、要求及提示1、要求采用一種常用的存儲(chǔ)器分配算法,設(shè)計(jì)一個(gè)存儲(chǔ)器管理模擬系統(tǒng)。允許進(jìn)行多次的分配和釋放,并可向用戶反饋分配和釋放情況及當(dāng)前內(nèi)存的情況;采用“命令菜單”選擇和鍵盤命令輸入的會(huì)話方式,根據(jù)輸入請求調(diào)用分配模塊,或回收模塊,或內(nèi)存查詢模塊,或最終退出系統(tǒng)。2

2、、編程實(shí)現(xiàn)。3、工具:C語言或其它高級語言4、實(shí)驗(yàn)時(shí)間:3學(xué)時(shí)四、實(shí)驗(yàn)報(bào)告1、寫出存儲(chǔ)器管理的思想。2、畫出算法流程圖和設(shè)置的數(shù)據(jù)結(jié)構(gòu)。3、寫出調(diào)試程序出現(xiàn)的問題及解決的方法。4、打印實(shí)驗(yàn)報(bào)告及程序清單。5、報(bào)告給出測試的結(jié)果。五、范例采用可變分區(qū)存儲(chǔ)器管理方案的模擬系統(tǒng)。1、問題描述該模擬系統(tǒng)的外部特性與真實(shí)系統(tǒng)基本一樣。存儲(chǔ)分配算法采用首次適應(yīng)法。用“拼,接”和“緊湊”技術(shù)來處理存儲(chǔ)器碎片。2、算法存儲(chǔ)分配算法采用首次適應(yīng)(FF)法。根據(jù)指針freep查找自由鏈,當(dāng)找到第一塊可滿足分配請求的空閑區(qū)時(shí)便分配之。當(dāng)某空閑區(qū)被分配后的剩余空閑區(qū)空間大于規(guī)定的碎片最小容量min時(shí),則形成一個(gè)較小的

3、空閑區(qū)留在自由鏈中。回收時(shí),根據(jù)MAT將指定分區(qū)鏈入自由鏈。若該分區(qū)有前鄰或后鄰空閑分區(qū),則將他們拼接成一塊加大的空閑區(qū)。當(dāng)某個(gè)分配請求不能被滿足,但此時(shí)系統(tǒng)中所有碎片總量滿足分配請求的容量時(shí),系統(tǒng)立即進(jìn)入內(nèi)存“緊湊”以消除碎片。即將各作業(yè)占用區(qū)集中下移到用戶內(nèi)存區(qū)的下部(高地址部分),形成一片連接的作業(yè)區(qū),而在用戶內(nèi)存區(qū)的上部形成一塊較大的空閑區(qū)。然后再進(jìn)行分配。本系統(tǒng)的主要程序模塊包括:分配模塊ffallocation,回收模塊ffcolection,緊湊模塊coalesce及命令處理模塊menu。Menu用以模擬系統(tǒng)的輸入,采用“命令菜單”選擇和鍵盤命令輸入的會(huì)話方式,根據(jù)輸入請求調(diào)用分

4、配模塊,或回收模塊,或內(nèi)存查詢模塊,或最終退出系統(tǒng)。系統(tǒng)的主流程如圖3所示。3、數(shù)據(jù)結(jié)構(gòu)自由鏈與區(qū)頭。內(nèi)存空閑區(qū)采用自由鏈結(jié)構(gòu)。鏈?zhǔn)子蒮reep指向,鏈中各個(gè)空閑區(qū)按地址遞增次序排列。初啟時(shí)整個(gè)用戶內(nèi)存區(qū)為一個(gè)空閑區(qū)。在每個(gè)空閑區(qū)首部設(shè)置一個(gè)區(qū)頭(freearca)結(jié)構(gòu)。區(qū)頭信息包括: size 空閑區(qū)大?。ㄒ宰止?jié)計(jì)),包括區(qū)頭所占空間; next 前向鏈指針,指向下一個(gè)空閑區(qū); back 反向鏈指針,指向上一個(gè)空閑區(qū); address 本空閑區(qū)首地址。內(nèi)存分配表MAT。系統(tǒng)設(shè)置一個(gè)MAT,每個(gè)運(yùn)行作業(yè)都在MAT中占有一個(gè)表目,回收分區(qū)時(shí)清除相應(yīng)表目。表目信息包括:name 用戶作業(yè)名;len

5、gth 作業(yè)區(qū)大小;addr 作業(yè)區(qū)首地址;4、程序清單#include#include#define TOTAL 5000#define SETADDRESS 2000#define MIN 100#define MAX 10typedef struct freeareaint address;int size;struct freearea *next;struct freearea *back;*freeptr;typedef struct matcharname;intaddress;intlength;struct mat *next;struct mat *back;*jobptr

6、;char string10;long totalfree;char jobnumber;freeptr freep;jobptr jobp;/*初始化*/init()freep=(freeptr)malloc(sizeof(struct freearea);freep-size=TOTAL;freep-address=SETADDRESS;freep-next=NULL;freep-back=NULL;totalfree=TOTAL;jobp=NULL;jobnumber=0;return(0);/*分配模塊*/fengpei(int jl,char jn)freeptr fp;jobptr

7、 jp,jp1,jp2;jp2=(jobptr)malloc(sizeof(struct mat);if(totalfreesizenext;elsejobnumber=jobnumber+1;totalfree=totalfree-jl;jp2-name=jn;jp2-length=jl;jp2-address=freep-address;if(jobp=NULL)jp2-next=NULL;jp2-back=NULL;jobp=jp2;elsejp=jobp;while(jp!=NULL&(jp2-addressaddress)jp1=jp;jp=jp-next;jp2-next=jp;i

8、f(jp=NULL)jp2-back=jp1;jp1-next=jp2;elsejp2-back=jp-back;if(jp-back!=NULL) jp1-next=jp2;else jobp=jp2;jp-back=jp2;if(fp-size-jl)next!=NULL)fp-next-back=fp-back;if(fp-back!=NULL)fp-back-next=fp-next;elsefreep=fp-next;/*return();*/elsefp-size=fp-size-jl;fp-address=fp-address+jl;return(2);if(totalfree=

9、jl) return(0);/*顯示模塊*/xianshi()jobptr jp;/*清屏*/if(jobnumbername,jp-length,jp-address);jp=jp-next;printf(nthe total left is %d bytes:,totalfree);/*回收模塊*/huishou(char jn)freeptr fp,fp1,fp2;jobptr jp;int f=0;jp=jobp;while(jp!=NULL)&(jp-name!=jn)jp=jp-next;if(jp!=NULL)jobnumber=jobnumber-1;totalfree=tot

10、alfree+jp-length;if(freep=NULL)freep=(freeptr)malloc(sizeof(struct freearea);freep-address=jp-address;freep-size=jp-address;freep-next=NULL;freep-back=NULL;elsefp=freep;while(fp!=NULL)&(fp-addressaddress)fp1=fp;fp=fp-next;if(fp!=NULL)if(fp-next!=NULL)&(fp-next-address=jp-address+jp-length)f=f+1;if(f

11、p-back!=NULL)&(jp-address=fp1-address+fp1-size)f=f+2;else if(jp-address)=(fp1-address+fp1-size)f=f+2; switch(f) case 0: fp2=(freeptr)malloc(sizeof(struct freearea);fp2-address=jp-address;fp2-size=jp-length;fp2-next=fp;if(fp!=NULL)fp2-back=fp-back;if(fp-back!=NULL)fp1-next=fp2;else freep=fp2;fp-back=

12、fp2;elsefp2-back=fp1;fp1-next=fp2; case 1:fp-size=fp-size+jp-length;fp-address=jp-address;case 2:fp1-size=fp1-size+jp-length;case 3:fp1-size=fp1-size+jp-length+fp-size;fp1-next=fp-next;if(fp-next!=NULL)fp-next-back=fp2;free(fp); if(jp=jobp) jobp=jp-next;if(jp-next!=NULL)jp-next-back=jp-back;if(jp-ba

13、ck!=NULL)jp-back-next=jp-next;free(jp);/*搬家*/banjia()freeptr fp,fp1;jobptr jp;long bottom;if(jobnumber0)jp=jobp;bottom=TOTAL+SETADDRESS;while(jp!=NULL)jp-address=bottom-jp-length;bottom=bottom-jp-length;jp=jp-next;fp=freep;while(fp!=NULL)fp1=fp;fp=fp-next;free(fp1);freep=(freeptr)malloc(sizeof(freep

14、tr);freep-size=totalfree;freep-address=SETADDRESS;freep-next=NULL;freep-back=NULL;mingling()char name,anykey,jobname;int length,select;int address;a1:printf(you can select one of the following:n);printf( (1)require to be allocaten);printf( (2)require to collexte the sizen);printf( (3)check the memor

15、yn);printf( (4)quit systemn);printf(you select is:);scanf(%d,&select);switch(select) case 1:if(jobnumber=MAX) printf(the job is too many);elseprintf(enter you job namen);scanf(%s,&name);printf(enter your job lengthn);scanf(%10d,&length);address=fengpei(length,name);switch(address)case 1:printf(the m

16、emory is full);break;case 0:banjia();fengpei(length,name);xianshi();break;case 2: xianshi();break;/*else xianshi();*/break;case 2:printf(enter the name of the jobn);printf(you select is:);jobname=getchar();jobname=getchar();huishou(jobname);xianshi();break;case 3:xianshi();break;case 4:goto a2;print

17、f(npress enter to return menun);anykey=getchar();anykey=getchar();/* scanf(%c,anykey); */goto a1;a2: printf(you have exit the system!); main()init();mingling();5、程序運(yùn)行結(jié)果本程序用TurboC語言編寫,運(yùn)行結(jié)果如下:you can select one of the following:require to be allocate。require to collecte the size。check the memory。quit。

18、you select:1 enter your job name:job1 enter your job length:1000 name legth (b)addressjob1 1000 2000the total left is:4000bytespress any key to return menu. . . .you select:1enter your job name: job4enter your job length:900 name legth(b)address job4 900 5900job3 700 5200job2 2200 3000job1 1000 2000 the total left is:200bytes . . .you select:2 enter the name of the job: job2name legth (b)addressjob4 900 5900job3 700 5200job1 1000 2000the tota1 left is:2400bytesyou select:1enter your job name: job5enter your job length: 2300name length (b)addressjob4 900 6100job3 700

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論