新聞中心

EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > 虛擬存儲技術(shù)原理

虛擬存儲技術(shù)原理

作者: 時間:2017-06-08 來源:網(wǎng)絡(luò) 收藏

虛擬存儲器是根據(jù)程序的邏輯地址轉(zhuǎn)換來的,也稱線性地址空間。一般每個進(jìn)程,甚至每個段都有一個,以32位為例,則每個最大可達(dá)4G。

而主存目前一般為百M。因此程序中所指的存儲單元并不能都放到主存中,也就是并不是每個程序所用的存儲單元,都有具體的物理的存儲器單元與之對應(yīng)。

但由于程序的兩個局部性原理,在一個時刻,程序只在一個比較小的范圍內(nèi)運行。所以我們把程序可能用到的整個存儲空間分成一個個相同大小的頁(按頁管理硬件上容易實現(xiàn)),只把其中的一些頁放在主存中,而其它的頁則等需要時再建,或放在輔存(磁盤)中。同時建立一個頁表,對應(yīng)于每一頁,如果該頁在主存中,則頁表記錄它在主存中的地址;如果不在主存中,則在頁表上作不在主存的標(biāo)記。

這樣,當(dāng)程序需要調(diào)用某個存儲單元的內(nèi)容時,先根據(jù)它的線性地址,算出其所在的頁。查頁表,看是不是在主存中?如果在,則直接存取。如果查到頁表上是不在的標(biāo)記,那就是一個page fault。要把主存中的某一頁(LRU策略)換到磁盤上,把要訪問的那個單元所在的頁調(diào)入主存,再進(jìn)行存取。

就象一個預(yù)計有一萬學(xué)生的學(xué)校,理論上每個學(xué)生都應(yīng)有一個位子上課(一萬個虛擬位子),而學(xué)校只有一千個(物理)位子。但實際上,學(xué)校也不會一萬個人同時上課,只要讓上課的同學(xué)有位子(在主存中),而其它同學(xué)只要留下聯(lián)系方法能找到就好。為了降低管理的復(fù)雜性,我們采用按學(xué)號分班(頁)管理。每個班要么一起上課(主存),要么一起呆在寢室(磁盤)。而在學(xué)校保留一個動態(tài)表(頁表)表明每個班在哪兒(物理地址)上課,或者沒上課(不在主存)?,F(xiàn)在假設(shè)我們想按學(xué)號找一個同學(xué),而且是女同學(xué),只能在教室說話,呵呵。那么:

先算出來是哪個班的,查動態(tài)表,看該班是否在教室。在,直接按位置找到(hit);不在(page fault),要先找個不上課的班趕回寢室,把要找女生所在的班調(diào)到教室,再按位置找那個同學(xué)。

動態(tài)表(頁表)的大小=表項數(shù)*每個表項所需的位數(shù)。

表項數(shù)=虛擬班數(shù)=虛擬人數(shù)(虛擬地址空間)/每班人數(shù)(每頁大小)

每個表項的位數(shù)=Log(教室數(shù))+適當(dāng)控制位數(shù)

教室數(shù)=實際可以上課的人數(shù)(物理地址空間)/每班人數(shù)(每頁大小)
虛擬地址換算:
TLB miss:

4G(32-bit)的存儲空間,如果按4K分頁,則可分1M頁。每個頁表項為4B,則一個頁表大小為4MB。由于頁表太大,只能放在主存中。這樣每次讀內(nèi)存都要讀主存,大大影響讀寫速度。而同樣基于局部性原理,整個頁表在某一時刻,所用的也僅僅幾頁而已。所以我們把某段時間經(jīng)常用的幾個頁表項,即常用的虛擬頁號和其對應(yīng)的物理頁地址,存在Cache中,即TLB。

這樣,當(dāng)程序需要調(diào)用某個存儲單元的內(nèi)容時,先根據(jù)它的線性地址,算出其所在的頁。先查TLB(比較虛擬頁號),如果有相同的虛擬頁號,則就可以馬上知道其所在的物理地址,根據(jù)物理地址進(jìn)行存取。

如果沒有相同的虛擬頁號,則說明該頁沒有記錄在TLB中,那再去查頁表,按page fault中所說的進(jìn)行。

TLB像我們隨身記錄電話的小紙片,當(dāng)要查一個電話時,我們先看小紙片。有,我們可以直接打電話。如果沒有,我們再回家查詳細(xì)的電話號碼簿(頁表),再打電話。


關(guān)鍵詞: ROM

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