首先看一下“基本的存儲分配方式”種類:
1. 離散分配方式的出現
由於連續分配方式會形成許多內存碎片,雖可通過“緊湊”功能將碎片合並,但會付出很大開銷。於是出現離散分配方式:將一個進程直接分散地裝入到許多不相鄰的內存分區中。
下面主要介紹“離散分配”三種方式的基本原理以及步驟:
2. 基本分頁存儲
2.1. 步驟
³ 邏輯空間等分為頁;並從0開始編號
³ 內存空間等分為塊,與頁面大小相同;從0開始編號
分配內存時,以塊為單位將進程中的若干個頁分別裝入到多個可以不相鄰接的物理塊中。
2.2. 地址結構
分兩部分:頁號、位移量(業內地址)
業內地址的位數可以決定頁的大小(如上圖每頁大小為4K)。
邏輯地址=頁號&位移量(&號是連接符號,是將頁號作為邏輯地址的最高位)
2.3. 地址映射(邏輯地址--->物理地址)
如下圖所示:(物理地址=塊號&塊內地址)
因為塊的大小=頁的大小,所以塊內位移量=頁內位移量,所以只需求出塊號即可:
如何求塊號呢?頁表來幫你
頁表:
給定一個邏輯地址和頁面大小,如何計算物理地址?
1) 根據頁面大小可計算出頁內地址的位數
2) 頁內地址位數結合邏輯地址計算出頁內地址(即,塊內地址)和頁號
3) 頁號結合頁表,即可得出塊號
4) 塊號&塊內地址即可得出物理地址
2.4. 地址變換原理及步驟
請看上圖,給出邏輯地址的頁號和頁內地址,開始進行地址變換:
1) 在被調進程的PCB中取出頁表始址和頁表大小,裝入頁表寄存器
2) 頁號與頁表寄存器的頁表長度比較,若頁號大於等於頁表長度,發生地址越界中斷,停止調用,否則繼續
3) 由頁號結合頁表始址求出塊號
4) 塊號&頁內地址,即得物理地址
以上即為頁式存儲的原理及整個過程……
3. 基本分段存儲
3.1. 步驟
³ 邏輯空間分為若干個段,每個段定義了一組有完整邏輯意義的信息(如主程序Main()),如:
內存空間為每個段分配一個連續的分區
段的長度由相應的邏輯信息組的長度決定,因而各段長度不等,引入分段存儲管理方式的目的主要是為了滿足用戶(程序員)在編程和使用上多方面的要求。
要注重理解,完整的邏輯意義信息,就是說將程序分頁時,頁的大小是固定的,只根據頁面大小大小死生生的將程序切割開;而分段時比較靈活,只有一段程序有了完整的意義才將這一段切割開。(例如將一個人每隔50厘米切割一段,即為分頁;而將一個人分割為頭部、身體、腿部(有完整邏輯意義)三段,即為分段)
3.2. 地址結構
分兩部分:段號、位移量(段內地址)
³ 段內地址的位數可以決定段的大小
³ 邏輯地址=段號&段內地址(&號是連接符號,是將段號作為邏輯地址的最高位)
3.3. 地址映射(邏輯地址--->物理地址)
如下圖所示:(物理地址=基址+段內地址)(注意為+號,而不是&號)
由上圖可知若想求物理地址,只需求出基址即可:
如何求基址呢?段表來幫你
段表:
求基址的過程與頁式存儲中求塊號的過程原理相同,這里需要注意的是,物理地址是基址+段內地址,而不是基址&段內地址,由邏輯地址得到段號、段內地址,再根據段號和段表求出基址,再由基址+段內地址即可得物理地址。
3.4. 地址變換原理及步驟

請看上圖,給出邏輯地址的段號和段內地址,開始進行地址變換:
1) 在被調進程的PCB中取出段表始址和段表長度,裝入控制寄存器
2) 段號與控制寄存器的頁表長度比較,若頁號大於等於段表長度,發生地址越界中斷,停止調用,否則繼續
3) 由段號結合段表始址求出基址
4) 基址+段內地址,即得物理地址
以上即為段式存儲的原理及整個過程……
分頁和分段的主要區別:

4. 基本段頁式存儲
4.1. 步驟
³ 用戶程序先分段,每個段內部再分頁(內部原理同基本的分頁、分段相同)
4.2. 地址結構
分三部分:段號、段內頁號、頁內地址
4.3. 地址映射(邏輯地址--->物理地址)
³ 邏輯地址----- >段號、段內頁號、業內地址
³ 段表寄存器--- >段表始址
³ 段號+段表始址---- >頁表始址
³ 頁表始址+段內頁號----->存儲塊號
³ 塊號+頁內地址------>物理地址
4.4. 地址變換原理及步驟

請看上圖,給出邏輯地址的段號、頁號、頁內地址,開始進行地址變換:
1) 在被調進程的PCB中取出段表始址和段表長度,裝入段表寄存器
2) 段號與控制寄存器的頁表長度比較,若頁號大於等於段表長度,發生地址越界中斷,停止調用,否則繼續
3) 由段號結合段表始址求出頁表始址和頁表大小
4) 頁號與段表的頁表大小比較,若頁號大於等於頁表大小,發生地址越界中斷,停止調用,否則繼續
5) 由頁表始址結合段內頁號求出存儲塊號
6) 存儲塊號&頁內地址,即得物理地址
以上即為段頁式存儲的原理及整個過程……
5. 總結
在頁式、段式存儲管理中,為獲得一條指令或數據,須兩次訪問內存;而段頁式則須三次訪問內存