存儲管理-分區存儲管理
分區管理把內存划分成若干個大小不等的區域,除操作系統占用一個區域之外,其余由多道環境下的各並發進程共享。分區管理是滿足多道程序設計的一種最簡單的存儲管理方法。
固定分區法
固定分區法把內存區固定地划分為若干個大小不等的區域
划分原則
分區划分的原則由系統操作員或操作系統決定。例如可划分為長作業分區和短作業分區
特點
分區一旦划分結束,在整個執行過程中每個分區的長度和內存的總分區個數保持不變
管理和控制
使用數據結構:分區說明表
分區說明表包括:分區說明表說明各分區號、分區大小、起始地址和是否是空閑區(分區狀態)
分區說明表功能:內存的分配釋放、存儲保護以及地址變換等都通過分區說明表進行。
例子:下圖中,操作系統占用低地址部分的20K,其余空間被划分為4個分區,其中1,2,3號分區已分配,4號分區未分配。

分區的分配和回收
1.當用戶程序要裝入執行時,通過請求表提出內存分配要求和所要求的內存空間大小
2.存儲管理程序根據請求表查詢分區說明表,從中找出一個滿足要求的空閑分區,並將其分配給申請者
3.當進程執行完畢,不再需要內存資源時,管理程序將對應的分區狀態置為“未分配” 即可。

動態分區法
與固定分區法相比,動態分區法在作業執行前並不建立分區,分區的建立是在作業的處理過程中進行的,且其大小可隨作業或進程對內存的要求而改變
相比固定分區法的改進
改變了固定分區法中那種即使是小作業也要占據大分區的浪費現象,從而提高了內存的利用率。
特點
采用動態分區法,在系統初啟時,除了操作系統中常駐內存部分之外,只有一個空閑分區,隨后,分配程序將該區依次划分給調度選中的作業或進程。
FIFO調度方式時的內存初始分配情況:

內存的分配和釋放
隨着進程的執行,會出現一系列的內存分配和內存釋放。
分配:某一時刻,進程C執行結束並釋放內存之后,管理程序為另兩個進程E(需內存50K)和F(需內存16K)分配內存。
釋放:如果內存被釋放,那么該塊內存變為空閑區
空閑區合並:如果被回收分區有鄰接的空閑分區,則進行合並。

與內存管理相關的數據結構
1.分區說明表
2.自由鏈:動態分區法還把內存中的可用分區單獨構成可用分區表或可用分區自由鏈,以描述系統的內存資源.
自由鏈利用每個內存空閑區的頭幾個單元存放本空閑區的大小及下個空閑區的起始地址,所有的空閑區鏈接起來。
系統設置自由鏈首指針讓其指向第一個空閑區,由此管理程序可通過鏈首指針查到所有的空閑區。
特點:采用自由鏈法管理空閑區,查找比可用表困難,但自由鏈指針利用閑區自身的單元不占用額外的內存區

3.請求表:請求內存資源的作業或進程也構成一個內存資源請求表。請求表的每個表目描述請求內存資源的作業或進程號以及所請求的內存大小。

4.可用表:可用表的每個表目記錄一個空閑區,主要參數包括區號、長度和起始地址。采用表格結構,管理過程比較簡單,但表的大小難以確定,可用表要占用一部分內存。

