91日韩国产欧美亚洲另类精品-91精品国产91热久久福利-一级黄色大片免费观看小草av-国产中文字幕日韩在线观看-九色粉嫩人妻91精品视色-国产一级片内射在线播放-欧美日韩女优制服另类-嫩模精品视频在线观看-欧美黄片在线免费观看

當前位置:首頁>教程>軟件資訊>什么是虛擬內(nèi)存?,如何合理設置虛擬內(nèi)存?

什么是虛擬內(nèi)存?,如何合理設置虛擬內(nèi)存?

2023-06-05 17:53:10 所屬:軟件資訊

什么是虛擬內(nèi)存?虛擬內(nèi)存是什么呢?不少小白用戶都不知道什么是虛擬內(nèi)存?對于什么是虛擬內(nèi)存,現(xiàn)在小編就來跟大家介紹下虛擬內(nèi)存。

什么是虛擬內(nèi)存呢?先查一下維基百科:

虛擬內(nèi)存是計算機系統(tǒng)內(nèi)存管理的一種技術。它使得應用程序認為它擁有連續(xù)可用的內(nèi)存(一個連續(xù)完整的地址空間),而實際上,它通常是被分隔成多個物理內(nèi)存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數(shù)據(jù)交換。與沒有使用虛擬內(nèi)存技術的系統(tǒng)相比,使用這種技術的系統(tǒng)使得大型程序的編寫變得更容易,對真正的物理內(nèi)存(例如RAM)的使用也更有效率。

對虛擬內(nèi)存的定義是基于對地址空間的重定義的,即把地址空間定義為「連續(xù)的虛擬內(nèi)存地址」,以借此「欺騙」程序,使它們以為自己正在使用一大塊的「連續(xù)」地址。

也就是說虛擬內(nèi)存能提供一大塊連續(xù)的地址空間,對程序來說它是連續(xù)的,完整的,實際上虛擬內(nèi)存是映射在多個物理內(nèi)存碎片上,還有部分映射到了外部磁盤存儲器上。虛擬內(nèi)存有以下兩個優(yōu)點:

1.虛擬內(nèi)存地址空間是連續(xù)的,沒有碎片

2.虛擬內(nèi)存的最大空間就是cup的最大尋址空間,不受內(nèi)存大小的限制,能提供比內(nèi)存更大的地址空間

虛擬內(nèi)存是如何工作的呢?

創(chuàng)建一個進程時,操作系統(tǒng)(32位系統(tǒng))會為該進程分配一個4GB 大小的虛擬內(nèi)存。 之所以是4GB ,是因為在 32 位的操作系統(tǒng)中,一個指針長度是 4 字節(jié)(32位, 2的32次方個地址尋址能力是從 0x00000000~0xFFFFFFFF )即為 4GB 大小的容量。

一個進程用到的虛擬地址是由內(nèi)存區(qū)域表來管理的,實際用不了4G。而用到的內(nèi)存區(qū)域,會通過頁表映射到物理內(nèi)存。所以每個進程都可以使用同樣的虛擬內(nèi)存地址而不沖突,因為它們的物理地址實際上是不同的。比如進程A的0x12345678虛擬地址和進程B的的0x12345678虛擬地址映射的物理地址是不同的的。

我們現(xiàn)在使用的64位系統(tǒng),虛擬內(nèi)存最大有多大呢?是2的64次方嗎?那將會有16EB的虛擬地址空間,1EB有多大呢?1EB = 1,000 PB = 1,000,000 TB =  1,000,000,000 GB 毫無疑問這是個非常巨大的數(shù)字,我們的系統(tǒng)根本不需要如此巨大的虛擬內(nèi)存?,F(xiàn)代的操作系統(tǒng),比如,Windows在AMD64上的實現(xiàn)僅應用了最大256TB的虛擬內(nèi)存。

cup要訪問虛擬內(nèi)存地址時,需要經(jīng)過地址翻譯成物理地址才能訪問。比如下圖(來自《深入理解計算機系統(tǒng)》)中,cpu要訪問虛擬地址4100,需要通過專用的硬件內(nèi)存管理單元(memory management unit)MMU來翻譯成對應的內(nèi)存物理地址4,然后cpu在內(nèi)存地址4的位置上取到數(shù)據(jù)返回。

虛擬內(nèi)存被分為一塊塊固定的大小,成為虛擬頁(Virtual Page)簡稱VP,對應的物理內(nèi)存也被分成一塊塊同樣的大小,成為物理頁(Physical Page)簡稱PP。磁盤和內(nèi)存之間是以頁為單位進行數(shù)據(jù)交換的。

cpu怎么知道某一個虛擬頁是否緩存了數(shù)據(jù)?緩存在內(nèi)存中還是磁盤中呢?

這就需要一張表格來記錄了,這就是頁表。

頁表第一列valid 如果是0表示該虛擬頁未被緩存,1表示已經(jīng)緩存了數(shù)據(jù)。

第二列藍色的表示數(shù)據(jù)緩存在內(nèi)存中,白色的表示數(shù)據(jù)緩存在磁盤中。

頁命中

當cpu要訪問PTE2(箭頭所指的位置)的數(shù)據(jù)時,發(fā)現(xiàn)valid標志位為1,所以表示該虛擬頁已經(jīng)被緩存了,由于頁表中的地址指向內(nèi)存中的VP2數(shù)據(jù)塊,所以cpu直接從內(nèi)存中讀取數(shù)據(jù)VP2,這種情況就叫做頁命中。

缺頁

當cpu要訪問PTE3(箭頭所指的位置)的數(shù)據(jù)時,發(fā)現(xiàn)valid標志位為0,所以表示該虛擬頁未被緩存,這時會觸發(fā)一個缺頁異常,cup根據(jù)頁表第二列的指針找到磁盤中對應的數(shù)據(jù)塊VP3,然后根據(jù)規(guī)則選擇一個內(nèi)存中的犧牲頁,把VP3覆蓋到內(nèi)存中。

上圖中的內(nèi)存中的vp4被替換成了VP3,valid的值從0變成1。

缺頁異常返回后,會重啟缺頁指令,并更新虛擬地址,cpu再次訪問PTE3的時候就能命中頁,取到數(shù)據(jù)了。

總結

當每個進程創(chuàng)建的時候,內(nèi)核會為每個進程分配虛擬內(nèi)存,這個時候數(shù)據(jù)和代碼還在磁盤上,當運行到對應的程序時,進程去尋找頁表,如果發(fā)現(xiàn)頁表中地址沒有存放在物理內(nèi)存上,而是在磁盤上,于是發(fā)生缺頁異常,于是將磁盤上的數(shù)據(jù)拷貝到物理內(nèi)存中并更新頁表,下次再訪問該虛擬地址時就能命中了。

現(xiàn)在你是不是對虛擬內(nèi)存的工作原理更加了解了呢?