一、先談幾個重要的東西
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
?