1. 程式人生 > >初識virtual memory

初識virtual memory

一、先談幾個重要的東西

virtual memory是一個抽象概念,書上的原文是"an abstraction of main memory known as virtual memory"(參考資料p776)。那麼什麼是抽象概念。下面說說我個人對這個東西的理解。

所謂抽象概念是指抽象出來的概念,通過抽象這個動作得到的結果。那麼抽象這個動作又是什麼,即是怎麼一個動作,思維做了什麼動作或者做了一系列什麼動作。舉個生活中的例子,現在有排球、足球、籃球、乒乓球,我們按照某個方向(共性)對排球進行抽象,客體是排球,動作是抽象,那麼抽象出來的結果是球,這裡球就是一個抽象概念,球只存在於我們的概念中,一個圓圓的,可以滾動的東西。在大腦中,它就是這樣,抽象是一個認識事物的方法,對這個事物進行抽象,抽象出那些相關的屬性,去除不相關的屬性。

我們將這些知識應用到virtual memory。解剖"an abstraction of main memory",客體是main memory,動作是abstract,那麼main memory經過某一方向的抽象後就成了virtual memory,一個抽象概念,一個可以連續的存放資訊的地方,每個地方都有一個地址屬性,而捨棄了它是由什麼材料組成等不相關資訊(抽象方向決定了哪些屬性相關,哪些屬性不相關),在大腦中,它就是這樣。(這裡很難理解,包括我自己都不是很肯定,注意利用上段舉出的關於球的例子)

談了這麼多我想大家,包括我,都有點暈了,哈哈,這傢伙到底在說什麼,說人話。

總結一下:抽象是我們認識事物的一種方法,對硬體按某一方向進行抽象得到抽象概念,抽象概念只存在於大腦中。經過對事物進行抽象,我們得到抽象的事物。

迴歸本節主題,virtual memory。在寫這篇博文的過程中,我感覺到如果根據我前面的認知,作者的表述似乎不夠準確,應該是這樣"virtual memory" is "an abstraction of main memory and MMU",MMU負責虛擬地址和實體地址的轉換。因為僅僅對memory進行抽象根本得不到virtual memory。(這裡如果讀不懂,先硬著頭皮往下灌,將quetions存在心中看下面的內容)

二、virtual memory

前面已經講到virtual memory是一個抽象概念,是大腦中對main memory + MMU 抽象的產物。那麼main memory 是如何與MMU相加的,即main memory與MMU如何合作的。

合作的過程如下:

    1、processor首先發送virtual address給MMU;

    2、MMU從virtual address中提取某些連續欄位並將其傳送到儲存在main memory中的page table

    3、main memory返回physical address的部分連續欄位給MMU

    4、MMU根據virtual address和physical address的部分連續欄位計算出physical address,併發送給main memory

    5、main memory返回所需的data給processor。

在整個過程中MMU負責將虛擬地址翻譯成實體地址。這裡我只是做一個overview,詳細的細節可以參考我給出資料。

三、TLB是什麼

不瞭解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