![](/img/trans.png)
[英]how can I implement paging , and find physical memory address knowing virtual address
[英]Find physical memory address from virtual memory address
我要解決的真正問題是,如何確定操作系統是否將兩個虛擬地址映射到完全相同的物理區域?
例如在下面的smaps
示例中,我如何知道兩個內存區域實際上在物理上是否相同?
cat /proc/<pid>/smaps
...
7f7165d42000-7f7265d42000 r--p 00000000 00:14 641846 /run/shm/test (deleted)
Size: 4194304 kB
Rss: 4194304 kB
Pss: 2097152 kB
...
VmFlags: rd mr mw me nr sd
7f7265d42000-7f7365d42000 rw-s 00000000 00:14 641846 /run/shm/test
Size: 4194304 kB
Rss: 4194304 kB
Pss: 2097152 kB
...
VmFlags: rd wr sh mr mw me ms sd
...
獎勵:有沒有一種方法可以簡單地在C中以編程方式完成它?
我試圖查找重復項,但找不到相關的重復項。
在Linux上,您可以通過解析/proc/<pid>
文件maps
和pagemap
。 這里有一個小的用戶空間工具可以為您完成此工作 。
對其進行編譯(不需要特殊選項),運行page-types -p <pid> -l -N
,在第一列中找到虛擬頁面地址,在第二列中讀取物理地址。
將其轉換為庫並以編程方式使用應該很簡單。 請記住,該實用程序的某些操作需要root用戶訪問權限(例如,讀取/proc/kpageflags
),但是此任務不需要任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.