實(shí)驗(yàn)三存儲器管理系統(tǒng)_第1頁
實(shí)驗(yàn)三存儲器管理系統(tǒng)_第2頁
實(shí)驗(yàn)三存儲器管理系統(tǒng)_第3頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)三存儲器管理、實(shí)驗(yàn)?zāi)康?了解內(nèi)存管理的基本功能2.掌握內(nèi)存管理中的幾種內(nèi)存分配與回收算法3掌握可變分區(qū)算法中空閑分區(qū)的合并方法、實(shí)驗(yàn)內(nèi)容與要求設(shè)計(jì)一個存儲器管理模擬系統(tǒng)并調(diào)試運(yùn)行。要求采用一種常用的存儲器 分配算法(如:最佳適應(yīng)算法、最壞適應(yīng)算法),設(shè)計(jì)一個存儲器管理模擬系 統(tǒng)。允許進(jìn)行多次的分配和釋放,并可向用戶反饋分配和釋放情況及當(dāng)前內(nèi) 存的情況;采用“命令菜單”選擇和鍵盤命令輸入的會話方式,根據(jù)輸入請 求調(diào)用分配模塊,或回收模塊,或內(nèi)存查詢模塊,或最終退出系統(tǒng)。三、實(shí)驗(yàn)參考下面是采用的是首次適應(yīng)分配算法的一個示例。根據(jù)指針freep查找自由鏈,當(dāng)找到第一塊可滿足分配請求的空閑區(qū)時便分

2、配之。當(dāng)某空閑區(qū)被分配 后的剩余空閑區(qū)空間大于規(guī)定的碎片最小容量 min時,則形成一個較小的空 閑區(qū)留在自由鏈中?;厥諘r,根據(jù)MAT將指定分區(qū)鏈入自由鏈。若該分區(qū)有前鄰或后鄰空閑 分區(qū),則將他們拼接成一塊加大的空閑區(qū)。當(dāng)某個分配請求不能被滿足,但此時系統(tǒng)中所有碎片總量滿足分配請求的 容量時,系統(tǒng)立即進(jìn)入內(nèi)存“緊湊”以消除碎片。即將各作業(yè)占用區(qū)集中下 移到用戶內(nèi)存區(qū)的下部(高地址部分),形成一片連接的作業(yè)區(qū),而在用戶 內(nèi)存區(qū)的上部形成一塊較大的空閑區(qū)。然后再進(jìn)行分配。本系統(tǒng)的主要程序模塊包括:分配模塊 ffallocation,回收模塊ffcolection, 緊湊模塊coalesce及命令處理

3、模塊menu。Menu用以模擬系統(tǒng)的輸入,采用 “命令菜單”選擇和鍵盤命令輸入的會話方式,根據(jù)輸入請求調(diào)用分配模塊, 或回收模塊,或內(nèi)存查詢模塊,或最終退出系統(tǒng)。用到的數(shù)據(jù)結(jié)構(gòu)如下:(1)自由鏈與區(qū)頭。內(nèi)存空閑區(qū)采用自由鏈結(jié)構(gòu)。鏈?zhǔn)子?freep指向,鏈 中各個空閑區(qū)按地址遞增次序排列。初啟時整個用戶內(nèi)存區(qū)為一個空 閑區(qū)。在每個空閑區(qū)首部設(shè)置一個區(qū)頭(freearca)結(jié)構(gòu)。區(qū)頭信息包 括:size n ext back address空閑區(qū)大?。ㄒ宰止?jié)計(jì)),包括區(qū)頭所占空間; 前向鏈指針,指向下一個空閑區(qū); 反向鏈指針,指向上一個空閑區(qū);本空閑區(qū)首地址。(2)內(nèi)存分配表MAT。系統(tǒng)設(shè)置一個M

4、AT,每個運(yùn)行作業(yè)都在 MAT中占 有一個表目,回收分區(qū)時清除相應(yīng)表目。表目信息包括:n ame len gth addr用戶作業(yè)名; 作業(yè)區(qū)大??; 作業(yè)區(qū)首地址;示例代碼#i nclude<stdio.h>#i nclude<stdlib.h>#defi ne TOTAL 5000#defi ne SETADDRESS 2000#defi ne MIN 100#defi ne MAX 10 typedef struct freearea int address;int size;struct freearea *n ext; struct freearea *back

