虛擬記憶體和物理記憶體

2021-10-18 21:38:40 字數 1931 閱讀 8199

作業系統有虛擬記憶體與物理記憶體的概念。在很久以前,還沒有虛擬記憶體概念的時候,程式定址用的都是實體地址。程式能定址的範圍是有限的,這取決於cpu的位址線條數。比如在32位平台下,定址的範圍是2^32也就是4g。並且這是固定的,如果沒有虛擬記憶體,且每次開啟乙個程序都給4g的物理記憶體,就可能會出現很多問題:

於是針對上面會出現的各種問題,虛擬記憶體就出來了。

在之前一篇文章中程序分配資源介紹過乙個程序執行時都會得到4g的虛擬記憶體。這個虛擬記憶體你可以認為,每個程序都認為自己擁有4g的空間,這只是每個程序認為的,但是實際上,在虛擬記憶體對應的物理記憶體上,可能只對應的一點點的物理記憶體,實際用了多少記憶體,就會對應多少物理記憶體。

程序得到的這4g虛擬記憶體是乙個連續的位址空間(這也只是程序認為),而實際上,它通常是被分隔成多個物理記憶體碎片,還有一部分儲存在外部磁碟儲存器上,在需要時進行資料交換。

程序開始要訪問乙個位址,它可能會經歷下面的過程

每次我要訪問位址空間上的某乙個位址,都需要把位址翻譯為實際物理記憶體位址

所有程序共享這整一塊物理記憶體,每個程序只把自己目前需要的虛擬位址空間對映到物理記憶體上

程序需要知道哪些位址空間上的資料在物理記憶體上,哪些不在(可能這部分儲存在磁碟上),還有在物理記憶體上的**,這就需要通過頁表來記錄

頁表的每乙個表項分兩部分,第一部分記錄此頁是否在物理記憶體上,第二部分記錄物理記憶體頁的位址(如果在的話)

當程序訪問某個虛擬位址的時候,就會先去看頁表,如果發現對應的資料不在物理記憶體上,就會發生缺頁異常

缺頁異常的處理過程,作業系統立即阻塞該程序,並將硬碟裡對應的頁換入記憶體,然後使該程序就緒,如果記憶體已經滿了,沒有空地方了,那就找乙個頁覆蓋,至於具體覆蓋的哪個頁,就需要看作業系統的頁面置換演算法是怎麼設計的了。

關於虛擬記憶體與物理記憶體的聯絡,下面這張圖可以幫助我們鞏固。

我們的cpu想訪問虛擬位址所在的虛擬頁(vp3),根據頁表,找出頁表中第三條的值.判斷有效位。 如果有效位為1,drma快取命中,根據物理頁號,找到物理頁當中的內容,返回若有效位為0,引數缺頁異常,呼叫核心缺頁異常處理程式。核心通過頁面置換演算法選擇乙個頁面作為被覆蓋的頁面,將該頁的內容重新整理到磁碟空間當中。然後把vp3對映的磁碟檔案快取到該物理頁上面。然後頁表中第三條,有效位變成1,第二部分儲存上了可以對應物理記憶體頁的位址的內容。

缺頁異常處理完畢後,返回中斷前的指令,重新執行,此時快取命中,執行1。

將找到的內容對映到告訴快取當中,cpu從告訴快取中獲取該值,結束。

當每個程序建立的時候,核心會為程序分配4g的虛擬記憶體,當程序還沒有開始執行時,這只是乙個記憶體布局。實際上並不立即就把虛擬記憶體對應位置的程式資料和**(比如.text .data段)拷貝到物理記憶體中,只是建立好虛擬記憶體和磁碟檔案之間的對映就好(叫做儲存器對映)。這個時候資料和**還是在磁碟上的。當執行到對應的程式時,程序去尋找頁表,發現頁表中位址沒有存放在物理記憶體上,而是在磁碟上,於是發生缺頁異常,於是將磁碟上的資料拷貝到物理記憶體中。

另外在程序執行過程中,要通過malloc來動態分配記憶體時,也只是分配了虛擬記憶體,即為這塊虛擬記憶體對應的頁表項做相應設定,當進**正訪問到此資料時,才引發缺頁異常。

可以認為虛擬空間都被對映到了磁碟空間中(事實上也是按需要對映到磁碟空間上,通過mmap,mmap是用來建立虛擬空間和磁碟空間的對映關係的)

當不同的程序使用同一段**時,比如庫檔案的**,在物理記憶體中可以只儲存乙份這樣的**,不同程序只要將自己的虛擬記憶體對映過去就好了,這樣可以節省物理記憶體

在程式需要分配連續空間的時候,只需要在虛擬記憶體分配連續空間,而不需要物理記憶體時連續的,實際上,往往物理記憶體都是斷斷續續的記憶體碎片。這樣就可以有效地利用我們的物理記憶體

物理記憶體和虛擬記憶體

1.物理記憶體和虛擬記憶體 直接從物理記憶體讀取資料比從硬碟讀寫資料要快得多,因此,我們希望所有的資料的讀寫在記憶體中完成,但是記憶體是有限的,這樣就引出了物理記憶體與虛擬記憶體的概念。物理記憶體是系統硬體提供的記憶體大小,是真正的記憶體。虛擬記憶體是為了滿足物理記憶體不足而提出的策略,利用磁碟空間...

虛擬記憶體和物理記憶體

虛擬記憶體 物理記憶體 物理記憶體,在應用中,物理上,真實的插在板子上的記憶體是多大就是多大了。而在cpu中的概念,物理記憶體就是cpu的位址線可以直接進行定址的記憶體空間大小。比如8086只有20根位址線,那麼它的定址空間就是1mb,我們就說8086能支援1mb的物理記憶體,及時我們安裝了128m...

物理記憶體和虛擬記憶體

1 概念 物理記憶體 真實的硬體裝置 記憶體條 虛擬記憶體 利用磁碟空間虛擬出的一塊邏輯記憶體,用作虛擬記憶體的磁碟空間被稱為交換空間 swap space 為了滿足物理記憶體的不足而提出的策略 2.使用的順序 linux會在物理記憶體不足時,使用交換分割槽的虛擬記憶體。核心會將暫時不用的記憶體塊資...