首頁 常見問題 虛擬記憶體是電腦記憶體的一部分嗎?

虛擬記憶體是電腦記憶體的一部分嗎?

Aug 19, 2020 pm 03:19 PM
虛擬記憶體 電腦記憶體

虛擬記憶體是電腦實體記憶體中劃分出來的一部分。虛擬記憶體是電腦系統記憶體管理的技術,它通常是被分隔成多個實體記憶體碎片,還有部分暫時儲存在外部磁碟記憶體上,在需要時進行資料交換。

虛擬記憶體是電腦記憶體的一部分嗎?

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

  • 因為我的物理內存時有限的,當有多個進程要執行的時候,都要給4G內存,很顯然你內存小一點,這很快就分配完了,於是沒有得到分配資源的進程就只能等待。當一個進程執行完了以後,再將等待的進程裝入記憶體。這種頻繁的裝入記憶體的操作是很沒效率的

  • 由於指令都是直接存取物理記憶體的,那麼我這個進程就可以修改其他進程的數據,甚至會修改內核位址空間的數據,這是我們不想看到的

  • 因為記憶體時隨機分配的,所以程式運行的位址也是不正確的。

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

一個行程在執行時都會得到4G的虛擬記憶體。這個虛擬記憶體你可以認為,每個進程都認為自己擁有4G的空間,這只是每個進程認為的,但是實際上,在虛擬內存對應的物理內存上,可能只對應的一點點的物理內存,實際用了多少內存,就會對應多少物理內存。

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

程式開始要存取一個位址,它可能會經歷下面的過程

  • #每次我要存取位址空間上的某一個位址,都需要把位址翻譯為實際物理記憶體位址

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

  • #進程需要知道哪些位址空間上的資料在實體記憶體上,哪些不在(可能這部分儲存在磁碟上),還有在實體記憶體上的哪裡,這就需要透過頁表來記錄

  • 頁表的每個表格項目分成兩部分,第一部分記錄此頁是否在實體記憶體上,第二部分記錄實體記憶體頁的位址(如果在的話)

  • 當進程存取某個虛擬位址的時候,就會先去看頁表,如果發現對應的資料不在實體記憶體上,就會發生缺頁異常

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

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

虛擬記憶體是電腦記憶體的一部分嗎?

頁表的工作原理如下圖

虛擬記憶體是電腦記憶體的一部分嗎?

  • #我們的cpu想要存取虛擬位址所在的虛擬頁(VP3),根據頁表,找出頁表中第三條的值.判斷有效位。若有效位元為1,DRMA快取命中,根據實體頁號,找到實體頁當中的內容,返回。

  • 若有效位元為0,參數缺頁異常,呼叫核心缺頁異常處理程序。核心透過頁面置換演算法選擇一個頁面作為被覆蓋的頁面,將該頁的內容刷新到磁碟空間當中。然後把VP3映射的磁碟檔案快取到該實體頁上面。然後頁表中第三條,有效位元變成1,第二部分儲存了可以對應實體記憶體頁的位址的內容。

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

  • 將找到的內容對應到告訴快取當中,CPU從告訴快取中取得該值,結束。

再來總結虛擬記憶體是怎麼運作的#

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

另外在進程運行過程中,要透過malloc來動態分配記憶體時,也只是分配了虛擬內存,即為這塊虛擬內存對應的頁表項做相應設置,當進程真正訪問到此數據時,才引發缺頁異常。

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

利用虛擬記憶體機制的優點 

  • 既然每個行程的記憶體空間都是一致且固定的(32位元平台下方都是4G),所以連結器在連結可執行檔時,可以設定記憶體位址,而不用去管這些資料最終實際記憶體位址,這交給核心來完成映射關係

  • 當不同的當行程使用同一段程式碼時,例如庫檔案的程式碼,在實體記憶體中可以只儲存一份這樣的程式碼,不同行程只要將自己的虛擬記憶體映射過去就好了,這樣可以節省實體記憶體

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

更多相關知識,請造訪:PHP中文網

以上是虛擬記憶體是電腦記憶體的一部分嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在win11系統中如何調整虛擬記憶體? win11系統虛擬記憶體設定指南 在win11系統中如何調整虛擬記憶體? win11系統虛擬記憶體設定指南 Jan 29, 2024 pm 06:45 PM

虛擬記憶體是一種可以彌補軟體記憶體不足的技術,它能夠提供更好的使用體驗。然而,有些用戶在升級到Windows11系統後可能不知道如何設定虛擬記憶體。為了解決這個問題,本站小編為大家提供了最新的設定方法。如果你需要了解完整的步驟,請造訪本站以取得詳細資訊。 win11設定虛擬記憶體操作方法1、首先,按鍵盤win按鍵,點選找到並進入設定頁面。 3.接著,在裡面找到相關連結中的進階系統設定選項。 5.在跳轉後的頁面中,找到虛擬內存,點擊更改按鈕即可。

解決win10荒野大鏢客2虛擬記憶體不足的有效方法 解決win10荒野大鏢客2虛擬記憶體不足的有效方法 Dec 31, 2023 pm 04:29 PM

