我想知道上面哪一种机制是首先在Linux中引入的.其中两个是脏位跟踪机制。
第一个是通过/proc/clear_refs文件完成的,如下所示:一旦用户写入"4"对于/proc/$pid/clear_refs,内核取消了进程所有页面的脏位设置,并且在下一次尝试访问这些页面时,将触发页面错误并重置脏位(由内核),然后用户可以通过/proc/pagemap收集已访问的页面。
第二种方法允许用户自己处理页面错误:用户首先请求内核保护通过mmap分配的给定内存区域;在此之后,任何访问该区域页面的尝试都会产生一个页面错误,该错误的处理被转移给用户,例如,用户可以请求内核允许或拒绝访问。因此,通过这种方式,人们不再需要通过页面地图来知道哪些页面被访问或没有访问。
Fromman 5 proc
:
/proc/[pid]/clear_refs (since Linux 2.6.22)
和来自man 2 userfaultfd
:
VERSIONS
The userfaultfd() system call first appeared in Linux 4.3.
所以看起来/proc/[pid]/clear_refs
比userfaultfd
老得多。