最先適應分配演算法

2021-09-21 07:08:47 字數 2950 閱讀 8114

1.執行結果

假設記憶體中已裝入三個作業,且形成三個空閒區,記憶體使用情況如圖4.3所示。現有40k大小的作業a申請裝入記憶體;作業a執行完畢後撤離系統。執行可變分割槽儲存管理模擬程式進行記憶體分配和**,將空閒區表和已分配區表的初值以及每次分配或**後的變化顯示輸出。

圖4.3  記憶體使用情況

可變分割槽儲存管理模擬程式執行結果如下所示。

<>

輸入空閒區個數:3

輸入空閒區0的起始位址和長度: 50  80

輸入空閒區1的起始位址和長度: 200  50

輸入空閒區2的起始位址和長度: 350  674

空閒區表:

起始位址  長度    狀態

50       80          0

200              50     0

350      674    0

已分配區表:

起始位址  長度    狀態         占用作業

0         50         1                  unknow

130         70         1                  unknow

250       100    1    unknow

1.裝入作業

2.撤銷作業

請選擇:1

輸入作業名字: a

輸入作業大小:40

空閒區表:

起始位址  長度    狀態

90            40    0

200           50     0

350     674    0

已分配區表:

起始位址  長度    狀態         占用作業

0         50         1                  unknow

50        40    1     a

130         70          1                  unknow

250       100    1    unknow

1.裝入作業

2.撤銷作業

請選擇:2

輸入作業名:a

空閒區表:

起始位址  長度    狀態

50       80         0

200              50     0

350      674    0

已分配區表:

起始位址  長度    狀態         占用作業

0             50      1        unknow

130        70           1             unknow

250      100    1     unknow

2.簡要分析

程式執行時,使用者輸入目前空閒區的資訊,記憶體其他區域為已分配區,記憶體管理程式初始化空閒區表和已分配區表,空閒區按位址遞增的順序排列。

當裝入大小為40k的作業a時,程式順序掃瞄空閒區表找到第乙個能滿足作業大小的空閒區,即起始位址為50k,大小為80k的空閒區,從此空閒區中分割40k分配給作業a,剩下的仍然作為乙個空閒區登記在空閒區表中,程式輸出了分配後空閒區表和已分配區表的資訊。

作業a執行完畢後撤離系統,記憶體管理程式**其記憶體空間,此時**區後存在相鄰的空閒區,將其合併成乙個空閒區,程式輸出了**記憶體後空閒區表和已分配區表的資訊。

#include "stdio.h"

#include "string.h"

#define n 100 // 最大空閒區個數

int p_num = 0; // 作業個數

int num = 0; // 空閒區個數

struct

free_table[n], work_table[n], temp;

void sort() // 空閒區按起始位址從小到大排序

for (i = 0; i < p_num - 1; i++)

for (int j = 0; j < p_num - i - 1; j++)

if (work_table[j].address > work_table[j + 1].address)

}void merge() // 掃瞄空閒區若前後有相鄰空閒區則合併

} }}void output1() // 輸出空閒區表資訊

void output2() // 輸出已分配區表資訊

void init() // 初始化空閒區資訊

sort();

merge();

if(free_table[0].address!=0)

for(i=0; i

if(free_table[num-1].address+free_table[num-1].length!=1024)

sort();

output1();

output2();

}void input() // 裝入作業,分配記憶體

else if (length == free_table[i].length)

num--;

break;

}} }

if (i == num)

sort();

output1();

output2();

}void finish() // 撤消作業,**記憶體

} if (i == p_num)

puts("\n沒有此作業,重新輸入!");

output1();

output2();

}void first_fit()

}int main(void)

模擬主儲存器最先適應演算法

問題背景 乙個好的計算機系統不僅要有乙個足夠容量的 訪問速度高的 穩定可靠的主儲存器,而且要能合理地分配和使用這些儲存空間。當使用者提出申請儲存器空間時,儲存管理必須根據申請者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閒區域分配給申請者。當作業撤離或主動歸還主存資源時,則儲存管理要收回...

動態分割槽分配 迴圈首次適應演算法 最佳適應演算法

文章待更新 1 採用空閒區表,並增加已分配區表。分配演算法採用最佳適應演算法 記憶體空閒區按照尺寸大小從小到大的排列 和迴圈首次適應演算法,實現記憶體的分配與 include include include include includeusing namespace std int pos,n,s...

最先適應法 最佳適應法 下次適配法 最差適配法

題 分析 1.首先分析是不是最差適配法,最差適配法意思是首先找到最大的記憶體空間進行分配,對於請求的5k儲存空間,首先找到位址200k容量為56k的地方進行分配,然後剩餘51k。再對請求的15k進行分配,找到最大的空間,也就是剛才剩餘的51k進行分配,然後再剩餘36k。再對請求的30k分配,找到最大...