在玩荒野大鏢客2的時候很多朋友遇到的最大的問題就是提示虛擬記憶體不足吧,那麼這個問題該怎麼解決呢?今天就為大家帶來了解決方法一起看看吧。 win10荒野大鏢客2虛擬記憶體不足怎麼辦:1、右鍵點選此電腦,點選「屬性」。 2、點選左側的「進階系統設定」。 3、隨後點選「進階」再點選「設定」。 4.點選效能中的「進階」選擇虛擬記憶體下面的「更改」。 5.取消“自動管理所有磁碟機的分頁檔案大小”前的√,點選“自訂大小”,輸入數值,點選設定即可。

虛擬記憶體設定多少合適 虛擬記憶體設定多少合適 Feb 23, 2024 pm 03:34 PM

根據實體記憶體的大小來決定。具體建議:1、根據微軟公司的建議,虛擬記憶體設為實體記憶體容量的1.5--3倍;2、如果實體記憶體為2G,虛擬記憶體應該設定為3G=3072MB;如果實體記憶體為4G,那麼虛擬記憶體應該設定為6G=6144MB;3、通常建議將虛擬記憶體設定為電腦記憶體總量的1.5到2倍;4、一般跟實體記憶體差不多。

如何在 Windows 11 中增加虛擬記憶體(頁面檔案) 如何在 Windows 11 中增加虛擬記憶體(頁面檔案) May 13, 2023 pm 04:37 PM

如果您在執行高階應用程式或遊戲時注意到一定的延遲,則可能是RAM/記憶體通常運作已滿。這是增加Windows11中的虛擬記憶體或頁面檔案大小的地方。虛擬記憶體或頁面檔案是最容易被誤解的概念之一,圍繞著它有很多神話。無論其他人說什麼或做什麼,都必須徹底了解如何從您的電腦中獲得最佳效能。在以下部分中,我們將引導您完成在Windows11中增加虛擬記憶體的步驟,幫助您了解其重要性以及最佳虛擬記憶體大小。為什麼需要虛擬記憶體?頁面檔案或虛擬記憶體基本上是用作RAM的硬碟的一部分。當記憶體已滿且無法儲存更多資料時

如何在 Windows 11 中重置虛擬記憶體(頁面檔案)? 如何在 Windows 11 中重置虛擬記憶體(頁面檔案)? Apr 13, 2023 pm 11:28 PM

如果您的電腦沒有足夠的 RAM 或總是滿的,您可以依靠虛擬記憶體從實體記憶體中卸載非活動檔案。但是,如果這不太順利,您可能需要在 Windows 11 中重設虛擬記憶體。我們經常看到我們的電腦滯後,最可能的情況是Windows 11 中的高 RAM 使用率。有很多方法可以降低 RAM 消耗,但這可能會影響您的體驗。而且,這就是虛擬記憶體可以提供幫助的地方。有時需要在 Windows 11 中重置虛擬內存,因此,必須正確理解該概念和過程,我們在以下部分中進行了討論。虛擬記憶體是如何運作的,為什麼我需要重

虛擬記憶體分配:16g合適設定嗎? 虛擬記憶體分配:16g合適設定嗎? Feb 19, 2024 pm 07:42 PM

16G虛擬記憶體設定多少合適?虛擬記憶體是電腦系統中的一種技術,它可以透過將部分硬碟空間作為記憶體的擴充來提升系統的運作效率。對於作業系統來說,虛擬記憶體是一種非常重要的資源,它可以用來儲存暫時不需要的數據,從而釋放實體記憶體供其他程式使用。那麼,對於一台具備16G實體記憶體的電腦來說,該如何設定虛擬記憶體的大小呢?虛擬記憶體的大小是由作業系統自動管理的,但我們也可以手

適當的Win10虛擬記憶體設定是多少? 適當的Win10虛擬記憶體設定是多少? Jan 15, 2024 am 08:03 AM

其實,所謂的虛擬記憶體實質上是在硬碟上為它開闢出的一片面積廣大的特別區域,由Windows系統將此視為記憶體使用。究竟要如何設定出理想的虛擬記憶體大小呢?win10虛擬記憶體設定多少適合答:win10虛擬記憶體設定為實體記憶體的1.5倍最適合。這僅是參考值,具體設定方式視實際情況而定,設定區間最小是實體記憶體的1-1.5倍,最大則不超過實體記憶體的2-2.5倍,具體設定方法可點擊右側連結查看詳細內容。 (win10虛擬記憶體設定方法)win10虛擬記憶體設定在哪個碟最好答:win10虛擬記憶體設定在C碟最好。由於

如何優化Win11虛擬記憶體設定? Win11虛擬記憶體最佳配置方法 如何優化Win11虛擬記憶體設定? Win11虛擬記憶體最佳配置方法 Jan 30, 2024 pm 05:54 PM

如果你常常因為系統記憶體不足而感到困擾,可以嘗試透過設定虛擬記憶體來解決問題。虛擬記憶體可以在一定程度上減輕電腦的卡頓現象。然而,對於不熟悉Win11系統的使用者來說,如何進行虛擬記憶體的設定可能不太清楚。下面我將與大家分享Win11系統中設定虛擬記憶體的方法。 win11虛擬記憶體設定多少合適? 1.如果電腦記憶體小於4GB,通常可以將虛擬記憶體設定在2-4GB之間。根據理論,可以將虛擬記憶體設定為實體記憶體的1.5倍,但在實際使用中可以根據需要進行靈活調整,並沒有固定的數值要求。甚至可以將虛擬記憶體設定為與實體內存