




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
分區(qū)存儲管理模擬實(shí)驗(yàn)報(bào)告1.實(shí)驗(yàn)?zāi)康牧私鈩討B(tài)分區(qū)存儲管理方式中的數(shù)據(jù)結(jié)構(gòu)和分派算法,加深對動態(tài)分區(qū)存儲管理方式及其實(shí)現(xiàn)技術(shù)的理解。2.實(shí)驗(yàn)內(nèi)容用C語言或Pascal語言分別實(shí)現(xiàn)采用初次適應(yīng)算法和最佳適應(yīng)算法的動態(tài)分區(qū)分派過程Allocate()和回收過程Free()。其中,空閑分區(qū)采用空閑分區(qū)鏈來組織,內(nèi)存分派時(shí),優(yōu)先使用空閑區(qū)低地址部分的空間。假設(shè)初始狀態(tài),可用內(nèi)存空間為640KB,作業(yè)請求序列如下(也可以編程從鍵盤輸入,R表達(dá)請求,F表達(dá)釋放):作業(yè)1請求130KB。作業(yè)2請求60KB。作業(yè)3請求100KB。作業(yè)2釋放60KB。作業(yè)4請求200KB。作業(yè)3釋放100KB。作業(yè)1釋放130KB。作業(yè)5請求140KB。作業(yè)6請求60KB。作業(yè)7請求50KB。作業(yè)6釋放60KB。規(guī)定每次分派和回收后顯示出空閑區(qū)鏈的情況。假如不能為作業(yè)的請求進(jìn)行內(nèi)存分派,給出相應(yīng)的提醒信息。3.實(shí)驗(yàn)分析和思考采用初次適應(yīng)算法和最佳適應(yīng)算法,對內(nèi)存的分派和回收速度有什么影響?如何解決碎片片問題?具體設(shè)計(jì)初次適應(yīng)算法:當(dāng)要分派內(nèi)存空間時(shí),就查表,在各空閑區(qū)中查找滿足大小規(guī)定的可用塊。只要找到第一個(gè)足以滿足要球的空閑塊就停止查找,并把它分派出去;假如該空閑空間與所需空間大小同樣,則從空閑表中取消該項(xiàng);假如尚有剩余,則余下的部分仍留在空閑表中,但應(yīng)修改分區(qū)大小和分區(qū)始址。最佳適應(yīng)算法:當(dāng)要分派內(nèi)存空間時(shí),就查找空閑表中滿足規(guī)定的空閑塊,并使得剩余塊是最小的。然后把它分派出去,若大小恰好合適,則直按分派;若有剩余塊,則仍保存該余下的空閑分區(qū),并修改分區(qū)大小的起始地址。內(nèi)存回收:將釋放作業(yè)所在內(nèi)存塊的狀態(tài)改為空閑狀態(tài),刪除其作業(yè)名,設(shè)立為空。并判斷該空閑塊是否與其他空閑塊相連,若釋放的內(nèi)存空間與空閑塊相連時(shí),則合并為同一個(gè)空閑塊,同時(shí)修改分區(qū)大小及起始地址。typedefstructfreearea{}ElemType;定義一個(gè)空閑區(qū)說明表結(jié)構(gòu),每申請一個(gè)作業(yè),改作業(yè)便具有此結(jié)構(gòu)體typedefstructDuLNode{}DuLNode,*DuLinkList;定義一個(gè)雙向鏈表StatusInitblock(){}開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表,通過雙向鏈表把申請的作業(yè)鏈接起來,作業(yè)的插入和刪除,和鏈表中節(jié)點(diǎn)的插入和刪除類似。雙向鏈表如圖1所示StatusFirst_fit(intID,intrequest){}傳入作業(yè)名及申請量采用初次適應(yīng)算法實(shí)現(xiàn)動態(tài)內(nèi)存分區(qū)分派的模擬,初始態(tài)640KB,只是一個(gè)虛態(tài),每申請成功一個(gè)作業(yè),便相應(yīng)的640KB做相應(yīng)的減少,同過雙向鏈表模擬主存的分派情況。內(nèi)存分派流程如圖2所示Statusfree(cuò)(intID)傳過來需要回收的分區(qū)號實(shí)現(xiàn)分區(qū)的回收,對不同情況采用不同的解決voidshow()顯示當(dāng)前主存的分派情況源程序//----------------------------------------------------------------//---------動態(tài)分區(qū)分派方式的模擬---------//----------------------------------------------------------------#include<iostream.h>#include<stdlib.h>#defineFree0//空閑狀態(tài)#defineBusy1//已用狀態(tài)#defineOK1//完畢#defineERROR0//犯錯(cuò)#defineMAX_length640//最大內(nèi)存空間為640KBtypedefintStatus;typedefstructfreearea//定義一個(gè)空閑區(qū)說明表結(jié)構(gòu){ intID;//分區(qū)號 longsize;//分區(qū)大小 longaddress;//分區(qū)地址?intstate;//狀態(tài)}ElemType;//----------線性表的雙向鏈表存儲結(jié)構(gòu)------------typedefstructDuLNode//doublelinkedlist{?ElemTypedat(yī)a; structDuLNode*prior;//前趨指針?structDuLNode*next;//后繼指針}DuLNode,*DuLinkList;DuLinkListblock_first;//頭結(jié)點(diǎn)DuLinkListblock_last;//尾結(jié)點(diǎn)Statusalloc(int);//內(nèi)存分派Statusfree(int);//內(nèi)存回收StatusFirst_fit(int,int);//初次適應(yīng)算法StatusBest_fit(int,int);//最佳適應(yīng)算法voidshow();//查看分派StatusInitblock();//開創(chuàng)空間表StatusInitblock()//開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表{?block_first=(DuLinkList)malloc(sizeof(DuLN(yùn)ode));?block_last=(DuLinkList)malloc(sizeof(DuLNode));?block_first->prior=NULL;?block_first->next=block_last;?block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0;?block_last->data.size=MAX_length; block_last->data.ID=0; block_last->dat(yī)a.state=Free(cuò);?returnOK;}//-----------------------分配主存-------------------------Statusalloc(intch){?intID,request;?cout<<"請輸入作業(yè)(分區(qū)號):";?cin>>ID; cout<<"請輸入需要分派的主存大?。▎挝?KB):";?cin>>request; if(request<0||request==0)?{ cout<<"分派大小不合適,請重試!"<<endl; ?returnERROR; } if(ch==2)//選擇最佳適應(yīng)算法 { ?if(Best_fit(ID,request)==OK)cout<<"分派成功!"<<endl; ?elsecout<<"內(nèi)存局限性,分派失敗!"<<endl;??returnOK; } else//默認(rèn)初次適應(yīng)算法?{ if(First_fit(ID,request)==OK)cout<<"分派成功!"<<endl;? elsecout<<"內(nèi)存局限性,分派失敗!"<<endl;? returnOK;?}}//------------------初次適應(yīng)算法-----------------------StatusFirst_fit(intID,intrequest)//傳入作業(yè)名及申請量{?//為申請作業(yè)開辟新空間且初始化 DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));?temp->data.ID=ID; temp->data.size=request; temp->data.state=Busy;?DuLNode*p=block_first->next;?while(p) {??if(p->data.state==Free&&p->data.size==request)? {//有大小恰好合適的空閑塊 ??p->data.state=Busy; ?p->data.ID=ID; returnOK;? ?break; ?}??if(p->data.state==Free(cuò)&&p->dat(yī)a.size>request) {//有空閑塊能滿足需求且有剩余" ?temp->prior=p->prior;?? temp->next=p; ??temp->data.address=p->data.address; p->prior->next=temp;? p->prior=temp; p->data.address=temp->data.address+temp->data.size;?? p->data.size-=request;? ?returnOK;?? break; ?} ?p=p->next;?}?returnERROR;}//--------------------最佳適應(yīng)算法------------------------Stat(yī)usBest_fit(intID,intrequest){ intch;//記錄最小剩余空間?DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLN(yùn)ode)); temp->data.ID=ID;?temp->data.size=request; temp->data.state=Busy;?DuLNode*p=block_first->next;?DuLNode*q=NULL;//記錄最佳插入位置 while(p)//初始化最小空間和最佳位置?{ ?if(p->data.state==Free(cuò)&&? ?(p->data.size>request||p->data.size==request)) ?{???q=p; ? ch=p->dat(yī)a.size-request; break; } p=p->next;?}?while(p) { if(p->dat(yī)a.state==Free(cuò)&&p->data.size==request) {//空閑塊大小恰好合適 ??p->data.ID=ID;? p->data.state=Busy;???returnOK; ?break;??}? if(p->data.state==Free&&p->data.size>request) {//空閑塊大于分派需求 ?if(p->data.size-request<ch)//剩余空間比初值還小 ? {? ch=p->data.size-request;//更新剩余最小值 ?q=p;//更新最佳位置指向 ?}? }??p=p->next; }?if(q==NULL)returnERROR;//沒有找到空閑塊?else?{//找到了最佳位置并實(shí)現(xiàn)分派??temp->prior=q->prior;??temp->next=q; ?temp->dat(yī)a.address=q->data.address; ?q->prior->next=temp;? q->prior=temp;??q->dat(yī)a.address+=request;??q->dat(yī)a.size=ch;??returnOK; }}//-----------------------主存回收--------------------Statusfree(intID){?DuLNode*p=block_first;?while(p)?{??if(p->data.ID==ID)??{? p->data.state=Free; ??p->data.ID=Free;???if(p->prior->data.state==Free)//與前面的空閑塊相連 ?{ p->prior->data.size+=p->data.size; ???p->prior->next=p->next;? p->next->prior=p->prior; ? }?? if(p->next->data.state==Free)//與后面的空閑塊相連???{ ?? p->data.size+=p->next->dat(yī)a.size;? ??p->next->next->prior=p; ??p->next=p->next->next; ?? ??}?? ?break; ? } ?p=p->next;?} returnOK;}//---------------顯示主存分派情況------------------voidshow(){ cout<<"---------------------------------------\n"; cout<<"---主存分配情況---\n"; cout<<"---------------------------------------\n"; DuLN(yùn)ode*p=block_first->next;?while(p)?{? cout<<"分區(qū)號:";? if(p->dat(yī)a.ID==Free)cout<<"Free"<<endl;??elsecout<<p->data.ID<<endl; ?cout<<"起始地址:"<<p->dat(yī)a.a(chǎn)ddress<<endl;??cout<<"分區(qū)大小:"<<p->data.size<<"KB"<<endl; cout<<"狀態(tài):"; ?if(p->data.state==Free)cout<<"空閑"<<endl; elsecout<<"已分派"<<endl;??cout<<"--------------"<<endl;? p=p->next;?}}//-----------------------主函數(shù)---------------------------voidmain(){ intch;//算法選擇標(biāo)記?cout<<"動態(tài)分區(qū)分派方式的模擬\n"; cout<<"------------------------------------\n"; cout<<"--1)初次適應(yīng)算法2)最佳適應(yīng)算法
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高碑店假山的施工方案
- 碎石加工施工方案
- 總包與勞務(wù)分包消防協(xié)議
- 基坑爬梯施工方案
- 逆變一體機(jī)基礎(chǔ)施工方案
- 佛山歐式花園施工方案
- 上海倍發(fā)信息科技有限公司股東全部權(quán)益價(jià)值資產(chǎn)評估報(bào)告
- 建元信托2024年度審計(jì)報(bào)告及財(cái)務(wù)報(bào)表
- 浙江紡織電纜托架施工方案
- 澄海區(qū)中學(xué)初二數(shù)學(xué)試卷
- 好的心理治愈只需一次:《了凡四訓(xùn)》的心理學(xué)解讀
- 三年級aredcoat公開課一等獎(jiǎng)?wù)n件省賽課獲獎(jiǎng)?wù)n件
- 污水處理廠項(xiàng)目委托運(yùn)營協(xié)議
- 小螞蟻搬家繪本故事
- 開展因私出國境管理工作的自查報(bào)告10篇
- 分子克隆及蛋白表達(dá)常見問題和對策
- 全美國聯(lián)邦刑事訴訟規(guī)則(中英文對照)
- 哈爾濱LED廣告市場 媒體數(shù)據(jù)分析
- 載波與測距碼
- 鋼結(jié)構(gòu)設(shè)計(jì)手冊
- (新版)特種設(shè)備安全管理高分通關(guān)題庫600題(附答案)
評論
0/150
提交評論