概述
虛地址或稱邏輯地址通常是指由程式提供的地址,而實地址或稱物理地址則是指有效的存儲器地址。由所有虛地址構成的集合叫做虛地址空間(virtual address space),由所有實地址構成的集合叫做實地址空間(physical address space),體系結構允許的最大虛地址空間由其字長確定,一個系統實際支持的虛地址空間和實地址空間的大小均與實現有關。
對於同一體系結構而言,虛地址空間和實地址空間兩者的大小一般都不相等,虛地址空間可以大於實地址空間,也可以小於實地址空間。虛實地址轉換機制的作用就是建立虛實地址空間之間的對應關係,從而使得在較大的虛地址空間中編寫的程式能夠在較小的實地址空間運行,以便節省物理存儲器;或者使得在較小的虛地址空間中編寫的程式能夠在較大的實地址空間運行,以便提高系統的處理能力。
RISC體系結構的虛實地址轉換機制要比CISC體系結構複雜一些。這是因為:第一,最新的64位RISC體系結構不但要適應開放系統的環境,而且要考慮跨代兼容性。以Alpha體系結構為例,既要支持開放的作業系統,例如UNIX,又要兼顧VAX/VMS。因此,Alpha至少要滿足這兩個不同的作業系統對地址轉換機制的要求。第二,現有的某些RISC體系結構,例如PowerPC和PA RISC等等,仍是32位的,其基本的虛地址空間當然也是32位的。為了延長這些體系結構的生存期,必須將虛地址空問擴充為64位,或者至少48位。這就要求這些體系結構的地址轉換機構除完成常規的虛實地址轉換以外,首先必須完成從32位虛地址到64位(或48位)虛地址的轉換。
地址轉換的基本原理
為了更有效地分配、共享和保護存儲器,需將虛實地址空間劃分成若干較小的單位,所有地址轉換和訪問保護都以這個單位為基礎進行。最常用的單位是頁面,一個頁面包含地址空間中若干連續的單元。對於一個給定的體系結構,虛地址空間和實地址空間的頁面長度相等;頁面長度可以是固定的,也可以是可變的。頁面地址也叫做頁面號,頁面號由單元地址按頁面長度取模而得。例如,假設頁面長度為1K位元組,那么第0號頁面包含第0至1K一1位元組單元,第1號頁面包含第1K至2K一1位元組單元,以此類推。存儲管理常用的單位,除頁以外還有段。段的劃分有兩種:一種與頁相似,但比頁大,一個段包含若干連續的頁;另一種按程式的邏輯結構劃分,因此這種段的長度不是固定的。除了頁和段以外,有些體系結構還將整個虛或實地址空間分成幾個較小的空間,供不同的程式或進程使用,以便加快地址轉換的速度或減少進程切換的時間。
圖1中,在以頁面作為存儲管理基本單位的體系結構中,假設虛地址為64位,實地址為48位,頁面長度為1K。
圖1中,位移欄位為頁面內位元組位移欄位,VPN為虛頁面號欄位,PFN為實頁幀號欄位。在虛實地址轉換過程中,位移欄位不變。因此,虛實地址轉換的實質就是確定從VPN到PFN的對應關係。一個VPN只能對應一個PFN,但多個VPN可以對應同一個PFN。這種對應關係由作業系統建立。
作業系統為每個已被激活的虛頁面,也就是VPN建立一個條目,稱為頁表項(page table entry—PTE)。PTE主要包括兩種信息:PFN欄位和保護欄位。前者用於虛實地址轉換,後者用於存儲訪問保護。所有的PTE組成頁表,頁表存放在主存中,其中一部分也可存放在外存中。頁表的管理完全由作業系統完成,硬體不得改變PTE。
由於頁表存放在存儲器中,這就迫使每次地址轉換都不得不訪問存儲器,才能取出相應的PTE。顯然,這種方法嚴重地影響地址轉換的速度,降低系統的性能。為此。在處理器內部設定一個由高速硬體構成的小型頁表,並根據某種替換算法,將近期使用頻度最高的PTE放在其中。於是,在進行地址轉換時,查找這個頁表,如果對這個頁表的訪問未命中,則訪問存儲器中的大頁表,並進行相應的PTE替換。稱這個快速的小型頁表為轉換後援緩衝器(TLB,translation lookaside buffer)或轉換緩衝器(TB,translation buffer)。不難看出,TB實際上是專門用於地址轉換的高緩。和通常的高緩一樣,TB也由標籤存儲器和數據存儲器兩部分組成。其中標籤存儲器存放虛頁面VPN欄位的全部或部分位,用於TB檢索;數據存儲器存放與虛頁面相對應的PTE,PTE中包含轉換成的實頁面的PFN欄位。TB的檢索一般採用全相聯或組相聯等方案。
綜上所述,可將虛實地址轉換的過程概括如下(參見圖2);
程式生成某虛地址VA;處理器將這個VA的VPN欄位取出,並同轉換緩衝器TB的標籤存儲器TAG中的內容進行某種相聯比較,如果符合,即TB命中,便取出相對應的PTE;檢查PTE的有效性以及頁面保護許可權,如果未產生訪問控制違章,則從PTE中取出PFN欄位作為實地址PA的高位,再從VA中取出位移欄位作為PA的低位,從而轉換成完整的PA。
在上述過程中,如果產生TB不命中(TB MISS),表明與VA相對應的PTE不在TB中,則需訪問存儲器中的頁表。如果產生訪問控制違章,則停止地址轉換,並提交作業系統處理。
對於程式提供的虛地址,如果能夠找到有效的PTE,則表明存儲管理已將這個虛頁面映象成實頁面,且已分配到主存。因此,只需用轉換而成的實地址去訪問高緩或主存,即可完成這次存儲器訪問。相反,如果在頁表中未找到有效的PTE,則表明所需的實頁面尚未分配到主存,於是便產生頁面故障,由作業系統執行頁面調入服務例程,將所需頁面從輔助存儲器(例如磁碟)調入主存。此時,如果主存沒有空閒的空間,則先要執行頁面調出(page out)服務例程,按照某種替換算法將某頁面從主存調到輔存,騰出空閒的頁面,然後再執行頁面調入。