2016-10-21 77 views
4

我正在運行某個數組變量的程序。我正在使用Linux系統(ubuntu)支持的/ proc/self/pagemap文件將此陣列的虛擬地址(VA)轉換爲物理地址(PA)。我試圖通過多次運行相同的程序來觀察VA-PA映射(連續運行之間的時間間隔)。我觀察到的是PA在所有運行中都保持不變。爲什麼在運行中物理地址是相同的?

如果VA保持不變,但PA爲什麼保持不變也是合理的。 PA依賴於由OS維護的RAM中可用的空閒頁面。它必須隨時改變系統負載。考慮到所有這些,我期望PA能夠變化,但與之相反的是我觀察到的。

我缺少回答這個問題的OS/Architecture的什麼概念?

+1

說明你嘗試啓動其他一些程序,如果你得到同樣的檢查清除緩存?如果您始終擁有相同的內存佈局,則不需要使用不同的物理地址空間(取決於操作系統的實施情況),但程序的大小也會影響其放置位置。也許當它足夠小時,你就佔據了一個空間,沒有其他一般的工具可以使用。 – Hayt

回答

3

「在時間的縫隙」

OS的希望應用程序要重新啓動 - 所以,如果內存不短缺,而內存將是「自由」它也將使用二進制緩存以防萬一它再次運行。 Windows任務管理器報告這相當好。

時間本身並不足以釋放這個緩存,並且啓動一些其他應用程序也可能是不夠的;您需要啓動一些獨特的進程(或者只使用大量內存)來清除緩存。

另外,由acornagl指出,一個可以手動以下張貼here

+1

除了我建議的答案:[如何清除Linux系統中的緩存](http://unix.stackexchange.com/questions/87908/how-do-you-empty-the-buffers-and-cache- on-a-linux-system) – acornagl

+0

很棒的回答。然而,我會指出習慣上來自評論的貢獻。例如。 「正如@acornagl所指出的那樣,你可以通過手動清除緩存...」 – bolov

+0

@bolov謝謝你,我會在下次開始的時候這樣做;) – acornagl

相關問題