2010-02-01 71 views
4

我使用文件映射來讀取一個20 GB的文件。當主內存耗盡時,內核如何將文件映射頁面交換到磁盤?Linux內核如何交換文件映射頁面?

我想一個可能的方法是將頁面條目設置爲NULL。然後下一次訪問該頁面時,將再次調用do_no_page()函數將文件映射到內存。這樣對嗎?

另一個問題是內核用於交換內存頁面的優先級是什麼?普通頁面或文件映射頁面?

+0

沒有冒犯,但我無法理解你正在努力完成什麼。請澄清你的問題。 – batbrat 2010-02-01 13:39:29

回答

2

頁表中的每個條目都有一個invalid位。當頁面交換到硬盤驅動器時,其invalid位被設置。無論何時訪問頁面,MMU(處理器內部的內存管理單元)都會引發異常,系統負責將頁面重新加載到內存中。然後錯誤的指令被重新執行。

通常交換的頁面是不經常訪問的頁面。每頁表格條目中還有一點可以知道每次訪問頁面時的情況。 如何選擇正確的頁面與這個單一位交換是一個大問題,Andrew Tanenbaum在非常好的操作系統中有關於此的一整章。

您可以用mlock()系統調用將頁面鎖定到RAM內存中。如果使用mmap()將文件映射到內存中,可以使用MAP_LOCKED標誌來完成(參見手冊)。