OS存儲器管理(二)

離散分配

分頁(Paging),分段,段頁式

 

一、分頁

 

 
一個進程的物理地址可以是非連續的;
 
將物理內存分成固定大小的塊,稱爲塊(frame);

將邏輯內存分爲同樣大小的塊,稱爲頁(page);

將連續的頁分配並存放到不連續的若干內存塊中;

建立頁表,記錄每一頁對應的存儲塊的塊號,將邏輯地址轉換爲物理地址。

將產生內部碎片

 
 
地址轉換方法
 
將邏輯地址轉換爲虛擬地址:
 
CPU生成的地址分成以下兩部分:
1.頁號(p):頁號作爲頁表中的索引。頁表中包含每頁所在物理內存的基地址。
2.頁偏移(d):與頁的基地址組合就形成了物理地址,就可送交物理單元。
 
邏輯內存和物理內存的分頁模型:
 
 
例如:
 
 
 
將邏輯地址轉換爲物理地址需要寄存器來支持,地址轉換體系結構如下:
 
 
 

地址變換機構如下:

 
 
 

假定一頁大小爲1K(1024B),考察邏輯地址2056,地址變換過程工作原理如下所示:

 
 
 

轉換過程分析:邏輯地址機內表示(以16位爲例)

無需計算,只需用塊號代替高位的頁號,就可立即得到對應的物理地址
 
 
例如:
 
 
 
 
頁表的實現
 
1.頁表保存在內存中
2.頁表基寄存器(PTBR)指向頁表
3.頁表長度寄存器(PTLR)指示頁表的大小
4.在這種方式下,每次數據/指令的訪問需要訪問兩次內存。一次訪問頁表,另一次訪問數據/指令
5.兩次內存訪問問題可以用特別的快速查找硬件緩衝(TLB,稱爲快表或聯想存儲器或關聯內存或翻譯後備緩衝器)來解決。
 
帶TLB的分頁硬件原理如下:
 
 
 
 
頁表結構:
①層次化分頁
②Hash頁表
 
①層次化分頁
1.將邏輯地址空間分成多個頁表
2.一種簡單的方法是兩層分頁法
 
示意圖如下:
 
 
 
兩層分頁方法實例:
邏輯地址(32位機器,頁大小爲4K)分成以下兩部分:頁號(20位),頁偏移(12位)
頁表又分成頁,所以頁號又進一步分成:10位頁號,10位頁偏移
因此,邏輯地址表示如下:
 
 
 
②Hash頁表
 
1.處理超過32位地址空間的常用方法是使用Hash頁表。
2.邏輯地址中的邏輯頁號被放入hash頁表中。hash頁表的每一項都包括一個鏈接組的元素,這些元素hash成同一位置(碰撞)。
3.邏輯頁號與鏈表中的每 一個元素的第一個域相比較。如果匹配,那麼對應的塊號就用來形成位置地址。如果不匹配,那麼就對鏈表中的下一個域進行頁碼比較。
 
Hash頁表實例:
 
 
 
 
二、分段
 
 
支持用戶觀點的內存管理方法
程序是若干段的集合:主程序,子程序,函數,方法,對象,局部變量,全局變量,堆棧,符號表,數組
 
用戶角度的程序:
 
 
 
段的邏輯視角:
 
 
 
段的體系結構:
 
邏輯地址由兩個元素組成:<段號,偏移>
 
段表:將二維的用戶定義地址映射爲一維物理地址。段表的每個條目都有段基地址和段界限。
基地址:包含段的起始地址
界限:指定段的長度
段表基地址寄存器(STBR)指向內存中的段表的位置
段表長度寄存器(STLR)指示程序所用的段的個數
段號S小於STLR的時候纔是有效的
 
段硬件實現:
 
 
 
 
分段實例:
 


三、交換

 

進程可以暫時從內存中交換出來到備份存儲上,當需要再執行時再調回到內存中。
備份存儲 —— 通常是快速磁盤。這必須足夠大,以便容納所有用戶的內存映象拷貝,它也必須提供對這些內存映象的直接訪問。
 
換入、換出 - 是交換策略的一個變種,被用於基於優先權的調度算法中。如果一個更高優先級進程來了且需要服務,內存管理可以交換出低優先級的進程,以便可以裝入和執行更高優先級的進程。當更高優先級進程執行完後,低優先級進程可以交換回內存以繼續執行。
交換時間的主要部分是轉移時間。總的轉移時間與所交換的內存空間直接成正比。
交換的修改版本在許多系統中被採用。(如UNIX, Linux及Windows)
 
 
交換示意圖:
 

發佈了82 篇原創文章 · 獲贊 101 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章