2014-09-20 97 views
0

虛擬頁面被映射到VM機制中的物理頁面。一旦新的頁面必須被分頁,物理頁面就會被清除。
我總是假定頁面輸入/輸出頁面是交換區域或實際映射到虛擬機的文件區域。
我已經讀過Linux在啓動時將所有物理頁面映射到虛擬頁面(這就是爲什麼監視工具顯示內核保留的內存,我猜)。
所以我的問題是,這種方法有什麼好處?虛擬頁面在物理頁面被驅逐之前並不物理存在於磁盤上,並且頁面的頁面進出頁面的代價很高,這是不可避免的。此外,在我看來,將原先保留給內核的所有這些頁面傳遞給請求它們的各種進程會更加複雜。
我在這裏誤解了什麼?Linux上的虛擬內存

回答

-1

Linux虛擬內存(通常是虛擬內存)用於抽象物理內存以允許操作系統控制內存訪問。內核維護從虛擬地址映射到物理地址的頁表。

分頁內存用於指當前存儲在磁盤(交換)中的頁面被帶入內存。分頁出內存是指將頁面寫入磁盤(交換)並從內存中清除。這允許將更頻繁使用的頁面保存在更快的存儲中,並且將不常用的頁面保存在較慢的存儲中。

虛擬內存還允許操作系統和進程使用比系統上存在的實際物理內存更多的內存。

+0

我的問題是Linux方法的好處是什麼將所有物理頁面映射到VM頁面啓動?無論如何都不能避免交換成本。 – Cratylus 2014-09-20 21:53:59

+0

老實說,我不認爲它實際上是因爲內核需要按需映射頁面。例如,考慮'sbrk'或'mmap',或者甚至只是堆棧地址上的頁面錯誤。內核在啓動時必須初始化頁表,並告訴CPU頁表在哪裏。 – Jason 2014-09-20 22:04:48

+0

@Cratylus也許你在談論免費網頁?物理內存需要被跟蹤以實際分配它。這不是任何操作系統所獨有的。啓動後,需要通過[MMU](https://en.wikipedia.org/wiki/Memory_management_unit)訪問內存,這需要假設頁表結構是有效的。 – Jason 2014-09-21 00:57:55

0

映射所有物理頁面簡化了將某些內容加載到即將初始化的內存中。初始頁面映射沒有被分配給任何進程(僅僅是內核),但是這樣做可以簡化和加速數據,代碼,內核結構到新分配的內存的I/O和/或拷貝,可能僅僅使用memcpy()memset() 。從邏輯上講,虛擬內存頁面不應被視爲僅映射到文件的一部分:它們可以是堆棧,堆,文件系統關聯緩存或驅動程序數據結構。在這些情況下,虛擬空間將不會映射到任何內容。

我幾年沒有看過相關的源代碼,但是至少在具有1 + G內存的現代系統上分頁到交換文件往往是可以避免的。它的效率至少高出兩倍(可能超過10倍),以便取消映射一些長時間未訪問的只讀頁面,並將其重新映射到當前所需的任何頁面。只有修改過的頁面需要寫入交換。

如果您想查看截然不同的分頁和交換條件,請告訴內核使用更少的內存。將mem=64M(或更少)添加到Linux引導參數。

+0

1)'......這樣做可以簡化和加速數據的I/O和/或複製......'但是實際上可以避免的開銷是多少?如果頁面沒有被映射,唯一的開銷就是將它添加到Page Table.Right中?其餘的即拷貝將是相同的。PT修改是如此昂貴還是我在這裏困惑? 2)'....它的效率至少高出一倍(可能超過10倍),以便取消映射某個只讀頁面......但如果不使用交換,則虛擬機大小與物理內存相同。認爲VM大小= swap +物理內存,所以交換空間越多越好。 – Cratylus 2014-09-21 11:44:47