计组—虚拟存储
虛擬存儲
1.虛擬存儲器的基本概念
虛擬存儲器只是一個容量非常大的存儲器的邏輯模型,不是任何實際的物理存儲器。它借助于磁盤等輔助存儲器來擴大主存容量,使之為更大或更多的程序所使用。
它指的是主存-外存層次。以透明的方式給用戶提供了一個比實際主存空間大得多的程序地址空間。
虛擬存儲器的一個重要用途是解決計算機中主存儲器的容量問題,在不明顯降低平均訪問速度的前提下增加程序的訪問空間。(即將磁盤中訪問頻率高的一部分放入主存中)
虛擬地址(邏輯地址):程序指令生成的地址。(磁盤所代表的大地址,根據虛擬地址查找實際地址)
物理地址(實際地址):程序指令生成的地址經過轉換后的地址。
虛擬地址空間:虛擬地址的范圍,它是程序員所看到的地址空間。
實地址空間:實際主存地址的范圍。
程序進行虛地址到實地址轉換的過程稱為程序的再定位。
?
虛擬空間的用戶程序按照虛地址編程并存放在輔存中,程序運行時,由地址變換機構依據當時分配給該程序的實際地址空間把程序的一部分調入實存。
虛擬地址訪問的過程:
1.由cpu送虛擬地址,通過查詢表(查表方式)看虛擬地址對應的單元內容是否裝入主存。
2.如果在主存,可以通過輔助軟硬件自動把虛擬地址變換為主存地址(物理地址)后,對主存相應單元進行訪問。
3.如果不在主存,通過輔助軟硬件將虛擬地址對應的內容調入主存中,然后進行訪問。
注:對虛擬存儲器的每次訪問都必須由輔助軟硬件進行虛-實地址的變換。虛存的大小依賴輔助存儲器的大小。
?
主存-外存層次和cache-主存層次有許多
相似之處:
(1)出發點相同:二者都是為了提高存儲系統的性能價格比而構造的分層存儲體系,都力圖使存儲系統的性能接近高速存儲器,而價格和容量接近低速存儲器。
(2)原理相同:都是利用了程序運行時的局部性原理把最近常用的信息塊從相對慢速的大容量存儲器調入相對高速的小容量存儲器。一旦這部分變得不常用了,把它們送回到低速的存儲器中。這種換入換出是由硬件或操作系統完成的,對用戶是透明的。
主要區別:
(1)側重點不同:cache主要解決主存與cpu的速度差異問題;虛擬存儲主要是解決存儲容量問題。
(2)數據通路不同:cpu與cache和主存之間均有直接訪問通路,cache不命中時可直接訪問主存;而虛擬存儲所依賴的輔存與cpu之間不存在直接的數據通路,當主存不命中時只能通過調頁(主存不命中cpu不能直接訪問虛擬存儲,此時需要將虛擬存儲的內容調入主存)解決,cpu最終還是要訪問主存。
(3)透明性不同:cache的管理完全由硬件完成,對系統程序員和應用程序員均透明;而虛擬存儲的管理由軟件(操作系統)和硬件共同完成,由于軟件的介入,虛存對實現存儲管理的系統程序員不透明,而只對應用程序與透明。
(4)未命中時的損失不同:虛擬存儲器未命中的性能損失要遠大于cache系統未命的損失(因為磁盤的存取時間是主存存取時間的上千倍,主存存取時間是cache的存取時間的5~10倍)
(5)地址映射方式不同:虛擬存儲器中一般使用全相聯地址映射方式以提高命中率。主存與磁盤等外設的工作速度差異很大,因此對于虛擬存儲器提高命中率特別重要。
(6)替換策略不同:cache的替換策略是由硬件實現的,虛擬存儲器替換策略由操作系統實現。
(7)寫操作策略不同:虛存中一般采用回寫法(只寫主存,不寫磁盤,除非替換)。程序的寫操作只對內存進行,不直接寫磁盤。
(8)虛存的存儲空間大小受到計算機地址空間的限制,即虛擬地址的位數(即如果磁盤4個g,而cpu是32位的,那么最多也就只能虛擬4g的空間,即使磁盤有5g也只能虛擬4個g),而cache存儲器的容量和主存的容量則一般小于cpu的地址空間,因此不存在限制。
注:如果cpu為32位則存儲空間為2^32,4G=2^2 * 2^30 = 2^32 ,所以cpu為32位的機器最多能使用4G的內存空間。
?
主存-外存層次的基本信息傳送單位
主存-外存層次的基本信息傳送單位有3中方案:段、頁和段頁
段氏管理:按照程序的邏輯結構劃分成的多個相對獨立部分,作為獨立的邏輯單元。(可類比一本書中的章節)
段的長度各不相同,起點和終點不定,給主存空間分配帶來麻煩,容易在段間留下許多空余的零碎存儲空間,造成浪費。
?
頁式管理:主存物理空間中劃分出來的等長的固定區域。(可類比一本書中每個章節中的頁)
優點:頁面的起點和終點地址是固定的,方便構建頁表,新頁調入主存也很容易掌握,比段式空間浪費小。
缺點:處理、保護和共享不如段氏方便。
?
段頁式管理:采用分段和分頁結合的方法。程序按模塊分段,段內再分頁,進入主存以頁為基本信息傳送單位,用段表和頁表進行兩級定位管理。(即先分段,然后段內再分頁;信息交換的單位依然是頁)
?
1.頁式虛擬存儲器
頁式虛擬存儲系統中,虛擬空間分成大小相同的頁(本節以8頁為例),稱為邏輯頁;主存空間也分成同樣大小的頁(本節以4頁為例),稱為物理頁。
邏輯地址由A+B位組成,物理地址由a+b位組成。由于二者的頁面大小相同,因此b=B。但A(3位:8=2^3) > a(2位:4=2^2)。通過頁表進行頁式虛擬存儲器與主存之間的地址變換。
頁表:在內存中用一部分空間來存儲內存塊的目錄文件。每個邏輯頁在頁表內有一行記錄。
(頁表作用:需要通過查頁表的方式判斷數據是否在內存中)
頁表的構成:有效位、物理頁號。
有效位:表示此邏輯頁是否已存儲在主存中;物理頁號:表示該邏輯頁在主存中所對應的物理頁號。
頁表的大小由邏輯頁的數量確定。
?
對虛擬存儲器的訪問步驟如下:
1.用邏輯頁(第2頁010)號去查表,此頁的有效位=1,表示此頁存在主存中,且對應的物理頁號位01.
2.由物理頁號和頁內地址組合形成物理地址,訪問主存。
(因為邏輯頁內地址=物理頁內地址,所以直接將物理頁號和邏輯頁內地址拼接形成物理地址)
?
?
轉換后援緩沖器(快表)
頁表通常在主存中,即使邏輯頁已經在主存中,至少要訪問兩次物理存儲器才能實現一次防存,這將使虛擬存儲器的存取時間加倍。(第一次查表訪問主存、第二次根據物理地址訪問主存)
為了避免對主存訪問次數的增多,可以對頁表實行二級緩存,把頁表中最活躍的部分存放在高速存儲器中,組成快表。這個專用于頁表緩存的高速存儲器部件通常稱為轉換后援緩沖器(TLB)。保存在主存中完整頁表則稱為慢表。
2.段式虛擬存儲器
在段氏虛擬存儲系統中,段是按照程序的邏輯結構劃分的,各個段的長度不等分即每個段大小不一樣。
虛存地址和實存地址如下:
段表:每個邏輯段在段表中都有一行記錄。由段起址、有效 位、段長組成。
(段表作用:需要通過查段表的方式判斷數據是否在內存中)
?
對虛擬存儲器的訪問步驟如下:
(1)用段號及段標基地址(首地址)形成訪問地址訪問段表,如果有效位=1,表面此段已存在主存中,找到段起址,由段起址和段內地址形成主存地址訪問主存(段起地址+段內地址=物理地址)。在訪問某段時,如果段內地址值超過段的長度,則發生地址越界中斷。
(2)如果有效位=0,表面此段不在主存,通過輔助軟硬件的控制,根據某種算法將主存中的某段原有內容釋放,然后從虛存中調進需要訪問的段,同時變動段表內容。
?
3.段頁式虛擬存儲器
段頁式虛擬存儲器是段氏虛擬存儲器和頁式虛擬存儲器的結合,它把程序按邏輯單位分段以后,再把每段分成固定大小的頁。程序對主存的調入調出是按頁面進行的,但它又可以按段實現共享和保護。
優點:兼備頁式和段氏的優點
缺點:需要多次查表(段表和頁表)
需要一個段表和一組頁表。
在段頁式虛擬存儲系統中,每道程序是通過一個段表和一組頁表來進行定位的。段表中的每個表目對應一個段,每個表目有一個指向該段的頁表起始地址及該段的控制保護信息。由頁表指明該段各頁在主存中的位置以及是否已裝入(有效位)、已修改等狀態信息。
說明:通過基號C訪問基址寄存器找到程序C的段表首地址(圖示說明有多個程序A、B、C,基址寄存器中存放每個程序的段表首地址),然后通過程序C的段表首地址+段號1(Sc+1)定位到具體段表(程序段表中存放的為每個頁表的首地址),再將頁表首地址+頁號2(b+2)定位到具體的頁表(頁表中存放具體的物理頁號),最后將物理頁號和頁內地址組合拼接形成實際物理地址(10|d)
很明顯,段頁式管理需要經過兩次查表,第一次段表,第二次頁表;
注:訪問基址寄存器的速度是非常快的,屬于cpu中高速緩存寄存器,由于是多任務情況所以需要通過訪問基址寄存器找到具體的程序的段表首地址。
總結
- 上一篇: 哈佛结构与冯.诺依曼结构(普林斯顿结构)
- 下一篇: 计组—指令及寻址