在採用分頁式管理的機器中,主存和虛存都劃分成固定大小的塊——頁,主存的頁稱為實頁,虛存的頁稱為虛頁,實頁和虛頁的大小是相同的。這樣的話,實位址和虛位址都由兩部分組成,分別為實頁號/虛頁號和頁內偏移位址,如下所示。
對於cpu訪問的某乙個字單元來說,實位址中的實頁號和虛位址中的虛頁號是不同的,但兩個位址中的頁偏移是相同的。
在分頁式虛擬儲存器中,任乙個虛頁可以對映到主存的任乙個實頁上,虛位址到實位址的變換是通過存放在主存中的頁表來實現的。頁表由乙個個頁表項組成,每個虛頁在頁表中佔乙個頁表項,並按虛頁號的順序排列。頁表項的內容主要包括該虛頁所在主存的實頁號和一些控制資訊,如圖4-36所示。其中
f:裝入位。f=1表示該虛頁已裝入到主存中;f=0表示該虛頁還沒裝入主存。
c:修改位。用於表示該頁裝入主存後是否被修改過。
rw:訪問方式字段。用於表示該頁可以允許以「讀-寫-執行」方式中的哪些方式訪問。
頁表在主存中的位置通過乙個頁表基址暫存器來指明,頁表項的內容是在每個虛頁裝入主存時填寫的。
圖4-36 分頁式虛擬儲存器位址變換
由於頁面的劃分只是機械地對虛、實存空間進行等分,因此,頁面失效有可能發生在一條指令的執行過程之中。例如,對於按位元組編址的存貯器,就可能出現一條指令跨頁存貯的情況。當前一頁已在主存,而後一頁不在主存時,則在取指令過程中就會發生頁面失效。同理,在取運算元 (特別是字串)、間接定址及寫回結果的過程中都可能發生頁面失效。對於這種故障,處理機必須立即響應和處理,否則該條指令無法執行下去。如何儲存和恢復故障點的現場,使得故障處理完成後,又能正確地從斷點處繼續執行指令,這是保證虛擬存貯器能否正確工作的關鍵性問題之一。
目前,有的機器是採用後援暫存器技術,即把該條指令的故障現場全部儲存下來,當處理完該故障,把所需要的頁調入主存後,再從故障點處繼續執行完該條指令。有的機器則是儲存部分有關現場,使該指令能從頭再開始執行。有的機器則採用預判技術。例如,在執行字串指令前,預判字串的首、尾字元所在頁是否已在主存中,如果在,則執行這條指令,只要有乙個還沒裝入主存,就產生頁面失效故障請求,在把該頁調入後,才開始執行這條字串指令。
當使用者程式中給出乙個訪存虛位址時,系統首先以頁表基址暫存器中的內容為基位址,虛位址中的虛頁號為偏移量,找到該虛位址所對應的存放在主存中的頁表的頁表項。然後根據裝入位f的狀態判斷該虛頁是否已經裝入主存。若已裝入,則從該頁表項中取出實頁號,再結合頁內偏移位址一道共同形成乙個訪主存的實體地址。若未裝入,則產生頁面失效(故障),啟動輸入輸出子系統,將該虛位址所在的頁從輔存中調入主存。
在頁面失效時,要求把該頁由輔存調入主存,因此必須給出該頁在輔存的實體地址。輔存一般是按資訊塊(對磁碟而言為扇區)編址,且乙個塊的大小通常等於乙個頁面的大小。對磁碟儲存器來說,其實體地址格式如下:
將虛位址變換成磁碟的實體地址時,即是把虛頁號變換成某個磁碟機上的某個扇區號。為此,需有乙個虛頁號與輔存實體地址的映象表,該錶稱為外頁表(相對應的前述頁表稱為內頁表)。圖4-37示出了外頁表的結構。它也按虛頁號的順序排列,每個虛頁在外頁表中占有一項,記錄該頁在輔存中的實體地址。外頁表的內容是在把程式裝入輔存時填寫的。其中m為裝入位。
通常外頁表是存在輔存中。當某個程式初始執行時,就把外頁表的內容抄錄到已建立的內頁表的實頁號字段中。在進行虛位址到實位址變換時,若出現頁面失效,從內頁表的實頁號字段中取出的正是輔存實體地址。而當該頁調入主存後,其實頁號字段被真正填入所在主存的實際頁號。
圖4-37 外頁表結構
由於虛擬存貯器的頁面失效概率較低,一般不到1%。因此,由虛位址變換成輔存實體地址完全可由軟體實現,而不必提供專用的硬體支援。頁面失效時,由於訪問輔存需經機械動作,速度較低,因而不是讓處理機空等著該頁由輔存調入主存,而是切換到其它已準備就緒的任務(程序),把調頁工作交由i/o處理機即通道來完成。雖然,任務(程序)切換一般需要執行幾百甚至幾千條指令,但比起調頁來說,耗費的時間畢竟要小得多。
雖然頁表是實現分頁式虛擬儲存器的關鍵,但我們同時注意到,在頁式虛擬存貯器中,每次訪存都要增加乙個查頁表的過程,而頁表是存放在主存中的,這就相當於每次多增加了一次訪主存的操作。如果這個查頁表的操作時間不能縮短,虛擬存貯器是沒有實用價值的。因此,如何加快位址變換速度,就成為提高虛擬存貯器速度的另乙個關鍵問題,一種較好的解決辦法是採用所謂「快表」的方法。
仔細分析實際查表的過程可以發現,由於程式區域性性的特點,對頁表內各頁表項的使用不是隨機的,而是簇聚的,即在某一段時間內,實際上只用到頁表中很少的幾個頁表項。因此,我們可以單獨採用快速硬體,實現只含有部分頁表項的位址映象變換表,稱這種用快速硬體實現的部分頁表為轉換旁視緩衝器tlb(translatimlookaside buffer),又稱快表,而相對地把原來的頁表稱為慢表。快表比慢表小得多,其內容只是慢表的乙個小的副本。
快表可用相聯存貯器實現,其中的各頁表項含有最近訪問的虛頁號及其對應的主存實頁號。圖4-38給出了使用快慢表結合進行位址變換的過程。
圖4-38 快慢表結合實現虛位址變換
首先按虛位址中的虛頁號同時到快表和慢表中進行查詢。在快表中採用的是相聯比較(按內容訪問),若該虛頁號已在快表中,則可以直接從對應的項中取出實頁號,與虛位址中的頁內偏移位址一道共同形成訪主存的實位址,並同時使查慢表的操作作廢。若該虛頁號不在快表中,則在慢表中繼續查詢,一方面通過慢表繼續完成虛位址的轉換工作,另一方面將找到的虛頁號和對應的實頁號同時存入快表中。
由上可見,快表和慢表又構成了乙個表層次。如果快表的命中率相當高,則使位址變換所需時間接近於快表。
虛擬儲存器
1 虛擬儲存器只是乙個容量非常大的儲存器的邏輯模型,不是任何實際的物理儲存器 2 它借助於磁碟等輔存來擴大主存的容量,使之為更大或更多的程式使用 3 程式的邏輯位址稱為虛擬位址 虛位址 程式的邏輯位址空間稱為虛擬位址空間 4 實體地址 實位址 由cpu位址引腳送出,是用於訪問主存的位址 5 設cpu...
虛擬儲存器
在系統中程序是與其它的程序共享cpu和主存資源的,程序太多就需要太多的儲存器,而且儲存器很容易受到破壞,如果某個程序不小心寫了另乙個程序使用的儲存器,它就會以 完全和程式邏輯無關的令人迷惑的方式失敗。位址空間。特點 1.主存看成是虛擬在磁碟上的位址空間 的快取記憶體,在主存裡只儲存活動區域。2.為每...
虛擬儲存器
1 常規儲存器管理方式的特徵 一次性 即作業在執行前需一次性地全部裝入記憶體。這會導致兩種情況的發生 當作業很大,所要求的記憶體空間超過了記憶體總容量,作業不能全部被裝入記憶體,致使該作業無法執行。在多道程式中,有多個作業要求執行,但由於記憶體容量不足以容納所有這些作業,只能將少數作業裝入記憶體讓它...