




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 乾縣勞動(dòng)合同范例
- 江蘇省南通市海安市2024-2025學(xué)年八年級(jí)(上)期末語(yǔ)文試卷【含答案】
- 2025年中考作文備考訓(xùn)練:《品味生活》范文6篇
- 7.1影響深遠(yuǎn)的人文精神課件 -2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 江蘇2025年江蘇財(cái)經(jīng)職業(yè)技術(shù)學(xué)院長(zhǎng)期招聘高層次人才45人筆試歷年參考題庫(kù)附帶答案詳解-1
- 曲靖2025年云南曲靖市事業(yè)單位委托招聘1220人(含委托招聘)筆試歷年參考題庫(kù)附帶答案詳解-1
- 廣東省九年級(jí)信息技術(shù)課件智能穿戴-讓我們的生活更智能
- 道路交通安全警示片
- 大學(xué)生心理健康教育 教案 第八章 戀愛與性心理
- 酒店員工人身安全培訓(xùn)
- (一模)2025屆安徽省“江南十?!备呷?lián)考地理試卷(含官方答案)
- 數(shù)學(xué)-2025屆安徽省江南十校聯(lián)考試題和解析
- 普通高中學(xué)生綜合素質(zhì)評(píng)價(jià)自我陳述報(bào)告
- 《展示設(shè)計(jì)》課件-第一章 展示設(shè)計(jì)概述
- 介入手術(shù)術(shù)中安全護(hù)理措施
- 投資銀行學(xué)第4版- 課件匯 馬曉軍 第1-4章 投資銀行概述-上市公司再融資
- 學(xué)生常見傳染病的預(yù)防
- 2025年月度工作日歷含農(nóng)歷節(jié)假日電子表格版
- 2024年長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 《森林資源資產(chǎn)評(píng)估》課件-森林資源經(jīng)營(yíng)
- 2025年中考語(yǔ)文復(fù)習(xí)課件 模塊三 語(yǔ)言綜合運(yùn)用
評(píng)論
0/150
提交評(píng)論