如何记录进程的页面引用字符串?

时间:2012-03-07 02:07:08

标签: operating-system paging tlb

操作系统问题:

假设我们在分页内存系统中运行了一个进程,并且我们希望按照它所执行的特定顺序跟踪它访问的页面。我们怎么能这样做?

我想我们可以在每次需要加载到TLB时将页面写入字符串,但是我的操作系统将无法跟踪每个页面的引用顺序(和引用数量) TLB,除非以某种方式每一次内存访问我都可以检查TLB。总的来说,我发现这个问题有点令人困惑......

假设每个页表条目是64位,虚拟页面为20位,对应物理帧为20位。有几位是状态/特权,但有一些“空闲”位可以使用。

感谢。

编辑 - 示例:如果操作系统的页面大小为1000,并且进程访问某些地址,如1234,5660,1220,7442,...那么页面引用字符串将看起来像1,5,1, 7,...

1 个答案:

答案 0 :(得分:1)

一个选项是将进程的所有页面标记为不可访问,并且每当出现页面错误时,将错误页面标记为可访问,将页面编号记录在“字符串”中,然后让进程执行一条指令并从头开始重复所有内容(将所有内容标记为无法访问等)。

如果执行所有这些操作的代码未在内核中运行,则可能无法始终执行上述操作。这在很大程度上取决于硬件和操作系统。不过,您可以在Windows上接近它,请参阅this question以及我对它的回答。