【操作系統】第三章:連續內存分配(Part2)

內存碎片問題

當我們給一個運行的程序分配一塊空間的時候,會出現一些無法進一步利用的空閒空間。這就是碎片,碎片分爲兩種(外碎片、內碎片)
外碎片:分配單元之間的沒法去使用的內存
內碎片:已經分配給應用程序,但是應用程序無法進一步去使用的空閒內存
兩者都是我們儘量想去避免的。
在這裏插入圖片描述
解決碎片問題:一種有效的內存分配方法!
從OS的角度,它在什麼時候會提供連續空間的分配呢?因爲OS要把APP從硬盤加載到內存中去,實際上就要給內存中分配一塊連續區域讓程序可以跑起來;另一種情況應用程序在運行時,會訪問數據,這時候OS需要給數據分配空間。爲此OS需要管理空閒的和非空閒的空間,這裏會通過一些數據結構或者算法來進行識別哪些空閒哪些非空閒並管理。
內存分配算法:
在這裏插入圖片描述

First-fit最先適配

在這裏插入圖片描述
黃色表示空閒空間,綠色表示非空閒空間。看上去簡單易懂,但是它的實現也需要一定條件。
需求:
1.按照地址牌序空閒塊
2.分配需要尋找一個合適的分區
3.重分配需要檢測
分配過程也需要考慮內存回收問題,回收時要考慮是否可以把空閒塊合併,因爲一旦合並可以形成更大的空間塊,就可以滿足更多的應用需求
優點:簡單。在高地址有大塊空間。
缺點:容易形成外碎片,具有不確定性。

Best-fit最佳適配

在這裏插入圖片描述
按照最適合,最貼近分配請求的size分配空閒塊。
1.按照地址牌序空閒塊
2.分配需要尋找一個合適的分區
3.重分配需要檢測
優點:比較簡單。當大部分分配是小尺寸是非常有效
缺點:外部碎片問題仍然嚴重。重分配慢。易產生很多無用的小碎片,影響後續管理

Worst-fit最差適配

在這裏插入圖片描述
按照size差距最大的去分配,這種適配可以把大塊變小塊,小塊儘量保留。原理是外碎片大,大概率該碎片可以繼續使用。
1.按照地址牌序空閒塊
2.分配需要尋找一個合適的分區
3.重分配需要檢測
優點:總體來說分配速度比較快;加入分配請求是中大型的,效果較好
缺點:重分配慢;外部碎片;拆分大空閒塊導致以後大塊區無法被分配

綜上:三種分配方法沒有最好,只有根據情況進行適用。
所以我們需要一定的碎片處理方式

壓縮式碎片整理

在這裏插入圖片描述
這裏的問題:
1.進程合併挪動過程的實質其實是拷貝內存(開銷比較大)的過程,但是,程序執行過程中是不能去挪動的,那麼就要等到程序空閒時間處理該才做。
2.挪動到理想位置的開銷有多大。這些是需要考慮的問題。

交換式碎片整理

在這裏插入圖片描述
目的:充分利用硬盤,把硬盤當成內存的後備。
現在有四個程序,其中P3正在執行,也就說P1P2P4在內存中等待被執行,如果這時候P3在執行過程中突然需要更多內存,但是P124已經把內存空間佔滿,需要搶佔。P4在等待某個事件產生且等待時間相對較長,爲此我們把P4所佔用的空間挪到硬盤上去,這樣內存中就釋放出了空間。這時候P3利用騰出的空閒塊繼續正常執行。
這裏的問題:1.什麼時候進行換入和換出操作 2.選哪一個程序換出空間
另一方面換入換出的粒度是以單個程序的大小作爲粒度的,也就說如果程序本身比較大,那麼換入換出的開銷也很大。
那麼如何管理和優化呢?這將在後續的【虛存管理】中進行詳細講解,這裏只瞭解這兩種分配方式。

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