2016-07-06 121 views

回答

1

用戶級代碼總是看到虛擬地址。它沒有辦法知道目前對應於這些地址之一的什麼物理地址(如果有的話)。 「虛擬」是它生活的唯一世界,也是它唯一知道的世界。對於所有的程序意圖和目的,「虛擬現實。」

+0

我已經在問題中的鏈接分享圖像。你能對此有一個看法並且詳細闡述一下嗎? –

0

澄清:所有操作系統(除了MS-DOS等...)在一個虛擬內存空間中運行的用戶程序。每個程序都有自己的感知,包括「位置$12345678」,每個程序的感知是正確。每個程序可以有不同的編號,並可以根據自己的喜好進行更改。

他們能做到這一點,因爲他們的沒有其實都知道:

  • 凡在物理內存他們 '位置$12345678'」 實際上駐留。 如果它......而且相當,可能不!)
  • 什麼是物理地址$12345678

操作系統維護虛擬存儲器爲每個過程中,採用和物理-RAM的組合(如有必要)頁面文件和/或交換的文件空間。一個進程正在使用的信息「按需」提供給一個物理RAM位置,這個位置對於它來說都是未知的,並且它不知道。最近未被使用的信息最終從物理RAM「被盜」並移動到外部存儲器中,直到它再次被引用,從而觸發所謂的「頁面錯誤」。

由調試器給你的內存的觀點是,被感知的存儲視圖,這是正確的正在調試的程序:虛擬地址,在此過程中的虛擬內存

+0

進程的虛擬地址空間是否有最大限制?就像我們在linux上使用top命令一樣,它顯示了進程的物理內存和虛擬內存。 (它不斷變化)。一個進程的虛擬內存如何改變 –

+0

應用程序認爲它有一定的大小的(虛擬)內存區域。它無法檢測到嘗試訪問任何特定位置是否會導致頁面錯誤。它只能通過系統調用從OS請求這些信息來預先確定其(虛擬)內存分配的大小。 –

+0

你看到'top'命令不斷變化的原因是因爲它可以*看到操作系統的虛擬內存子系統的活動。它可以看到有多少物理*資源正在用於支持任何進程:當前的物理RAM佔用空間和每個使用的交換/頁面空間。它可以看到進程將會喜歡多少內存(它的所謂「工作集大小」),以及它實際獲得多少內存。它可以看到等待的時間。進程競爭物理RAM資源。物理情況不斷變化...每微秒。 –

相關問題