2011-08-10 12 views
3

我想通過記錄一段時間內的頁面錯誤來編寫玩具工作集估算器。每當頁面出現故障時,我想記錄它被觸摸。當我試圖跟蹤對已經存在的頁面的訪問時,該方案崩潰了。如果頁面被讀取或寫入而不觸發錯誤,我無法跟蹤訪問。如何強制頁面發生錯誤,即使它已經在tlb中?

那麼,我希望能夠導致頁面訪問時發生「輕量級」錯誤。我在某個時候聽說過某種方法,但我不明白它爲什麼起作用,所以它並不在我的腦海中。骯髒的一點也許?

回答

2

執行此操作的常用方法是簡單地清除頁面的「存在」位,同時將頁面留在內存和必要的內核數據結構中,以便內核知道這一點。

但是,根據所討論的體系結構,您可能有更好的選擇 - 例如,在x86上,每當在線性地址轉換中使用PTE時,都會設置一個「訪問」標誌(PTE中的位5) 。您可以隨時清除此位,並且硬件會將其設置爲記錄該頁面已被觸摸。

使用這兩種方法之一,您需要清除TLB中該頁面的高速緩存翻譯 - 在x86上,您可以使用INVLPG指令。

3

您可以使用mprotectPROT_NONE(「頁面無法訪問」)。然後,對指定頁面的任何訪問都將導致錯誤。

+0

我打算修補我的內核,所以用戶空間方法並不是我所期待的,儘管我確信這種技術可以轉化爲內核中的某些東西。公認。 – Alex

相關問題