2013-01-11 39 views
0

我得到了在內存中的程序的地址空間映射有點糊塗, 這裏是一個鏈接 http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory 它在執行與程序的虛擬地址映射優惠和具有顯着1GB對於內核模式和3 GB用戶模式, 並提及使用頁表訪問內存段,內存中的程序和它的內存映射

如果我沒有錯誤,Linux會使用僅在x86架構上爲4 KB的頁面文件,那麼過程如何可以從內存中使用3GB的映射地址空間(如鏈接上給出的每個進程都是4GB)。這對我來說有點直觀,或者我的理解在某些地方是錯誤的?

+0

Linux使用大小爲4kB的**頁面** ... –

回答

0

我不知道我是否理解你的權利。看來你認爲處理器使用4KB頁面來管理映射文件。

實際上,這4KB只是一個頁面內存緩衝區。當系統嘗試從任何文件讀取數據到內存時,它將首先讀取頁面內存緩衝區中的內容,並將緩衝區中的內容移動到真正的堆棧或堆中。該4KB頁面緩衝區不用於控制映射的內存地址。

映射的地址就像HANDLE,我想。它存儲在內存的一部分中。當您使用此句柄來獲取數據時,系統將對其進行計數並將其轉移到DISK上的實際地址。然後系統將讀取映射數據到頁面緩衝區,並最終將它們移動到內存。

詳情請查看以下鏈接: http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files 本博客還有其他幾篇關於內存管理的好文章。複雜但很好。