實現了三個演算法,首次適應,最佳和最壞,其實很簡單,但是測得樣例還是不多,有錯誤請指出!
大體思路,就是將記憶體看成乙個個的結構體,每個結構體存放一段空間的起始位置和結束位置以及儲存的作業id。
初始情況時,記憶體為空,所以只有乙個結構體,存放從1-n,id為-1,這樣當新的作業到來或者**時,只需要將合適的結構體拆分或者合併,同時總的結構體數量增加或減少就可以了~~~~其實很簡單吧
#include#define max 1000001
using namespace std;
struct job
a[max];
int sum=0;//已存在的空間塊
int n;//最大記憶體
int use_n;//已使用記憶體
void con()
void show()
}void next(int x)
bool find_id(int id)
return false;
}void font(int x)
sum--;
}void hebing()
}sum--;
}void huishou()
for(int i=1; i<=sum; i++)
}show();
}void first_memery()
int id,si;//輸入的作業和大小
if(choose==1)
if(find_id(id))
int flag=0;
for(int i=1; i<=sum; i++)
a[i].en = a[i].st+si-1;
a[i].id = id;
use_n+=si;
break;}}
if(flag == 0)
show();
con();
}else
}}void worst_fit()
int id,si;//輸入的作業和大小
if(choose == 1)
if(find_id(id))
int max_memery=-1;//最大的空閒區域
int max_position=-1;//最大空閒區域的位置
for(int i=1; i<=sum; i++)}}
if(max_memery > si)
a[max_position].en = a[max_position].st+si-1;
a[max_position].id = id;
sum++;
use_n += si;
show();
con();
}else
}}void best_fit()
int id,si;//輸入的作業和大小
if(choose == 1)
if(find_id(id))
int min_memery=n+1;//最小的空閒區域
int min_position=-1;//最小空閒區域的位置
for(int i=1; i<=sum; i++)
a[min_position].en = a[min_position].st+si-1;
a[min_position].id = id;
sum++;
use_n += si;
show();
con();
}else
}}int main()
system("pause");
system("cls");}}
return 0;
}
動態分割槽儲存管理
實驗目的 熟悉並掌握動態分割槽分配的各種演算法。熟悉並掌握動態分割槽中分割槽 的各種情況,並能夠實現分割槽合併。實驗內容 用高階語言模擬實現動態分割槽儲存管理,要求 分割槽分配演算法至少實現首次適應演算法 最佳適應演算法和最壞適應演算法中的至少一種。熟悉並掌握各種演算法的空閒區組織方式。分割槽的初始...
分割槽儲存管理
內零頭 與 外零頭 內零頭是指分配給作業的儲存空間中未被利用的部分。外零頭是指系統中無法利用的小儲存塊。固定分割槽的分配方式會產生內零頭,因為是找出乙個滿足作業要求的空閒分割槽分配給作業,大小不一定剛好合適,分割槽中有一部分儲存空間會被浪費。在可變式分割槽分配中,是按照作業的大小找出乙個分割槽來分配...
分割槽式儲存管理
基本思想 將記憶體劃分成若干個連續區域,稱為分割槽。每個分割槽只裝入乙個程式,且該程式只能在此分割槽執行。問題 內碎片問題 分區內未被利用的空間 外碎片問題 分割槽之間難以利用的空間 分類 固定式分割槽 可變式分割槽 基本思想 系統先把記憶體劃分成若干個大小固定的分割槽,一旦劃分好,在系統執行期間便...