動態分區時的分配與回收
1.根據請求表中要求的內存長度,從可用表或自由鏈中找出合適的空閑區分配給進程。
2.分配空閑區之后,更新可用表或自由鏈。
3.進程或作業釋放內存資源時,新的空閑區和已有的相鄰空閑區進行鏈接合並,更新可用表或自由鏈
最先適應法
1.要求可用表或自由鏈按起始地址遞增的次序排列。
2.一旦找到大於或等於所要求內存長度的分區,結束搜索。
3.然后,從找到的分區中划出所要求的內存長度分配給用戶,並把余下的部分進行合並(如果有相鄰空閑區存在)后留在可用表中,同時修改相應的表項。
特點:
- 搜索速度最佳
- 回收算法最佳
最佳適用法
1.要求按從小到大的次序組成空閑區可用表或自由鏈。
2.當用戶作業或進程申請一個空閑區時,存儲管理程序從表頭開始查找,當找到第一個滿足要求的空閑區時,停止查找。
3.如果該空閑區大於請求表中的請求長度,則與最先適應法時相同,將減去請求長度后的剩余空閑區部分留在可用表中。
特點:
- 找到空間最佳
最壞適用法
1.要求空閑區按其大小遞減的順序組成空閑區可用表或自由鏈。
2.當用戶作業或進程申請一個空閑區時,先檢查空閑區可用表或自由鏈的第一個空閑可用區的大小是否大於或等於所要求的內存長度。
3.若可用表或自由鏈的第一個項長度小於所要求的,則分配失敗,否則從空閑區可用表或自由鏈中分配相應的存儲空間給用戶,然后修改和調整空閑區可用表或自由鏈。
特點:
- 不留下碎片空閑區這一出發點
動態分區時的回收與拼接
回收:當用戶作業或進程執行結束時,存儲管理程序收回已使用完畢的空閑區,並將其插入空閑區可用表或自由鏈。
拼接:將回收的空閑區插入可用表或自由鏈時,和分配空閑區時樣,也要碰到剩余空閑區拼接問題,即把不連續的零散空閑區集中起來。
回收拼接的四種情況

將一個新可用區插入可用表或隊列時,該空閑區和上下相鄰區的關系是下述4種關系之一:該空閑區的上下兩相鄰分區都是空閑區;該空閑區的上相鄰區是空閑區;該空閑區的下相鄰區是空閑區;兩相鄰區都不是空閑區。
四種回收策略
1.如果釋放區與上下兩空閑區相鄰,則將三個空閑區合並為一個空閑區。新空閑區的起始地址為上空閑區的起始地址,大小為三個空閑區之和。空閑區合並后,取消可用表或自由鏈中下空閑區的表目項或鏈指針,修改上空閑區的對應項。
2.如果釋放區只與上空閑區相鄰,則將釋放區與上空閑區合並為一個空閑區,其起始地址為上空閑區的起始地址,大小為上空閑區與釋放區之和。合並后,修改上空閑區對應的可用表的表目項或自由鏈指針。
3.如果釋放區與下空閑區相鄰,則將釋放區與下空閑區合並,並將釋放區的起始地址作為合並區的起始地址。合並區的長度為釋放區與下空閑區之和。同理,合並后修改可用表或自由鏈中相應的表目項或鏈指針。
4.如果釋放區不與任何空閑區相鄰,則釋放區作為一個新可用區插入可用表或自由鏈。
有關分區管理其他問題的討論
虛擬存儲器實現
1.利用分區式管理,允許每個用戶擁有可以自由編程的虛擬空間。
2.但分區式管理方式無法實現用戶進程所需內存容量只受內存和外存容量之和限制的虛擬存儲器。
3.如果不采用內存擴充技術,每個用戶進程的內存容量受到分區大小限制。
4.分區式管理通常使用覆蓋或交換技術擴充內存。
關於地址變換和內存保護
1.靜態地址重定位方法不可用於動態分區時的地址變換
2.動態地址重定位時,每個分區需要一對硬件寄存器的支持,即基址寄存器和限長寄存器,分別用來存放作業或進程在內存分區的起始地址和長度。
3.基址寄存器和限長寄存器除了完成動態地址重定位的功能之外,還具有保護內存中數據和程序的功能
4.保護鍵法也可以用來提供內存分區
分區存儲管理的主要優缺點
優點:
1.實現了多個作業或進程對內存的共享,有助於多道程序設計,從而提高系統的資源利用率
2.該方法要求的硬件支持少,管理算法簡單,因而實現容易
缺點:
1.內存利用率仍然不高
2.存在嚴重的碎小空閑區(碎片)不能利用的問題,這更進一步影響了內存的利用率
3.作業或進程的大小受分區大小控制,除非配合采用覆蓋和交換技術。
4.無法實現各分區間的信息共享。
