




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、最佳適應(yīng)算法源程序代碼#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ì)象名/空閑
2、區(qū)表的定義:structfloat 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
3、;/已分配表的表項(xiàng)全部置為空表項(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 &
4、lt;=free_tablei.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_le
5、ngth;free_tablek.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.addres
6、s=ads;free_tablek.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,
7、k; /j欄是下鄰空閑區(qū),k欄是上欄空閑區(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
8、0;j=k=-1;i=0;while(!(i>=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ū)也有下鄰接,和上下鄰接合并free_tablek.length+=f
9、ree_tablej.length+recycle_length;free_tablej.flag=0;/將第j欄的標(biāo)記置為'0'else /不存在下鄰接,和上鄰接合并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'
10、;的欄目if(x<=M-1) /找到后,在空閑分區(qū)中登記回收的內(nèi)存free_tablex.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&
11、lt;<"+ 空 閑 區(qū) +n" cout<<"+n"for(int i=0;i<=count2;i+)if(free_tablei.flag!=0) cout<<"初始地址:"<<free_tablei.address<<" "<<"長(zhǎng)度:"<<free_tablei.length<<" "<<"狀 態(tài):"<<free_tablei.f
12、lag<<endl;cout<<"+n" cout<<"+ 已 分 配 區(qū) +n" cout<<"+n" for(int j=0;j<count1;j+)if(used_tablej.flag!=0) cout<<"初始地址:"<<used_tablej.address<<" "<<"長(zhǎng)度:"<<used_tablej.length<<" &
13、quot;<<"作業(yè)名:"<<used_tablej.flag<<endl;void main() /主函數(shù)調(diào)用各功能函數(shù)對(duì)所有工作進(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è)
14、表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è)號(hào)和所需內(nèi)存:" cin>>job_name>>need_memory; if(job_name!=0&&need_memory!=0) distribute(job_name, need_memory); / 分配內(nèi)存 else if(job_name=0) cout<<"作業(yè)號(hào)不能為零!n請(qǐng)重新選擇操作:n" else if(need_memo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 維修工考試試題及答案
- 外科麻醉 試題及答案
- 2025年廣東省江門市江海區(qū)八年級(jí)英語(yǔ)第二學(xué)期期中監(jiān)測(cè)模擬試題含答案
- 天車工試題及答案
- 9.1.2-3 分層隨機(jī)抽樣、獲取數(shù)據(jù)的途徑-2025年高一數(shù)學(xué)新教材同步課堂精講練導(dǎo)學(xué)案(人教A版必修第二冊(cè))含答案
- 2025年醫(yī)療機(jī)構(gòu)質(zhì)量與安全協(xié)議
- 2025年度員工離職福利策劃與審核協(xié)議書
- 2025年品質(zhì)審核協(xié)議
- 2025年合法住宅轉(zhuǎn)租協(xié)議范本
- 2025年結(jié)束勞動(dòng)協(xié)議
- 導(dǎo)師帶徒職責(zé)
- 新思想引領(lǐng)新征程新青年建功新時(shí)代-(第二版)
- 醫(yī)學(xué)微生物學(xué)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋山東第一醫(yī)科大學(xué)
- 【MOOC】英語(yǔ)暢談中國(guó)-湖北大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 籃球球員合同模板
- 氧氣吸入課件
- GB/T 44575-2024抗沖擊聚苯乙烯(PS-I)擠出片材要求和試驗(yàn)方法
- 四至界線協(xié)議書(2篇)
- 氣壓傳動(dòng)課件 項(xiàng)目二任務(wù)三 氣動(dòng)沖壓機(jī)系統(tǒng)搭建與調(diào)試
- 不固定總價(jià)合同模板
- 2024年山東省青島市中考語(yǔ)文試卷(含答案解析)
評(píng)論
0/150
提交評(píng)論