版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
實驗四存分配算法實驗目的一個好的計算機系統(tǒng)不僅要有一個足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲器,而且要能合理地分配和使用這些存儲空間。當用戶提出申請主存儲器空間時,存儲管理必須根據(jù)申請者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閑區(qū)域分配給申請者。當作業(yè)撤離或主動歸還主存資源時,則存儲管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實現(xiàn)是與主存儲器的管理方式有關(guān)的,通過本實驗幫助學生理解在動態(tài)分區(qū)管理方式下應怎樣實現(xiàn)主存空間的分配和回收。背景知識:可變分區(qū)方式是按作業(yè)需要的主存空間大小來分割分區(qū)的。當要裝入一個作業(yè)時,根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個分區(qū)分配給該作業(yè);若無,則作業(yè)不能裝入。隨著作業(yè)的裝入、撤離、主存空間被分成許多個分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。賣驗容采用首次適應算法或循環(huán)首次算法或最佳適應算法分配主存空間。由于本實驗是模擬主存的分配,所以當把主存區(qū)分配給作業(yè)后并不實際啟動裝入程序裝入作業(yè),而用輸出“分配情況”來代替。(即輸出當時的空閑區(qū)說明表及其存分配表)利用VC++6.0實現(xiàn)上述程序設計和調(diào)試操作。實驗代碼#include<iostream>#include<list>usingnamespacestd;//定義存的大小constintSIZE=64;〃作業(yè)結(jié)構(gòu)體,保存作業(yè)信息structProject{intnumber;intlength;};〃存塊結(jié)構(gòu)體,保存存塊信息structBlock{intaddress;intlength;intbusy;};intfirst_fit(list<Block>&,Project,list<Project>&);//聲明首次適配算法函數(shù)intbest_fit(list<Block>&,Project,list<Project>&);//聲明最佳適配算法函數(shù)intnext_fit(list<Block>&,Project,list<Project>&);//聲明下次適配算法函數(shù)voidswap_out(list<Block>&,Project,list<Project>&);//聲明換出作業(yè)的函數(shù)voidprint_info(list<Block>,list<Project>);//聲明打印存和作業(yè)函數(shù)intremain_length(list<Block>);//聲明計算剩余存的函數(shù)intmain()(list<Block>B_List;list<Project>P_List;Blockm1={1,SIZE,0};B_List.push_back(m1);print_info(B_List,P_List);while(true){cout<<"\n\t\t1.裝入作業(yè)"<<endl<<"\t\t2.換出作業(yè)"<<endl<<"\t\t3.退出\n"<<endl<<"請選擇操作:";intchoice;cin>>choice;switch(choice){case1://裝入作業(yè){cout<<-請選擇裝入方式:(1.首次適配2.最佳適配3.下次適配):\n";intc1;cin>>c1;cout<<"請輸入作業(yè)號「作業(yè)號不能重復):";intc2;cin>>c2;cout<<"請輸入作業(yè)所需存:”;intc3;cin>>c3;Projectp={c2,c3};if(c1==1){first_fit(B_List,p,P_List);}elseif(c1==2){best_fit(B_List,p,P_List);}elseif(c1==3)(next_fit(B_List,p,P_List);}print_info(B_List,P_List);break;}case2://換出作業(yè){cout<<”請選擇需換出存的作業(yè):”;intc3;cin>>c3;Projectp={c3,5};swap_out(B_List,p,P_List);print_info(B_List,P_List);break;}default://退出{return0;}〃首次適配intfirst_fit(list<Block>&L1,Projectp,list<Project>&L2){list<Block>::iteratori;〃遍歷列表查找空閑分區(qū)for(i=L1.begin();i!=L1.end();i++){〃空閑分區(qū)大小和作業(yè)相同if(p.length==i->length&&i->busy==0){i->busy=p.number;L2.push_back(p);return1;}〃空閑分區(qū)比作業(yè)存大if(p.length<i->length&&i->busy==0){i->busy=p.number;intlen=i->length-p.length;i->length=p.length;Blockm={i->address+p.length,len,0};L1.insert(++i,m);i--;L2.push_back(p);return1;}}cout<<”存不足,作業(yè)”<<p.number<<”裝入失敗”<<endl;return0;}〃最佳適配intbest_fit(list<Block>&L1,Projectp,list<Project>&L2)(list<Block>::iteratori,j;intmin=100000;for(i=L1.begin();i!=L1.end();i++)(if(i->length-p.length>-1&&i->length-p.length<min&&i->busy==0)(j=i;〃找到大于或等于作業(yè)存的最小空閑存min=i->length-p.length;}}i=j;〃空閑分區(qū)大小和作業(yè)相同if(min==0)(i->busy=p.number;L2.push_back(p);return1;}〃空閑分區(qū)比作業(yè)存大elseif(min!=100000)(i->busy=p.number;intlen=i->length-p.length;i->length=p.length;Blockm={i->address+p.length,len,0};L1.insert(++i,m);i--;L2.push_back(p);return1;}if(i==--L1.end()){cout<<”存不足,作業(yè)”<<p.number<<”裝入失敗”<<endl;return0;}〃下次適配intnext_fit(list<Block>&L1,Projectp,list<Project>&L2){intpnumber=L2.back().number;list<Block>::iteratori;〃找到前一次裝入的作業(yè)位置for(i=L1.begin();i!=L1.end();i++){if(i->busy==pnumber){break;}}for(;i!=L1.end();i++){〃空閑分區(qū)大小和作業(yè)相同if(p.length==i->length&&i->busy==0){i->busy=p.number;L2.push_back(p);return1;}〃空閑分區(qū)比作業(yè)存大if(p.length<i->length&&i->busy==0){i->busy=p.number;intlen=i->length-p.length;i->length=p.length;Blockm={i->address+p.length,len,0};L1.insert(++i,m);i--;L2.push_back(p);return1;}if(i==--L1.end()){cout<<”存不足,作業(yè)”<<p.number<<”裝入失敗”<<endl;return0;}}return0;}〃換出作業(yè)voidswap_out(list<Block>&L1,Projectp,list<Project>&L2)(intpnumber=p.number;list<Project>::iteratori2;for(i2=L2.begin();i2!=L2.end();i2++){〃根據(jù)作業(yè)號換出作業(yè)if((*i2).number==pnumber){L2.erase(i2);break;list<Block>::iteratori,j,k;for(i=L1.begin();i!=L1.end();i++)(if(i->busy==pnumber)(i->busy=0;j=i;k=i;if(j!=L1.begin()){j--;〃換出作業(yè)后前一個空閑區(qū)正好能連接if(j->busy==0){i->length+=j->length;i->address=j->address;L1.erase(j);}}k++;〃換出作業(yè)后后一個空閑區(qū)正好能連接if(k->busy==0){i->length+=((*k).length);L1.erase(k);}break;}}}〃計算剩余存intremain_length(list<Block>L1){list<Block>::iteratori;〃當前所有作業(yè)占用的總存intlen=0;for(i=L1.begin();i!=L1.end();i++){if(i->busy!=0)len+=i->length;}returnSIZE-len;}voidprint_info(list<Block>L1,list<Project>L2)(cout<<''\n***********************************************“<<endl;cout<<"總存:"<<SIZE<<"\t剩余存:"<<remain_length(L1)<<endl;list<Block>::iteratori;for(i=L1.begin();i!=L1.end();i++)(if(i->busy==0)(cout<<"首地址:"<<i->address<<長度:<<i->length<<"空閑"<<endl;}elsecout<<"首地址:<<"占用"<<endl;"<<i->address<<長度:<<i->length<<"被作業(yè)”<<i->busy}cout<<"***********************************************"<<cout<<"作業(yè)明細(按進入順序排):"<<endl;list<Project>::iteratorj;for(j=L2.begin();j!=L2.end();j++)(cout<<"作業(yè)號:"<<j->number<<"長度:<<endl;j->length<<endl;}cout<<"***********************************************"<<endl;4.運行截圖1.初始時存情況:2.采用首次適配算法依次放入作業(yè)1(10),作業(yè)2(5)作業(yè)3(20)作業(yè)4(15)后的存情況:曲C:\Windo曲C:\Windows\system32\cmdexe回清謠芋裝人育式,J苜灰指郵2.最*古配3.|?'也古配>(住業(yè)虧不能重復):4需內(nèi)存:15土月主后dJ-JJJ-(住業(yè)虧不能重復):4需內(nèi)存:15土月主后dJ-JJJ-KSNHN3--R-M崩宵512k-b-H業(yè)讓可!■胳-£E-.E.”_'iM4*.無M1M054M05211*1M■■6-*>151F11G6L歸壬匚十壬111J京-按1234;I坦圻出此出g細昏牛字孚L仔-lh*丈4-tt"昕業(yè)業(yè)小業(yè)0'目旦旦目一S"芒〕心作業(yè)廿入出出裝莎退■■II±23XTJJJ.主乒3.換出作業(yè)2后存情況:曲C:\Windows\system32\cmdexe2瞻出羊操JJJJJJ芭選主單青,1序成房二]1?--:sf.工祜rt.L.JAH-54-0521111661111354s..址址址址址回且fi.nl一且白S00S^■121Frr辰度度-i點;34(s>r細口r;號RJJ.1=JJ作暗我譯操乍回II回II4.采用最佳適配算法放入作業(yè)5(3)后的存情況:請我岸操,S3C:*.Wi11doW5\system32\cimdexe^M乘入入主F土后業(yè)號(隹業(yè)號不能重復)=E業(yè)所需大仟:3XmhiaiI-釗右一字溪苴度度岌-神X訓忐/.£:;1>1>(KX明f-wf.-f.j>加壬'■rTTTm質(zhì)度度磨度MM14661X111135H4FJ_*rullllBr>uEEaa*£EEBr?u心..址址址址址址5細號號M號”棄地地*丈4丈“昕業(yè)業(yè)小業(yè)心lilfi■目旦a'nl百"054M-032211*XM!00sJ1213±±5.換出作業(yè)3采用最佳適配算法放入作業(yè)6(13)存情況:期噩W*,6函■-:!.Windc-\v5\systemS2\cndexeX-■032111m:053*RflkX0.J.MMMX_TMK內(nèi)IXM削3甯簧度度夏神--r富14G14MKZI壬.!<-■,壬11135fi京-按1456ruEEMr>uEEEXruEE?ruuJ1131±±M乘X.4""址址址址址址『細號口r;號i地地地地地*m*E回-HT4.4T
主框啟0'豆且身且旦目明細號號號J『號1力十壬史(?壬按—456回-HT4.4T
主框啟0'豆且身且旦目明細號號號J『號1力十壬史(?壬按—45674■■I????■?■■
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 與書為友話題類作文15篇
- 高職院校訂單式培養(yǎng)模式實施方案
- 企業(yè)流程審批自定義動態(tài)模板方案
- 企業(yè)團隊建設活動方案規(guī)劃表
- 小學春游經(jīng)歷記事作文(7篇)
- 描述校園的秋天寫景作文6篇范文
- 小學作文懂得道理作文12篇范文
- 企業(yè)經(jīng)營業(yè)績持續(xù)穩(wěn)定承諾書7篇
- 腳手架搭建與安全施工方案
- 招聘會現(xiàn)場安全管理方案
- 兩人工地合作協(xié)議書范文范本
- 英文繪本故事Brown.Bear.Brown.Bear.What.Do.You.See
- (高清版)JTGT 3371-01-2022 公路沉管隧道設計規(guī)范
- 日語假名的羅馬字打字法及其發(fā)音一覽
- 《如何給未來的自己寫一封信》小學四五年級語文習作
- NB-T 20619-2021 壓水堆核電廠放射性廢液處理系統(tǒng)設計準則
- 2023年數(shù)學競賽AMC8試卷(含答案)
- 空調(diào)銅管規(guī)格尺寸及重量計算
- 移動電源規(guī)格書
- 七年級下冊數(shù)學期末考試試卷共十套
- 餐飲部物品清單
評論
0/150
提交評論