離散分配
分頁(Paging),分段,段頁式
一、分頁
一個進程的物理地址可以是非連續的;
將物理內存分成固定大小的塊,稱爲塊(frame);
將邏輯內存分爲同樣大小的塊,稱爲頁(page);
將連續的頁分配並存放到不連續的若干內存塊中;
建立頁表,記錄每一頁對應的存儲塊的塊號,將邏輯地址轉換爲物理地址。
將產生內部碎片
地址轉換方法
將邏輯地址轉換爲虛擬地址:
CPU生成的地址分成以下兩部分:
1.頁號(p):頁號作爲頁表中的索引。頁表中包含每頁所在物理內存的基地址。
2.頁偏移(d):與頁的基地址組合就形成了物理地址,就可送交物理單元。
邏輯內存和物理內存的分頁模型:
例如:
將邏輯地址轉換爲物理地址需要寄存器來支持,地址轉換體系結構如下:
假定一頁大小爲1K(1024B),考察邏輯地址2056,地址變換過程工作原理如下所示:
無需計算,只需用塊號代替高位的頁號,就可立即得到對應的物理地址
例如:
頁表的實現
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)
交換示意圖: