是否可以从 TLB(翻译后备缓冲区,这是 CPU 中的特殊缓存)获取翻译列表(从虚拟页到物理页)。我的意思是现代 x86 或 x86_64;我想以编程方式完成此操作,而不是使用 JTAG 并将所有 TLB 条目移出。
Linux内核没有这样的转储器,Linux内核中有关于缓存和tlb的页面:https://www.kernel.org/doc/Documentation/cachetlb.txt“Linux 下的缓存和 TLB 刷新。”大卫·S·米勒
80386DX(和 80486,并且可能在“嵌入式奔腾”100-166 MHz / 中)有这样的 TLB 转储嵌入式奔腾MMX200-233 MHz”,1998 年):
-
1- 书籍《微处理器:8086/8088、80186/80286、80386/80486 和奔腾家族》,ISBN 9788120339422,2010 年,第 579 页
这是通过测试寄存器 TR6 TR7 完成的:
-
2- Godse&Godse 所著的《Microprocessors & Microcontrollers》一书,2008 ISBN 9788184312973 page SA3-PA19:“3.2.7.3 Test Registers”“当前仅定义了两个测试寄存器 (TR6-TR7)。...这些寄存器用于检查转换后备分页单元的缓冲区(TLB)。”
-
3“x86-Programmierung und -Betriebsarten (Teil 5). Die Testregister TR6 und TR7”,有关寄存器的德文文章:“Zur Prüfung des Translation-Lookaside-Buffers sind die zwei Testregister TR6 und TR7 vorhanden。Sie werden als Test-Command-Register (TR6) 和 Testdatenregister (TR7) bezeichnet。”
-
4Intel 的“嵌入式 Pentium® 处理器系列开发人员手册”,“26 型号特定寄存器和功能”部分,第 8 页“26.2.1.2 TLB 测试寄存器”
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)