七、操作系统——动态分区分配算法(详解)
一、引入
動態分區分配算法:在動態分區分配方式中,當很多個空閑分區都能滿足需求時,應該選擇哪個分區進行分配?
 
二、首次適應算法(First Fit)
算法思想:每次都從低地址開始查找,找到第一個能滿足大小的空閑分區。
 如何實現:空閑分區以地址遞增的次序排列。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
 
 
三、最佳適應算法(Best Fit)
算法思想:由于動態分區分配是一種連續分配方式,為各進程分配的空間必須是連續的一整片區域。因此為了保證當“大進程”到來時能有連續的大片空間,可以盡可能多地留下大片的空閑區,即優先使用更小的空閑區。
 如何實現:空閑分區按容量遞增次序鏈接。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
 
 
 缺點:每次都選最小的分區進行分配,會留下越來越多的、很小的、難以利用的內存塊。因此這種方法會產生很多的外部碎片。
四、最壞適應算法(Worst Fit)
又稱最大適應算法(Largest Fit)
 算法思想:為了解決最佳適應算法的問題——即留下太多難以利用的小碎片,可以在每次分配時優先使用最大的連續空閑區,這樣分配后剩余的空閑區就不會太小,更方便使用。
 如何實現:空閑分區按容量遞減次序鏈接。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
 
 
 
 重新排序:空閑分區按容量遞減次序鏈接
 
 缺點:每次都選最大的分區進行分配,雖然可以讓分配后留下的空閑區更大,更可用,但是這種方式會導致較大的連續空閑區被迅速用完。如果之后有“大進程”到達,就沒有內存分區可用了。
五、鄰近適應算法(Next Fit)
算法思想:首次適應算法每次都從鏈頭開始查找的。這可能會導致低地址部分出現很多小的空閑分區,而每次分配查找時,都要經過這些分區,因此也增加了查找的開銷。如果每次都從上次查找結束的位置開始檢索,就能解決上述問題。
 如何實現:空閑分區以地址遞增的順序排列(可排成一個循環鏈表)。每次分配內存時從上次查找結束的位置開始查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
 
 
 注意:
 對于鄰近適應算法和首次適應算法,我們是按照地址順序遞增的次序來進行排列的。所以,即使內存空閑區的大小發生了比較大的變化,也不需要對整個鏈表進行重新排序。這也是這兩種算法的算法開銷小的原因。而最佳適應算法和最壞適應算法,在回收分區后可能經常需要對空閑分區隊列重新排序,因此算法開銷大。
 
首次適應算法 VS 鄰近適應算法:
首次適應算法每次都要從頭查找,每次都需要檢索低地址的小分區。但是這種規則也決定了當低地址部分有更小的分區可以滿足需求時,會更有可能用到低地址部分的小分區,也會更有可能把高地址部分的大分區保留下來(最佳適應算法的優點)
 鄰近適應算法的規則可能會導致無論低地址、高地址部分的空閑分區都有相同的概率被使用,也就導致了高地址部分的大分區更可能被使用,劃分為小分區,最后導致無大分區可用(最佳適應算法的缺點)
 綜合來看,四種算法中,首次適應算法的效果反而更好
六、總結
總結
以上是生活随笔為你收集整理的七、操作系统——动态分区分配算法(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: python自动化接口测试excel用例
- 下一篇: Chapter7-10_Deep Lea