5、; *freeptr;typedef struct mat char n ame;int address;int len gth; struct mat *n ext;struct mat *back;*jobptr;char stri ng10; long totalfree;char job nu mber; freeptr freep;jobptr jobp;*始化 *ini t()freep=(freeptr)malloc(sizeof(struct freearea); freep->size=TOTAL;freep->address=SETADDRESS;freep-&

6、gt;n ext=NULL;freep->back=NULL;totalfree=TOTAL;jobp=NULL;jobnu mber=0;return(0);分配模塊*/fen gpei (int jl,char jn)freeptr fp;jobptr jp,jp1,jp2;jp2=(jobptr)malloc(sizeof(struct mat);if(totalfree<jl) return(1);fp=freep;while(fp!=NULL)if(fp->size<jl) fp=fp->n ext;elsejob nu mber=job nu mber

7、+1;totalfree=totalfree-jl;jp2->n ame=j n;jp2->le ngth=jl;jp2->address=freep->address;if(jobp=NULL)jp2-> next=NULL;jp2->back=NULL;jobp=jp2;else jp=jobp;while(jp!=NULL&&(jp2->address<jp->address) jp1=jp;jp=jp-> next;jp2->n ext=jp;if(jp=NULL) jp2_>back=jp1; j

8、p1- >n ext=jp2;else jp2->back=jp->back; if(jp->back!=NULL) jp1-> next=jp2; else jobp=jp2;jp->back=jp2;if(fp->size-jl)<MIN)if(fp-> next!=NULL)fp->n ext->back=fp->back;if(fp->back!=NULL)fp->back- >n ext=fp->n ext;else freep=fp->n ext;/*return。;*/ else

9、fp->size=fp->size-jl; fp->address=fp->address+jl;return(2);if(totalfree>=jl) return(O);/*顯示模塊 */xia nshi() jobptr jp;/*清屏*/if(job number<=0) pri ntf("NO JOB!"); else printf("n amettle ngthttaddressn");jp=jobp;while(jp!=NULL)prin tf("%ctt%dtt%dn",jp->

10、; name,jp->le ngth,jp->address); jp=jp->n ext;prin tf("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->n ame!=j n) jp=jp->n ext; if(jp!=NULL)job nu mber=job nu mber-1; totalfree=tota

11、lfree+jp->le ngth; if(freep=NULL)freep=(freeptr)malloc(sizeof(struct freearea); freep->address=jp->address;freep->size=jp->address;freep->n ext=NULL;freep->back=NULL;elsefp=freep;while(fp!=NULL)&&(fp->address<jp->address)fp仁fp;fp=fp_>n ext;if(fp!=NULL)if(fp-&

12、gt;n ext!=NULL )&&(fp->n ext->address=jp->address+jp->le ngth) f=f+1;if(fp->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->

13、;address=jp->address;fp2->size=jp->le ngth;fp2->n ext=fp;if(fp!=NULL)fp2->back=fp->back;if(fp->back!=NULL)fp1- >n ext=fp2;else freep=fp2;fp->back=fp2;elsefp2->back=fp1;fp1- >n ext=fp2;case 1:fp->size=fp->size+jp->le ngth;fp->address=jp->address;case 2:

14、fp1->size=fp1->size+jp->le ngth;case 3:fp1->size=fp1->size+jp->le ngth+fp->size;fp1- >n ext=fp->n ext;if(fp-> next!=NULL)fp-> next->back=fp2;free(fp);if(jp=jobp)jobp=jp->n ext;if(jp->n ext!=NULL)jp->n ext->back=jp->back;if(jp->back!=NULL)jp->b

15、ack- >n ext=jp->n ext;free(jp);搬* banjia()freeptr fp,fp1; jobptr jp;long bottom;if(job nu mber>0) jp=jobp;bottom=TOTAL+SETADDRESS; while(jp!=NULL)jp->address=bottom-jp->le ngth; bottom=bottom-jp->le ngth; jp=jp->n ext;fp=freep;while(fp!=NULL)fp仁fp;fp=fp_>n ext;free(fp1);freep

16、=(freeptr)malloc(sizeof(freeptr); freep->size=totalfree;freep->address=SETADDRESS; freep->n ext=NULL;freep->back=NULL;mi ngli ng()char n ame,a nykeyjob name; int len gth,select;int address;a1:clrscr();printf("you can select one of the following:n");printf(”("require to be

17、allocaten");printf(” (2)require to collexte the sizen");printf(” (3)check the memoryn");prin tf(" (4)quit systemn");prin tf("you select is:");scan f("%d", &select);switch(select) case 1:if(job nu mber>=MAX) prin tf("the job is too many ”); els

18、eprin tf("e nter you job n amen");scan f("%s",&n ame);prin tf("e nter your job len gthn");scan f("%10d",&len gth);address=fe ngpei(le ngth ,n ame); switch(address)case 1:prin tf("the memory is full");break;case 0:banjia();fen gpei(le ngth ,n ame); xia nshi();break;case 2: xia nshi();break;/*ebexia nshi();*/break; case 2:prin tf("e nter the n ame of the jobn"); prin tf("you select is:");job name=getchar();job na

溫馨提示

  • 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

提交評論