1. 程式人生 > >儲存管理之頁式、段式、段頁式儲存 以及 優缺點

儲存管理之頁式、段式、段頁式儲存 以及 優缺點

記憶體管理方式主要分為:頁式管理、段式管理和段頁式管理。

頁式管理的基本原理是將各程序的虛擬空間劃分為若干個長度相等的頁。把記憶體空間按頁的大小劃分為片或者頁面,然後把頁式虛擬地址與記憶體地址建立一一對應的頁表,並用相應的硬體地址轉換機構來解決離散地址變換問題。頁式管理採用請求調頁和預調頁技術來實現內外存儲存器的統一管理。

優點:沒有外碎片,每個內碎片不超過頁的大小。

缺點:程式全部裝入記憶體,要求有相應的硬體支援,如地址變換機構缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬體支援。增加了機器成本和系統開銷。

段式管理的基本思想是把程式按內容或過程函式關係分成段,每段有自己的名字。一個使用者作業或者程序所包含的段對應一個二維線性虛擬空間,也就是一個二維虛擬儲存器。段式管理程式以段為單位分配記憶體,然後通過地址對映機構把段式虛擬地址轉換為實際記憶體實體地址。

優點:可以分別編寫和編譯,可以針對不同型別的段採取不同的保護,可以按段為單位來進行共享,包括通過動態連結進行程式碼共享。

缺點:會產生碎片。

段頁式管理,系統必須為每個作業或者程序建立一張段表以管理記憶體分配與釋放、缺段處理等。另外由於一個段又被劃分為若干個頁,每個段必須建立一張頁表以把段中的虛頁變換為記憶體中的實際頁面。顯然與頁式管理時相同,頁表也要有相應的實現缺頁中斷處理和頁面保護等功能的表項。

段頁式管理是段式管理和頁式管理相結合而成,具有兩者的優點。

由於管理軟體的增加,複雜性和開銷也增加。另外需要的硬體以及佔用的記憶體也有所增加,使得執行速度下降。

————————————————————————————————————————————————

首先看一下“基本的儲存分配方式”種類:

      

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.  總結

在頁式、段式儲存管理中,為獲得一條指令或資料,須兩次訪問記憶體;而段頁式則須三次訪問記憶體