動態分割槽儲存管理

2021-09-19 13:55:29 字數 1822 閱讀 9488

實現了三個演算法,首次適應,最佳和最壞,其實很簡單,但是測得樣例還是不多,有錯誤請指出!

大體思路,就是將記憶體看成乙個個的結構體,每個結構體存放一段空間的起始位置和結束位置以及儲存的作業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;

}

動態分割槽儲存管理

實驗目的 熟悉並掌握動態分割槽分配的各種演算法。熟悉並掌握動態分割槽中分割槽 的各種情況,並能夠實現分割槽合併。實驗內容 用高階語言模擬實現動態分割槽儲存管理,要求 分割槽分配演算法至少實現首次適應演算法 最佳適應演算法和最壞適應演算法中的至少一種。熟悉並掌握各種演算法的空閒區組織方式。分割槽的初始...

分割槽儲存管理

內零頭 與 外零頭 內零頭是指分配給作業的儲存空間中未被利用的部分。外零頭是指系統中無法利用的小儲存塊。固定分割槽的分配方式會產生內零頭,因為是找出乙個滿足作業要求的空閒分割槽分配給作業,大小不一定剛好合適,分割槽中有一部分儲存空間會被浪費。在可變式分割槽分配中,是按照作業的大小找出乙個分割槽來分配...

分割槽式儲存管理

基本思想 將記憶體劃分成若干個連續區域,稱為分割槽。每個分割槽只裝入乙個程式,且該程式只能在此分割槽執行。問題 內碎片問題 分區內未被利用的空間 外碎片問題 分割槽之間難以利用的空間 分類 固定式分割槽 可變式分割槽 基本思想 系統先把記憶體劃分成若干個大小固定的分割槽,一旦劃分好,在系統執行期間便...