virtual memory是一個抽象概念,書上的原文是"an abstraction of main memory known as virtual memory"(參考資料p776)。那麼什麼是抽象概念。下面說說我我的對這個東西的理解。html
所謂抽象概念是指抽象出來的概念,經過抽象這個動做獲得的結果。那麼抽象這個動做又是什麼,便是怎麼一個動做,思惟作了什麼動做或者作了一系列什麼動做。舉個生活中的例子,如今有排球、足球、籃球、乒乓球,咱們按照某個方向(共性)對排球進行抽象,客體是排球,動做是抽象,那麼抽象出來的結果是球,這裏球就是一個抽象概念,球只存在於咱們的概念中,一個圓圓的,能夠滾動的東西。在大腦中,它就是這樣,抽象是一個認識事物的方法,對這個事物進行抽象,抽象出那些相關的屬性,去除不相關的屬性。併發
咱們將這些知識應用到virtual memory。解剖"an abstraction of main memory",客體是main memory,動做是abstract,那麼main memory通過某一方向的抽象後就成了virtual memory,一個抽象概念,一個能夠連續的存放信息的地方,每一個地方都有一個地址屬性,而捨棄了它是由什麼材料組成等不相關信息(抽象方向決定了哪些屬性相關,哪些屬性不相關),在大腦中,它就是這樣。(這裏很難理解,包括我本身都不是很確定,注意利用上段舉出的關於球的例子)spa
談了這麼多我想你們,包括我,都有點暈了,哈哈,這傢伙到底在說什麼,說人話。翻譯
總結一下:抽象是咱們認識事物的一種方法,對硬體按某一方向進行抽象獲得抽象概念,抽象概念只存在於大腦中。通過對事物進行抽象,咱們獲得抽象的事物。htm
迴歸本節主題,virtual memory。在寫這篇博文的過程當中,我感受到若是根據我前面的認知,做者的表述彷佛不夠準確,應該是這樣"virtual memory" is "an abstraction of main memory and MMU",MMU負責虛擬地址和物理地址的轉換。由於僅僅對memory進行抽象根本得不到virtual memory。(這裏若是讀不懂,先硬着頭皮往下灌,將quetions存在心中看下面的內容)blog
前面已經講到virtual memory是一個抽象概念,是大腦中對main memory + MMU 抽象的產物。那麼main memory 是如何與MMU相加的,即main memory與MMU如何合做的。it
合做的過程以下:io
一、processor首先發送virtual address給MMU;table
二、MMU從virtual address中提取某些連續欄位並將其發送到存儲在main memory中的page tablesso
三、main memory返回physical address的部分連續欄位給MMU
四、MMU根據virtual address和physical address的部分連續欄位計算出physical address,併發送給main memory
五、main memory返回所需的data給processor。
在整個過程當中MMU負責將虛擬地址翻譯成物理地址。這裏我只是作一個overview,詳細的細節能夠參考我給出資料。
不瞭解cache的同仁,能夠先我以前寫的初識cache(http://www.cnblogs.com/midhillzhou/p/5608533.html),否則理解會很吃力。TLB從本質上說是一個cache,它存在於MMU的內部,用於加速地址轉換。仔細思考上圖,在MMU with TLB中, 在第1步MMU收到virtual address後,它首先先查看TLB中有沒有對應的physical address:若是有,直接將地址取出來,發給main memory,而後main memory將所需data發給processor;若是沒有,再進行上面步驟中的第2步第3步,而後將這一映射關係保存到TLB中,最後進行第4步第5步。
<<computer systems a programmer's perspective>> second edition p775-p792