最佳適應(yīng)算法源代碼6頁(yè)_第1頁(yè)
最佳適應(yīng)算法源代碼6頁(yè)_第2頁(yè)
最佳適應(yīng)算法源代碼6頁(yè)_第3頁(yè)
最佳適應(yīng)算法源代碼6頁(yè)_第4頁(yè)
最佳適應(yīng)算法源代碼6頁(yè)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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)介

1、#include <iostream.h>#include <iomanip.h>/全局變量float minsize=5;int count1=0;int count2=0;#define m 10/假定系統(tǒng)允許的空閑區(qū)表最大為m#define n 10 /假定系統(tǒng)允許的最大作業(yè)數(shù)量為n/已分配表的定義structfloat address; /已分分區(qū)起始地址 float length; /已分分區(qū)長(zhǎng)度,單位為字節(jié) int flag; /已分配區(qū)表登記欄標(biāo)志,"0"表示空欄目used_tablen; /已分配區(qū)表對(duì)象名/空閑區(qū)表的定義:struc

2、tfloat address;/空閑區(qū)起始地址 float length;/空閑區(qū)長(zhǎng)度,單位為字節(jié) int flag; /空閑區(qū)表登記欄標(biāo)志,用"0"表示空欄目,用"1"表示未分配free_tablem; /空閑區(qū)表對(duì)象名/函數(shù)聲明void initialize(void);int distribute(int, float);int recycle(int);void show();/初始化兩個(gè)表void initialize(void)int a;for(a=0; a<=n-1; a+)used_tablea.flag=0;/已分配表的表項(xiàng)全部

3、置為空表項(xiàng)free_table0.address=1000;free_table0.length=1024;free_table0.flag=1;/空閑區(qū)表的表項(xiàng)全部為未分配/最優(yōu)分配算法實(shí)現(xiàn)的動(dòng)態(tài)分區(qū)int distribute(int process_name, float need_length)int i, k=-1;/k用于定位在空閑表中選擇的未分配欄float ads, len;int count=0;i=0; while(i<=m-1) /循環(huán)找到最佳的空閑分區(qū)if(free_tablei.flag=1 && need_length <=free_ta

4、blei.length)count+;if(count=1|free_tablei.length < free_tablek.length)k=i;i=i+1;if(k!=-1)if(free_tablek.length-need_length)<=minsize) /整個(gè)分配free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;else/切割空閑區(qū)ads=free_tablek.address;len=need_length;free_tablek.address+=need_length;free_t

5、ablek.length-=need_length;i=0;/循環(huán)尋找內(nèi)存分配表中標(biāo)志為空欄目的項(xiàng)while(used_tablei.flag!=0) i=i+1;if(i<=n-1) /找到,在已分配區(qū)表中登記一個(gè)表項(xiàng)used_tablei.address=ads;used_tablei.length=len;used_tablei.flag=process_name;count1+;else /已分配區(qū)表長(zhǎng)度不足if(free_tablek.flag = 0) /將已做的整個(gè)分配撤銷free_tablek.flag=1;free_tablek.address=ads;free_tab

6、lek.length=len;else /將已做的切割分配撤銷free_tablek.address=ads; free_tablek.length+=len;cout<<"內(nèi)存分配區(qū)已滿,分配失??!n" return 0;elsecout <<"無(wú)法為該作業(yè)找到合適分區(qū)!n"return 0;return process_name;int recycle(int process_name) int y=0;float recycle_address, recycle_length;int i, j, k; /j欄是下鄰空閑區(qū),k

7、欄是上欄空閑區(qū)int x; /在內(nèi)存分配表中找到要回收的作業(yè)while(y<=n-1&&used_tabley.flag!=process_name)y=y+1;if(y<=n-1) /找到作業(yè)后,將該欄的標(biāo)志置為0 recycle_address=used_tabley.address;recycle_length=used_tabley.length;used_tabley.flag=0;count2+;else /未能找到作業(yè),回收失敗cout<<"該作業(yè)不存在!n"return 0;j=k=-1;i=0;while(!(i&g

8、t;=m|(k!=-1&&j!=-1) /修改空閑分區(qū)表if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length)=recycle_address)k=i;/判斷是否有上鄰接if(recycle_address+recycle_length)=free_tablei.address)j=i;/判斷是否有下鄰接i=i+1;/合并空閑區(qū)if(k!=-1) /回收區(qū)有上鄰接if(j!=-1)/回收區(qū)也有下鄰接,和上下領(lǐng)接合并free_tablek.length+=free_tablej.length+recycle

9、_length;free_tablej.flag=0;/將第j欄的標(biāo)記置為0else /不存在下鄰接,和上鄰接合并free_tablek.length+=recycle_length;else if(j!=-1) /只有下鄰接,和下鄰接合并free_tablej.length+=recycle_length;free_tablej.address=recycle_address; else /上下鄰接都沒(méi)有x=0;while(free_tablex.flag!=0)x=x+1;/在空閑區(qū)表中查找一個(gè)狀態(tài)為0的欄目if(x<=m-1) /找到后,在空閑分區(qū)中登記回收的內(nèi)存free_tabl

10、ex.address=recycle_address;free_tablex.length=recycle_length;free_tablex.flag=1;else /空閑表已滿,執(zhí)行回收失敗used_tabley.flag=process_name;cout<<"空閑區(qū)已滿,回收失??!n"return 0;return process_name;void show() /程序執(zhí)行時(shí)輸出模擬的內(nèi)存分配回收表cout<<"+n" cout<<"+ 空 閑 區(qū) +n" cout<<&qu

11、ot;+n"for(int i=0;i<=count2;i+) cout<<"地址:"<<free_tablei.address<<" "<<"作業(yè)長(zhǎng)度:"<<free_tablei.length<<" "<<"狀 態(tài):"<<free_tablei.flag<<endl;cout<<"+n" cout<<"+ 已 分 配

12、 區(qū) +n" cout<<"+n" for(int j=0;j<count1;j+) cout<<"地址:"<<used_tablej.address<<" "<<"作業(yè)長(zhǎng)度:"<<used_tablej.length<<" "<<"作業(yè)名:"<<used_tablej.flag<<endl;void main() /主函數(shù)調(diào)用各功能函數(shù)對(duì)所

13、有工作進(jìn)行測(cè)試int choice; /用來(lái)選擇將要進(jìn)行的操作int job_name;float need_memory;bool exitFlag=false;cout<<" 動(dòng)態(tài)分區(qū)分配方式的模擬 n" cout<<"*n" cout<<"請(qǐng)選擇操作類型:n" initialize(); /開(kāi)創(chuàng)空閑區(qū)和已分配區(qū)兩個(gè)表while(!exitFlag)cout<<"*n" cout<<"* 1: 分配內(nèi)存 2: 回收內(nèi)存 *n" cout<<"* 3: 查看分配 0: 退 出 *n" cout<<"*n" cout<<"請(qǐng)輸入您的操作 :" cin>>choice;switch(choice) case 0: exitFlag=true; /退出操作 break; case 1: cout<<"請(qǐng)輸入作業(yè)名和所

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論