Linux
列出記憶體中存在的所有文件
這個問題回答了關於如何找到記憶體的一部分的問題。但是,在
fincore
執行檔中,您必須傳遞文件名以檢查它是否是記憶體的一部分。是否有工具或方法可以在不傳遞文件名的情況下查找屬於記憶體記憶體的所有條目。
PS:我們在嵌入式系統中執行它,執行一個 for 循環並將所有文件傳遞給
fincore
它自己是一個更耗時和耗記憶體的過程。因此,我正在尋找其他方法。
我不知道核心在哪裡公開與它記憶體的塊相關聯的文件名。根據這個答案
https://stackoverflow.com/a/4941371
即使使用自定義核心模組,您可能做的最好的事情就是獲取 inode 和設備的列表。從那裡您可能仍然需要遍歷文件系統來查找這些文件。
然後你可能會問“但是,怎麼
fincore
知道我列出的文件?” 或者你可能不會,但我發現這個方法非常聰明,所以就在這裡。該fincore
工具通過執行以下操作來工作:
- 在給定文件上呼叫mmap(2) ( https://code.google.com/p/linux-ftools/source/browse/linux-fincore.c#260 )
- 在 mmap 返回的記憶體區域上呼叫mincore(2) ( https://code.google.com/p/linux-ftools/source/browse/linux-fincore.c#279 )
系統
mincore
呼叫告訴您給定的記憶體頁面是否在核心記憶體中(即,訪問時不會導致頁面錯誤)。由於mmap
延遲載入映射文件,並且我們還沒有讀取任何映射區域,因此任何不會導致頁面錯誤的頁面都必須是我們記憶體的一部分。