osg*_*sgx 2 x86 memory-management x86-64 tlb mmu
是否可以从TLB(翻译后备缓冲区,这是CPU中的特殊缓存)获取翻译列表(从虚拟页面到物理页面)。我的意思是现代的x86或x86_64;我想以编程的方式做到这一点,而不是通过使用JTAG并将所有TLB条目移出。
linux内核没有这样的转储程序,linux内核中有关于缓存和tlb的页面: https “ Linux下的缓存和TLB刷新”。戴维·米勒
在80386DX(和80486,甚至在“嵌入式奔腾”中100-166 MHz /在1998年的嵌入式奔腾MMX 200-233 MHz”中):
这是通过测试寄存器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
Run Code Online (Sandbox Code Playgroud)