當(dāng)前位置:
首頁(yè) >
全面解析虚拟内存概念
發(fā)布時(shí)間:2025/4/16
45
豆豆
生活随笔
收集整理的這篇文章主要介紹了
全面解析虚拟内存概念
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一個(gè)系統(tǒng)中的進(jìn)程是與其他進(jìn)程共享CPU和主存資源的。隨著對(duì)CPU需求的增長(zhǎng),進(jìn)程以某種合理的平滑的方式慢了下來(lái)。但是如果太多的進(jìn)程需要太多的內(nèi)存,那么它們中的一些就根本無(wú)法運(yùn)行。當(dāng)一個(gè)程序中沒(méi)有空間可以用時(shí),那就是它運(yùn)氣不好了。內(nèi)存還容易被破壞。如果某個(gè)進(jìn)程不小心寫(xiě)了另一個(gè)進(jìn)程使用的內(nèi)存,它就可能以某種完全和程序邏輯無(wú)關(guān)的令人迷惑的方式失敗。
為了更加有效的管理內(nèi)存并且少出錯(cuò),現(xiàn)代系統(tǒng)提供了一種對(duì)主存的抽象的概念,叫做虛擬內(nèi)存(VM)。虛擬內(nèi)存時(shí)硬件異常、硬件地址翻譯、主存、磁盤(pán)文件和內(nèi)核軟件的完美交互,它為每一個(gè)進(jìn)程提供一個(gè)大的、一致的和私有的地址空間。通過(guò)一個(gè)很清晰的機(jī)制,虛擬內(nèi)存提供了三個(gè)很重要的能力:
它將主存看成是一個(gè)存儲(chǔ)在磁盤(pán)上的地址空間的高速緩存,在主存中只保存活動(dòng)區(qū)域,并根據(jù)需要在磁盤(pán)和主存之間來(lái)回傳送數(shù)據(jù),通過(guò)這種方式,高效的使用了主存。 它為每個(gè)進(jìn)程提供了一致的地址空間,從而簡(jiǎn)化了內(nèi)存管理 它保護(hù)了每個(gè)進(jìn)程的地址空間不被其他進(jìn)程破壞。
早期的PC使用的是物理地址,而且諸如數(shù)字信號(hào)處理器、嵌入式微控制器以及Cray超級(jí)計(jì)算機(jī)這樣的系統(tǒng)仍然還是繼續(xù)使用這種尋址方式。然而現(xiàn)代的處理器使用的是一種稱為虛擬尋址(virtual address)的尋址方式。使用虛擬地址,CPU通過(guò)生成一個(gè)虛擬地址(Virtual Address,VA)來(lái)訪問(wèn)主存,這個(gè)虛擬地址在被送到內(nèi)存之前先轉(zhuǎn)換成適當(dāng)?shù)奈锢淼刂?。將這個(gè)虛擬地址轉(zhuǎn)換成物理地址的任務(wù)叫做地址翻譯(address translation)。就像異常處理一樣,地址翻譯需要CPU硬件和操作系統(tǒng)的緊密合作。CPU芯片上叫做內(nèi)存管理單元(MMU)的專(zhuān)有硬件,利用存放主存中的查詢表來(lái)動(dòng)態(tài)的翻譯虛擬地址,該表的內(nèi)容由操作系統(tǒng)來(lái)管理。
? ??地址空間是一個(gè)非負(fù)整數(shù)的有序集合{0,1,2,.......}。如果地址空間中的整數(shù)是連續(xù)的,那么我們說(shuō)它是一個(gè)線性的連續(xù)地址空間。在一個(gè)帶有虛擬內(nèi)存的系統(tǒng)中,CPU從一個(gè)由N個(gè)地址的地址空間中生成虛擬地址,這個(gè)地址空間稱為虛擬地址空間(virtual address space)。一個(gè)地址空間的大小是由表示最大地址所需要的位數(shù)來(lái)描敘的?,F(xiàn)代系統(tǒng)通常支持32位或者64位虛擬地址空間。? ? 一個(gè)系統(tǒng)還有一個(gè)物理地址空間(physical address space),對(duì)應(yīng)于系統(tǒng)中物理內(nèi)存的M個(gè)字節(jié)。地址空間的概念是十分重要的,因?yàn)樗宄貐^(qū)分了數(shù)據(jù)對(duì)象(字節(jié))和它們地屬性(地址)。一旦認(rèn)識(shí)到了這種區(qū)別,那么我們就可以將其推廣了,允許每個(gè)數(shù)據(jù)對(duì)象有多個(gè)獨(dú)立地地址空間,其中每個(gè)地址都選自一個(gè)不同的地址空間。這就是虛擬內(nèi)存的基本思想。主存中的每字節(jié)都有一個(gè)選自虛擬空間的虛擬地址和一個(gè)選自物理空間的物理地址。
未分配:VM系統(tǒng)還未分配(或者創(chuàng)建)的頁(yè)。未分配的塊沒(méi)有任何數(shù)據(jù)和它們相關(guān)聯(lián),因此也就不占用任何磁盤(pán)空間。 緩存的:當(dāng)前已緩存在物理內(nèi)存中的已分配頁(yè)。 未緩存的:未緩存在物理內(nèi)存中的已分配頁(yè)。
一。物理和虛擬尋址
? ??計(jì)算機(jī)系統(tǒng)的主存被組織成一個(gè)有M個(gè)連續(xù)的字節(jié)大小的單元組成的數(shù)組。每字節(jié)都有一個(gè)唯一的物理地址(PA)。第一個(gè)字節(jié)的物理地址為0,接下來(lái)的字節(jié)地址為2,依次類(lèi)推。給定這種簡(jiǎn)單的結(jié)構(gòu),CPU方位內(nèi)存的最自然的方式就是使用物理地址。我們把這種方式稱為物理尋址(physical addressing)。早期的PC使用的是物理地址,而且諸如數(shù)字信號(hào)處理器、嵌入式微控制器以及Cray超級(jí)計(jì)算機(jī)這樣的系統(tǒng)仍然還是繼續(xù)使用這種尋址方式。然而現(xiàn)代的處理器使用的是一種稱為虛擬尋址(virtual address)的尋址方式。使用虛擬地址,CPU通過(guò)生成一個(gè)虛擬地址(Virtual Address,VA)來(lái)訪問(wèn)主存,這個(gè)虛擬地址在被送到內(nèi)存之前先轉(zhuǎn)換成適當(dāng)?shù)奈锢淼刂?。將這個(gè)虛擬地址轉(zhuǎn)換成物理地址的任務(wù)叫做地址翻譯(address translation)。就像異常處理一樣,地址翻譯需要CPU硬件和操作系統(tǒng)的緊密合作。CPU芯片上叫做內(nèi)存管理單元(MMU)的專(zhuān)有硬件,利用存放主存中的查詢表來(lái)動(dòng)態(tài)的翻譯虛擬地址,該表的內(nèi)容由操作系統(tǒng)來(lái)管理。
二。地址空間
? ??地址空間是一個(gè)非負(fù)整數(shù)的有序集合{0,1,2,.......}。如果地址空間中的整數(shù)是連續(xù)的,那么我們說(shuō)它是一個(gè)線性的連續(xù)地址空間。在一個(gè)帶有虛擬內(nèi)存的系統(tǒng)中,CPU從一個(gè)由N個(gè)地址的地址空間中生成虛擬地址,這個(gè)地址空間稱為虛擬地址空間(virtual address space)。一個(gè)地址空間的大小是由表示最大地址所需要的位數(shù)來(lái)描敘的?,F(xiàn)代系統(tǒng)通常支持32位或者64位虛擬地址空間。? ? 一個(gè)系統(tǒng)還有一個(gè)物理地址空間(physical address space),對(duì)應(yīng)于系統(tǒng)中物理內(nèi)存的M個(gè)字節(jié)。地址空間的概念是十分重要的,因?yàn)樗宄貐^(qū)分了數(shù)據(jù)對(duì)象(字節(jié))和它們地屬性(地址)。一旦認(rèn)識(shí)到了這種區(qū)別,那么我們就可以將其推廣了,允許每個(gè)數(shù)據(jù)對(duì)象有多個(gè)獨(dú)立地地址空間,其中每個(gè)地址都選自一個(gè)不同的地址空間。這就是虛擬內(nèi)存的基本思想。主存中的每字節(jié)都有一個(gè)選自虛擬空間的虛擬地址和一個(gè)選自物理空間的物理地址。三。虛擬內(nèi)存作為緩存的工具
? ??概念上而言,虛擬內(nèi)存被組織為一個(gè)由存放在磁盤(pán)上的N個(gè)連續(xù)的字節(jié)大小的單元組成的數(shù)組。每字節(jié)都有一個(gè)唯一的虛擬地址,作為到數(shù)組的索引。磁盤(pán)上數(shù)組的內(nèi)容被緩存到主存中。和存儲(chǔ)器層次結(jié)構(gòu)中其他緩存一樣,磁盤(pán)(較低層)上的數(shù)據(jù)被分割為塊,這些塊作為磁盤(pán)和主存之間的傳輸單元。VM系統(tǒng)通過(guò)將虛擬內(nèi)存分割為稱為虛擬頁(yè)(Vitrual Page)的大小固定的塊來(lái)處理這個(gè)問(wèn)題。每個(gè)頁(yè)面大小為P字節(jié)。類(lèi)似的,物理內(nèi)存頁(yè)被分割為物理頁(yè)(Physical page,PP),大小也為P字節(jié)(物理頁(yè)面也被稱為頁(yè)幀 Page frame)。? ? 在任何時(shí)刻,虛擬頁(yè)面的集合都分為三個(gè)不相交的子集:四。頁(yè)表
?? ?同任何緩存一樣,虛擬內(nèi)存系統(tǒng)必須由某種方法來(lái)判定一個(gè)虛擬頁(yè)是否緩存在DRAM中的某個(gè)地方。如果是,系統(tǒng)還必須確定這個(gè)虛擬頁(yè)存放在哪個(gè)物理頁(yè)面中。如果不命中,系統(tǒng)必須判斷這個(gè)虛擬頁(yè)面放在磁盤(pán)的哪個(gè)位置,在物理內(nèi)存中選擇一個(gè)犧牲頁(yè),并將虛擬頁(yè)從磁盤(pán)復(fù)制到DRAM中,替換這個(gè)犧牲頁(yè)面。 ? ? 這些功能是軟硬件聯(lián)合提供的,包括操作系統(tǒng)、MMU(內(nèi)存管理單元)中的地址翻譯硬件和一個(gè)存放在物理內(nèi)存中叫作頁(yè)表(page table)的數(shù)據(jù)結(jié)構(gòu),頁(yè)表將虛擬頁(yè)映射到物理頁(yè)面。每次地址翻譯硬件將一個(gè)虛擬地址轉(zhuǎn)換為物理地址時(shí),都會(huì)讀取頁(yè)表。操作系統(tǒng)負(fù)責(zé)維護(hù)頁(yè)表的內(nèi)容,以及在磁盤(pán)與DRAM之間來(lái)回傳送頁(yè)。 下圖展示了一個(gè)頁(yè)表的基本組織結(jié)構(gòu)。頁(yè)表就是一個(gè)頁(yè)表?xiàng)l目(Page Table Entry)的數(shù)組。虛擬地址空間中的每個(gè)頁(yè)在頁(yè)表中都有一個(gè)固定的偏移量處都有一個(gè)PTE。為了我們的目的,我們假設(shè)每個(gè)PTE是由一個(gè)有效位(valid bit)和一個(gè)n位地址字段組成的。有效位表明了該虛擬頁(yè)面當(dāng)前是否被緩存在DRAM中。如果設(shè)置了有效位,那么地址字段就表示DRAM中相應(yīng)的物理頁(yè)的起始位置,這個(gè)物理頁(yè)中緩存了該虛擬頁(yè)。如果沒(méi)有設(shè)置有效位,那么這個(gè)空地址表示這個(gè)虛擬頁(yè)還未被分配。否則,這個(gè)地址就會(huì)指向該虛擬頁(yè)在磁盤(pán)上的起始位置。五。地址翻譯
總結(jié)
以上是生活随笔為你收集整理的全面解析虚拟内存概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Centos系统磁盘扩容
- 下一篇: 内存映射IO (MMIO) 简介