操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第1頁(yè)
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第2頁(yè)
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第3頁(yè)
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第4頁(yè)
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)xxx公司操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)文件編號(hào):文件日期:修訂次數(shù):第1.0次更改批準(zhǔn)審核制定方案設(shè)計(jì),管理制度存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法課程名稱:計(jì)算機(jī)操作系統(tǒng)班級(jí):信1501-2實(shí)驗(yàn)者姓名:李琛實(shí)驗(yàn)日期:2018年5月20日評(píng)分:教師簽名:一、實(shí)驗(yàn)?zāi)康姆謪^(qū)管理是應(yīng)用較廣泛的一種存儲(chǔ)管理技術(shù)。本實(shí)驗(yàn)要求用一種結(jié)構(gòu)化高級(jí)語(yǔ)言構(gòu)造分區(qū)描述器,編制動(dòng)態(tài)分區(qū)分配算法和回收算法模擬程序,并討論不同分配算法的特點(diǎn)。二、實(shí)驗(yàn)要求1、編寫:FirstFitAlgorithm2、編寫:BestFitAlgorithm3、編寫:空閑區(qū)回收算法三、實(shí)驗(yàn)過(guò)程(一)主程序1、定義分區(qū)描述器node,包括3個(gè)元素:(1)adr——分區(qū)首地址(2)size——分區(qū)大小(3)next——指向下一個(gè)分區(qū)的指針2、定義3個(gè)指向node結(jié)構(gòu)的指針變量:(1)head1——空閑區(qū)隊(duì)列首指針(2)back1——指向釋放區(qū)node結(jié)構(gòu)的指針(3)assign——指向申請(qǐng)的內(nèi)存分區(qū)node結(jié)構(gòu)的指針3、定義1個(gè)整形變量:free——用戶申請(qǐng)存儲(chǔ)區(qū)的大?。ㄓ捎脩翩I入)(二)過(guò)程1、定義check過(guò)程,用于檢查指定的釋放塊(由用戶鍵入)的合法性2、定義assignment1過(guò)程,實(shí)現(xiàn)FirstFitAlgorithm3、定義assignment2過(guò)程,實(shí)現(xiàn)BestFitAlgorithm4、定義acceptment1過(guò)程,實(shí)現(xiàn)FirstFitAlgorithm的回收算法5、定義acceptment2過(guò)程,實(shí)現(xiàn)BestFitAlgorithm的回收算法6、定義print過(guò)程,打印空閑區(qū)隊(duì)列(三)執(zhí)行程序首先申請(qǐng)一整塊空閑區(qū),其首址為0,大小為32767;然后,提示用戶使用哪種分配算法,再提示是分配還是回收;分配時(shí)要求輸入申請(qǐng)區(qū)的大小,回收時(shí)要求輸入釋放區(qū)的首址和大小。實(shí)驗(yàn)代碼#include<>#include<>#include<>#include<iostream>usingnamespacestd;#defineMAX_SIZE32767typedefstructnode{ intid; intadr; intsize; structnode*next;}Node;Node*head1,*head2,*back1,*back2,*assign;intrequest;intcheck(intadd,intsiz,charc){ Node*p,*head; intcheck=1; if(add<0||siz<0) check=0;/*地址和大小不能為負(fù)*/ if(c=='f'||c=='F') head=head1; else head=head2; p=head->next; while((p!=NULL)&&check) if(((add<p->adr)&&(add+siz>p->adr))||((add>=p->adr)&&(add<p->adr+p->size))) check=0; else p=p->next; if(check==0) printf("\t輸入釋放區(qū)地址或大小有錯(cuò)誤!??!\n"); returncheck;}voidinit(){ Node*p; head1=(Node*)malloc(sizeof(Node)); head2=(Node*)malloc(sizeof(Node)); p=(Node*)malloc(sizeof(Node)); head1->next=p; head2->next=p; p->size=MAX_SIZE; p->adr=0; p->next=NULL; p->id=0;}Node*assignment1(intnum,intreq){ Node*before,*after,*ass; ass=(Node*)malloc(sizeof(Node)); before=head1; after=head1->next; ass->id=num; ass->size=req; while(after->size<req) { before=before->next; after=after->next; } if(after==NULL) { ass->adr=-1; } else { if(after->size==req) { before->next=after->next; ass->adr=after->adr; } else { after->size-=req; ass->adr=after->adr; after->adr+=req; } } returnass;}voidacceptment1(intaddress,intsiz,intrd){ Node*before,*after; intinsert=0; back1=(Node*)malloc(sizeof(Node)); before=head1; after=head1->next; back1->adr=address; back1->size=siz; back1->id=rd; back1->next=NULL; while(!insert&&after) {//將要被回收的分區(qū)插入空閑區(qū)(按首址大小從小到大插入) if((after==NULL)||((back1->adr<=after->adr)&&(back1->adr>=before->adr))) { before->next=back1; back1->next=after; insert=1; } else { before=before->next; after=after->next; } } if(insert) { if(back1->adr==before->adr+before->size) {//和前邊分區(qū)合并 before->size+=back1->size; before->next=back1->next; free(back1); } elseif(after&&back1->adr+back1->size==after->adr) {//和后邊分區(qū)合并 back1->size+=after->size; back1->next=after->next; back1->id=after->id; free(after); after=back1; } printf("\t首先分配算法回收內(nèi)存成功!\n"); } else printf("\t首先分配算法回收內(nèi)存失??!\n");}Node*assignment2(intnum,intreq){ Node*before,*after,*ass,*q; ass=(Node*)malloc(sizeof(Node)); q=(Node*)malloc(sizeof(Node)); before=head2; after=head2->next; ass->id=num; ass->size=req; while(after->size<req) { before=before->next; after=after->next; } if(after==NULL) { ass->adr=-1; } else { if(after->size==req) { before->next=after->next; ass->adr=after->adr; } else { q=after; before->next=after->next; ass->adr=q->adr; q->size-=req; q->adr+=req; before=head2; after=head2->next; if(after==NULL) { before->next=q; q->next=NULL; } else { while((after->size)<(q->size)) { before=before->next; after=after->next; } before->next=q; q->next=after; } } } return(ass);}voidacceptment2(intaddress,intsiz,intrd){ Node*before,*after; intinsert=0; back2=(Node*)malloc(sizeof(Node)); before=head2; after=head2->next; back2->adr=address; back2->size=siz; back2->id=rd; back2->next=NULL; if(head2->next==NULL) {//空閑隊(duì)列為空 head2->next=back2; head2->size=back2->size; } else {//空閑隊(duì)列不為空 while(after) { if(back2->adr==after->adr+after->size) {//和前邊空閑分區(qū)合并 before->next=after->next; after->size+=back2->size; back2=after; } else { before=before->next; after=after->next; } } before=head2; after=head2->next; while(after) { if(after->adr==back2->adr+back2->size) {//和后邊空閑區(qū)合并 before->next=after->next; back2->size+=after->size; } else { before=before->next; after=after->next; } } before=head2; after=head2->next; while(!insert) {//將被回收的塊插入到恰當(dāng)?shù)奈恢茫ò捶謪^(qū)大小從小到大) if(after==NULL||((after->size>back2->size)&&(before->size<back2->size))) { before->next=back2; back2->next=after; insert=1; break; } else { before=before->next; after=after->next; } } } if(insert) printf("\t最佳適應(yīng)算法回收內(nèi)存成功!\n"); else printf("\t最佳適應(yīng)算法回收內(nèi)存失?。?!\n");}voidprint(charchoice)//輸出空閑區(qū)隊(duì)列信息{ Node*p; if(choice=='f'||choice=='F') p=head1->next; else p=head2->next; if(p) { printf("\n空閑區(qū)隊(duì)列的情況為:\n"); printf("\t編號(hào)\t首址\t終址\t大小\n"); while(p) { printf("\t%d\t%d\t%d\t%d\n",p->id,p->adr,p->adr+p->size-1,p->size); p=p->next; } }}voidmenu()//菜單及主要過(guò)程{ charchose; intch,num=0,r,add,rd; while(1) { system("cls"); printf("-------存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法-------\n"); printf("F最先適應(yīng)算法\n"); printf("B最佳適應(yīng)算法\n"); printf("E退出程序\n"); printf("----------------------------------------------\n"); printf("請(qǐng)選擇算法:"); cin>>chose; //scanf("%c",&chose); if(chose=='e'||chose=='E') exit(0); else { system("cls"); while(1) { if(chose=='f'||chose=='F') printf("最先適應(yīng)算法:\n"); if(chose=='b'||chose=='B') printf("最佳適應(yīng)算法:\n"); printf("----------------------------------------------\n"); printf("1分配內(nèi)存\n"); printf("2回收內(nèi)存\n"); printf("3查看內(nèi)存\n"); printf("4返回\n"); printf("----------------------------------------------\n\n"); printf("請(qǐng)選擇:"); scanf("%d",&ch); fflush(stdin); switch(ch) { case1: printf("輸入申請(qǐng)的分區(qū)大?。?);scanf("%d",&r); if(chose=='f'||chose=='F') assign=assignment1(num,r);

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論