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