是否可以从TLB(翻译后备缓存,这是CPU中的特殊缓存)中获取虚拟页面到物理页面的翻译列表?我的意思是现代x86或x86_64;我想以编程方式实现,而不是使用JTAG并将所有TLB条目移出。
是否可以从TLB(翻译后备缓存,这是CPU中的特殊缓存)中获取虚拟页面到物理页面的翻译列表?我的意思是现代x86或x86_64;我想以编程方式实现,而不是使用JTAG并将所有TLB条目移出。
Linux内核没有这样的转储程序,但是有一篇来自Linux内核的页面介绍了缓存和TLB:https://www.kernel.org/doc/Documentation/cachetlb.txt "Cache and TLB Flushing Under Linux." David S. Miller
在80386DX(以及80486,可能还有1998年的“嵌入式奔腾”100-166 MHz / "Embedded Pentium MMX 200-233 MHz")中有一个TLB转储:
这是通过测试寄存器TR6 TR7完成的:
TR6是命令寄存器,线性地址写入其中。它可用于写入TLB或从TLB读取行。TR7是要写入TLB或从TLB读取的数据。
维基百科中https://en.wikipedia.org/wiki/Test_register提到,读取TR6/TR7“会在任何比80486更新的CPU上生成无效操作码异常。”
mov tr6/tr7的编码仅对特权级0可用:http://www.fermimn.gov.it/linux/quarta/x86/movrs.htm
0F 24 /r movl tr6/tr7,r32 12 Move (test register) to (register)
movl %tr6,%ebx
movl %tr7,%ebx
0F 26 /r movl r32,tr6/tr7 12 Move (register) to (test register)
movl %ebx,%tr6
movl %ebx,%tr7
qemu
是一个处理器模拟器,可以模拟x86-64、sparc或其他类型的CPU。我没有使用过Bochs,但最新版本的PTLsim使用qemu
进行功能仿真。PTLSim用于模拟时序信息。 - Bhushan