在看文章前可以先看下這個,
吳海波:專欄的序。
先有個大概的認識會對閱讀有所幫助。
到目前為止,我們已經將每個進程的整個地址空間放入了內存中。 使用基址和界限寄存器,操作系統可以輕鬆重定位進程到物理內存的不同部分。 但是,你可能會注意到這些地址空間的一個奇怪的地方:在堆和棧之間有一大塊「自由」空間。從圖16.1可以看出,雖然在堆和棧中存在沒有使用的內存區域,但當我們將整個地址空間重定位時,它仍佔用物理內存; 因此,使用基址和界限寄存器的簡單方法來對內存虛擬化是浪費。並且如果程序的地址空間大於內存空間,就無法正常運行該程序了。因此這種內存虛擬化的方式是有侷限性的。 因此我們遇到了問題是:
如果將上面提到的地址空間的空閑區域有效進行利用?
針對需要大內存的應用如何進行支持?
1. 分段機制介紹
分段就是對上面問題的解決方法。這種方式很早就被提出,大概是20世紀60年代。這個方法說起來其實很簡單,就是增加基址和界限寄存器的數量,將地址空間分成一段一段的,每一段都是一個連續的地址。這樣代碼,數據,棧就可以在分別的段中存放,操作系統就可以將這些段放入不同的物理內存區域,避免了空閑區域的產生。下面是一個簡單的例子來說明這種方式。