




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)三 存儲(chǔ)器管理一、實(shí)驗(yàn)?zāi)康?1 了解內(nèi)存管理的基本功能2 掌握內(nèi)存管理中的幾種內(nèi)存分配與回收算法3 掌握可變分區(qū)算法中空閑分區(qū)的合并方法 二、實(shí)驗(yàn)內(nèi)容與要求 設(shè)計(jì)一個(gè)存儲(chǔ)器管理模擬系統(tǒng)并調(diào)試運(yùn)行。要求采用一種常用的存儲(chǔ)器分配算法(如:最佳適應(yīng)算法、最壞適應(yīng)算法),設(shè)計(jì)一個(gè)存儲(chǔ)器管理模擬系統(tǒng)。允許進(jìn)行多次的分配和釋放,并可向用戶反饋分配和釋放情況及當(dāng)前內(nèi)存的情況;采用“命令菜單”選擇和鍵盤(pán)命令輸入的會(huì)話方式,根據(jù)輸入請(qǐng)求調(diào)用分配模塊,或回收模塊,或內(nèi)存查詢(xún)模塊,或最終退出系統(tǒng)。三、實(shí)驗(yàn)參考下面是采用的是首次適應(yīng)分配算法的一個(gè)示例。根據(jù)指針freep查找自由鏈,當(dāng)找到第一塊可滿足分配請(qǐng)求的空閑
2、區(qū)時(shí)便分配之。當(dāng)某空閑區(qū)被分配后的剩余空閑區(qū)空間大于規(guī)定的碎片最小容量min時(shí),則形成一個(gè)較小的空閑區(qū)留在自由鏈中。回收時(shí),根據(jù)MAT將指定分區(qū)鏈入自由鏈。若該分區(qū)有前鄰或后鄰空閑分區(qū),則將他們拼接成一塊加大的空閑區(qū)。當(dāng)某個(gè)分配請(qǐng)求不能被滿足,但此時(shí)系統(tǒng)中所有碎片總量滿足分配請(qǐ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及命令處理模塊men
3、u。Menu用以模擬系統(tǒng)的輸入,采用“命令菜單”選擇和鍵盤(pán)命令輸入的會(huì)話方式,根據(jù)輸入請(qǐng)求調(diào)用分配模塊,或回收模塊,或內(nèi)存查詢(xún)模塊,或最終退出系統(tǒng)。用到的數(shù)據(jù)結(jié)構(gòu)如下:(1) 自由鏈與區(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ū)首地址。(2) 內(nèi)存分配表MAT。系統(tǒng)設(shè)置一個(gè)MAT,每個(gè)運(yùn)行
4、作業(yè)都在MAT中占有一個(gè)表目,回收分區(qū)時(shí)清除相應(yīng)表目。表目信息包括:name 用戶作業(yè)名;length 作業(yè)區(qū)大??;addr 作業(yè)區(qū)首地址;begin初始化現(xiàn)實(shí)命令菜單讀參數(shù)讀命令讀參數(shù)showyouffallocationffcollection顯示回收結(jié)果分配成功總空區(qū)容量夠分配?顯示不能分配coalesceffallocation顯示分配結(jié)果讀鍵盤(pán)end示例代碼#include<stdio.h>#include<stdlib.h>#define TOTAL 5000#define SETADDRESS 2000#define MIN 100#define MAX
5、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;char string10;long totalfree;char jobnumber;freeptr freep;jobptr jobp;/*初始化*/init()freep=(freeptr)malloc(sizeof
6、(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 jp,jp1,jp2;jp2=(jobptr)malloc(sizeof(struct mat);if(totalfree<jl) return(1);fp=freep;while(f
7、p!=NULL)if(fp->size<jl)fp=fp->next;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->address<jp->address)jp1=jp;jp=
8、jp->next;jp2->next=jp;if(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)<MIN)if(fp->next!=NULL)fp->next->back=fp->back;if(fp->back!=NULL)fp->back->next=fp->
9、next;elsefreep=fp->next;/*return();*/elsefp->size=fp->size-jl;fp->address=fp->address+jl;return(2);if(totalfree>=jl) return(0);/*顯示模塊*/xianshi()jobptr jp;/*清屏*/if(jobnumber<=0) printf("NO JOB!");elseprintf("namettlengthttaddressn");jp=jobp;while(jp!=NULL)prin
10、tf("%ctt%dtt%dn",jp->name,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
11、-1;totalfree=totalfree+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->address<jp->address)fp1=fp;fp=fp->next;if(fp!
12、=NULL)if(fp->next!=NULL)&&(fp->next->address=jp->address+jp->length)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
13、);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=fp2;elsefp2->back=fp1;fp1->next=fp2; case 1:fp->size=fp->size+jp->length;fp->address=jp->address;case
14、 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->back!=NULL)jp->back-&
15、gt;next=jp->next;free(jp);/*搬家*/banjia()freeptr fp,fp1;jobptr jp;long bottom;if(jobnumber>0)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)mallo
16、c(sizeof(freeptr);freep->size=totalfree;freep->address=SETADDRESS;freep->next=NULL;freep->back=NULL;mingling()char name,anykey,jobname;int length,select;int address;a1:clrscr();printf("you can select one of the following:n");printf(" (1)require to be allocaten");print
17、f(" (2)require to collexte the sizen");printf(" (3)check the memoryn");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("en
18、ter you job namen");scanf("%s",&name);printf("enter your job lengthn");scanf("%10d",&length);address=fengpei(length,name);switch(address)case 1:printf("the memory 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()
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理配藥計(jì)算講解
- 管理學(xué)原理組織結(jié)構(gòu)
- 居民議事協(xié)商能力提升培訓(xùn)
- 永煤消防考試題庫(kù)及答案
- 銀行研發(fā)面試題目及答案
- 中國(guó)好老師信息技術(shù)與學(xué)科教學(xué)深度融合培訓(xùn)心得體會(huì)模版
- 2025年蘇教版科學(xué)小學(xué)四年級(jí)下冊(cè)期末復(fù)習(xí)檢測(cè)題附答案(三)
- 陽(yáng)城公務(wù)員考試題及答案
- 敘永公務(wù)員考試題目及答案
- 行政公務(wù)員的考試題及答案
- 酒店VI設(shè)計(jì)清單
- (食品經(jīng)營(yíng)許可-范本)申請(qǐng)人經(jīng)營(yíng)條件未發(fā)生變化的聲明
- 商務(wù)禮儀之辦公室禮儀課件
- 高頻變壓器作業(yè)指導(dǎo)書(shū)
- 事業(yè)單位招聘人員體檢表
- Visio圖標(biāo)-visio素材-網(wǎng)絡(luò)拓?fù)鋱D庫(kù)
- 軌道交通建設(shè)工程施工現(xiàn)場(chǎng)消防安全管理課件
- 綠色施工策劃書(shū)(模板)
- 騰訊微博VS新浪微博
- 公共政策導(dǎo)論完整版課件全套ppt教學(xué)教程(最新)
- 肺癌生活質(zhì)量量表
評(píng)論
0/150
提交評(píng)論