連續記憶體分配及其方式詳解

2020-07-16 10:04:36
記憶體應容納作業系統和各種使用者進程,因此應該盡可能有效地分配記憶體。本節介紹一種早期方法:連續記憶體分配

記憶體通常分為兩個區域:一個用於駐留作業系統,另一個用於使用者進程。作業系統可以放在低記憶體,也可放在高記憶體,這取決與中斷向量的位置。由於中斷向量通常位於低記憶體,因此程式設計師通常將作業系統也放在低記憶體。因此,本節只討論作業系統位於低記憶體的情況,其他情況的討論也類似。

通常,我們需要將多個進程同時放在記憶體中。因此我們需要考慮,如何為輸入佇列中需要調入記憶體的進程分配記憶體空間。在採用連續記憶體分配時,每個進程位於一個連續的記憶體區域,與包含下一個進程的記憶體相連。

記憶體保護

在深入討論記憶體分配前,我們應先討論記憶體保護問題。結合《記憶體交換》一節中討論的兩個想法,我們可以防止進程存取不屬於它的記憶體。如果一個系統有重定位暫存器和界限暫存器,則能實現我們的目標。

重定位暫存器含有最小的實體地址值,界限暫存器含有邏輯地址的範圍值(例如,重定位=100040,界限=74600)。每個邏輯地址應在界限暫存器規定的範圍內。MMU(記憶體管理單元)通過動態地將邏輯地址加上重定位暫存器的值,來進行對映。對映後的地址再傳送到記憶體(圖1 )。

重定位和界限寄存器的硬件支持
圖 1 重定位和界限暫存器的硬體支援