操作系統3.1.5 動態分區分配算法

在動態分區分配方式中,當很多個空閒分區都能滿足需求時,應該選擇哪個分區進行分配?

一、首次適應算法(First Fit)

1、算法思想:每次都從低地址部分開始查找,找到第一個能滿足大小的空閒分區

2、如何實現:空閒分區以地址遞增的次序排列每次分配內存時順序查找空閒分區鏈(或空閒分區表),找到大小能滿足要求的第一個空閒分區

給進程5分配空間:

 

 

二、最佳適應算法(Best Fit)

1、算法思想:由於動態分區分配是一種連續分配方式,爲各個進程分配的空間必須是一整片區域,因此爲了保證“大進程”到來時能有連續的大片空間,可以儘可能地留下大片空閒區,優先使用更小的空閒區。

2、如何實現:空閒分區按容量遞增次序連接,每次分配內存時順序查找空閒分區鏈(或空閒分區表),找到大小能滿足要求的第一空閒分區。

給進程5(9MB)分配空間:

3、缺點:每次都選最小的分區進行分配,會留下越來越多、很小的、難以利用的內存塊。因此這種方法會產生很多外部碎片 

 

三、最壞適應算法(Worst Fit)

1、算法思想:爲了解決最佳適應算法的問題——留下太多難以利用的小碎片,可以在每次分配時優先使用最大的連續空閒區,這樣分配後剩餘的空閒區就不會太小,更方便使用

2、如何實現:空閒分區按容量遞減的次序連接,每次分配內存時順序查找空閒區,找到第一個可以滿足要求的空閒分區

給進程5(3MB)分配空間:

再給進程6(9MB)分配空間:

重新排序:

3、缺點:每次都選最大的分區進行分配,雖然可以讓分配後留下的空閒區更大、更可用,但是這種方式會導致較大的連續空閒區被迅速用完。如果之後有“大進程”到達,就沒有內存分區可用了

 

四、鄰近適應算法(Next Fit)

1、算法思想:首次適應算法每次都從鏈頭開始查找,這可能會導致低地址部分出現很多很小的空閒分區,而每次分配查找時,都要經過這些分區,因此也增加了查找的開銷。如果每次都從上次查找結束的位置開始檢索,就能解決上述問題

2、如何實現:空閒分區已地址遞增的順序排列(可以排列成一個循環鏈表),每次分配內存時從上次查找結束的位置開始查找空閒分區鏈(或空閒分區表,找到大小能滿足要求的第一個空閒分區

 給進程5(5MB)分配空間:

又來了個進程6(5MB),直接按上次查找結束的位置開始查找,到10發現滿足:

首次適應算法每次都要從頭查找,每次都需要檢索低地址的小分區。

但是這種規則也決定了當低地址部分的小分區,也會更有可能把高地址部分的大分區保留下來(最佳適應算法的優點)

3、缺點:可能會導致高地址部分的大分區更可能被使用,劃分爲小分區,最後導致無大分區可用

綜合來看,四種算法中,首次適應算法的效果更好

 

本節極易出選擇題,可能出大題。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章