連續分配:意味着爲用戶進程分配的必須是一個連續的內存空間。
一、單一連續分配
在單一連續分配方式中,內存被分爲系統區和用戶區,系統區通常位於內存的地址部分,用於存放系統相關數據;用戶區用於存放用戶進程相關數據。
內存中只能有一道用戶程序,用戶程序獨佔整個用戶區空間。
優點:實現簡單,無外部碎片
缺點:只能用於單用戶,單任務的操作系統;有內部碎片;存儲器利用率極其低
內存碎片:指分配給某進程的內存區域中,如果有些部分沒有用上,就是“內部碎片”
二、固定分區分配
20世紀60年代出現了支持多道程序的系統,爲了能在內存中裝入多道程序,並且這些程序之間不會互相干擾,於是將整個用戶空間劃分爲若干個固定大小的分區,在每個分區只裝入一道作業,這樣就形成看最早、最簡單的一種可運行多道程序的內存管理方式。
固定分區分配分爲:分區大小相等和分區大小不等兩種
分區大小相等:缺乏靈活性,但適合用於一臺計算機控制多個相同對象的場合
分區帶下不等:增加了靈活性,可以滿足不同大小的進程需求,根據常在系統中運行的作業大小情況進行劃分(比如:劃分多個小分區、適量中等分區、少量大分區)
分區說明表:
優點:實現簡單,無外部碎片
缺點:當用戶程序太大時,可能所有的分區都不能滿足需求,此時不得不採用覆蓋技術來解決,但這又會降低性能;
會產生內部碎片,內存利用率低
三、動態分區分配
動態分區分配又稱可變分區分配。它不會預先劃分內存分區,而是在進程裝入內存時,根據進程的大小動態建立分區,並使分區的大小正好適合進程的需要,因此係統分區的大小和數目是可變的。
三個問題:
1、系統要用什麼樣的數據結構來記錄內存的使用情況?
系統使用空閒分區表或空閒分區鏈的數據結構來記錄內存的使用情況。
空閒分區表:每個空閒分區對應一個表項。表項中包含分區號、分區大小、分區起始地址等信息
空閒分區鏈:每個分區的起始部分和末尾部分分別設置前向指針和後向指針。起始部分處還可記錄分區大小等信息
2、當很多個空閒分區都能滿足需求時,應該選擇哪個分區進行分配?
當很多個進程都能滿足需求時,系統會根據動態分區分配算法來選擇分區進行分配
3、如何進行分區的分配與回收操作?
分區進行分配時,如果被分配的分區空間大於進程使用空間,就修改空閒分區表中分區的大小,將越來的大小減去被使用的大小。如果被分配的分區空間等於進程使用空間,就從表中刪除這個表項。
分區進行回收時,如果回收的分區,相鄰的前後有相鄰的空閒分區,就將它們進行合併,相應的修改分區表中的大小和起始地址。如果前後沒有空閒分區,就需要在分區表中添加一個新的表項,填寫相關信息。
- 外部碎片:內存中存在某些空閒區間由於太小而難以利用
- 內部碎片:分配給某進程的內存區域中,如果有些部分沒有用上的區域
- 可以用緊湊技術來解決外部碎片問題
兩個思考:
1、回憶交換技術,什麼是換入/換出?什麼是中級調度(內存調度)?
2、思考動態分區分配應使用哪種裝入方式?“緊湊”之後需要做什麼處理?
紅框內,常考選擇題。