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分配,找到最大...