操作系统(三十六)动态分区分配算法
3.5 動態分區分配算法
? 上節講述了連續分區分配方式中有動態分區分配的方式,如果在動態分區分配算法中有許多空閑分區都滿足需求的時候,那該如何分配空間呢,今天來介紹四種分配方法解決這個問題。
目錄
3.5 動態分區分配算法
3.5.1 首次適應算法
3.5.2 最佳適應算法
3.5.3 最壞適應算法
3.5.4 鄰近適應算法
3.5.5 四種方法比較
?
3.5.1 首次適應算法
? 算法思想:每次都從低地址開始查找,找到第一個能滿足大小的空閑分區,優先使用低地址空間。 ? 如何實現:空閑分區以地址遞增的次序排列。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。3.5.2 最佳適應算法
??算法思想:由于動態分區分配是一種連續分配方式,為各進程分配的空間必須是連續的一整片區域。因此為了保證當“大進程”到來時能有連續的大片空間,可以盡可能多地留下大片的空閑區,即,優先使用更小的空閑區。
? 如何實現:空閑分區按容量遞增次序鏈接。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
??缺點:每次都選最小的分區進行分配,會留下越來越多的、很小的、難以利用的內存塊。因此這種方法會產生很多的外部碎片。
3.5.3 最壞適應算法
? 最壞適應算法又稱最大適應算法。
? 算法思想:為了解決最佳適應算法的問題---即留下太多難以利用的小碎片,可以在每次分配時優先使用最大的連續空閑區,這樣分配后剩余的空閑區就不會太小,更方便使用。 如何實現:空閑分區按容量遞減次序鏈接。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。 缺點:每次都使用最大的連續空閑區會導致大空閑區被很快用光,后續再有大進程到來時就不會再有可用的大分區了。3.5.4 鄰近適應算法
??算法思想:首次適應算法每次都從鏈頭開始查找的。這可能會導致低地址部分出現很多小的空閑分區,而每次分配查找時,都要經過這些分區,因此也增加了查找的開銷。如果每次都從上次查找結束的位置開始檢索,就能解決上述問題。
? 如何實現:空閑分區以地址遞增的順序排列(可排成一個循環鏈表)。每次分配內存時從上次查找結束的位置開始查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
3.5.5 四種方法比較
| 算法 | 算法思想 | 分區排列順序 | 優點 | 缺點 |
| 首次適應 | 從頭到尾找到一個合適的分區 | 地址遞增排列 | 綜合看性能最好。算法開銷小,回收分區后一般不需要對空閑分區隊列重新排序 | ? |
| 最佳適應 | 優先使用更小的分區,以保留更多大分區 | 容量遞增排列 | 會有更多的大分區被保留下來,更能滿足大進程需求 | 會產生很多太小的、難以利用的碎片;算法開銷大,回收分區后可能需要對空閑分區隊列重新排序 |
| 最壞適應 | 優先使用更大的分區,以防止產生太小的不可用的碎片 | 容量遞減排列 | 可以減少難以利用的小碎片 | 大分區容易被用完,不利于大進程;算法開銷大 |
| 臨近適應 | 由首次適應演變而來,每次從上次查找結束位置開始查找 | 地址遞增排成循環鏈表 | 不用每次都從低地址的小分區開始檢索。算法開銷小 | 會使高地址的大分區也被用完 |
總結
以上是生活随笔為你收集整理的操作系统(三十六)动态分区分配算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统(三十五)连续分配管理方式
- 下一篇: 2021年上半年内容型社交电商行业分析报