是否有可能从TLB(翻译后备缓冲区,这是CPU中的特殊缓存)获取翻译列表(从虚拟页面到物理页面)。我的意思是现代x86或x86_64;我想以编程的方式来完成,而不是通过使用JTAG并将所有TLB输出移出。转储x86 CPU的TLB缓冲区的内容
2
A
回答
2
linux内核没有这样的缓冲器,从linux内核有关于缓存和tlb的页面:https://www.kernel.org/doc/Documentation/cachetlb.txt“缓存和TLB在Linux下刷新”。大卫S.米勒
有一个这样的TLB转储80386DX(和80486,并有可能在1998年的 “嵌入式奔腾” 100-166兆赫/ “Embedded Pentium MMX 200-233兆赫”):
- 1 - 书 “微处理器:8086/8088,八万〇二百八十六分之八万〇一百八十六,80386/80486和奔腾系列”,ISBN 9788120339422,2010年,页579
这是通过测试寄存器TR6 TR7完成:
- 2 - 书 “微处理器&微控制器” 由Godse & Godse,2008年ISBN 9788184312973页SA3-PA19: “3.2.7.3测试寄存器”,“只有两个测试寄存器(TR6,TR7)当前定义。 ...这些寄存器用于检查寻呼单元的转换后备缓冲器(TLB)。“
- 3”x86-Programmierung und -Betriebsarten(Teil 5)。 Die Testregister TR6 und TR7“,deutsche有关寄存器的文章:”ZurPrüfungdes Translation-Lookaside-Buffers sind die zwei Testregister TR6 und TR7 vorhanden。 Sie werden als Test-Command-Register(TR6)und Testdatenregister(TR7)bezeichnet。 “
- 4英特尔的‘嵌入式奔腾®处理器家族开发人员手册’,一部分‘26型号专用寄存器和功能’第8页‘26.2.1.2 TLB测试寄存器’
TR6是命令寄存器,线性地址是写入它可用于写入TLB或从TLB读取行TR7是要写入TLB或从TLB读取的数据
维基百科在https://en.wikipedia.org/wiki/Test_register中说,读取TR6/TR7“产生无效的操作码异常在任何比80486更新的CPU上。“
编码o ˚FMOV TR6/TR 7只提供给特权级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
0
您可以获取存储在TLB VA-PA转换的列表中,但您可能需要使用一个处理器模拟器像qemu
。您可以从http://wiki.qemu.org/Main_Page 下载并安装qemu您可以引导存储在磁盘映像中的内核(通常以qcow2或原始格式)并运行您的应用程序。您可能需要调整qemu中的代码才能打印TLB的内容。查看tlb_*
函数qemu/exec.c
您可能需要添加tlb_dump_function以打印TLB的内容。据我所知,这是最接近你倾倒TLB的内容。
P.S:我开始回答这个问题,然后意识到它已经一岁了。
相关问题
- 1. 在缓冲区中存储内容
- 2. 打印缓冲区内容
- 3. OpenglES缓冲区的显示内容
- 4. 比较环形缓冲区的内容
- 5. 不同大小的着色器存储缓冲区内容“转移”到阵列缓冲区
- 6. x86组件中的缓冲区
- 7. SQL Server缓冲区缓存内容
- 8. 将缓冲区内容复制到另一个缓冲区
- 9. 在x86体系结构中查看cpu缓存内容
- 10. 按行读取缓冲区行内容
- 11. 设置缓冲区内容与变量
- 12. 将ID3D11Texture2D转换为内存缓冲区
- 13. 我如何转换的char *缓冲区为unsigned char缓冲区
- 14. 缓冲XML内容所需的大小超过了缓冲区配额
- 15. 如何用yank缓冲区内容替换emacs中的区域?
- 16. 如何分区缓冲区中的内容C
- 17. 高速缓存,存储缓冲区和BIU/WCB在CPU中各自拥有单独的物理缓冲区还是单个物理缓冲区?
- 18. 如何访问perl中的Expect模块的缓冲区内容
- 19. commons collections缓冲区容量
- 20. WebGL:读取缓冲区对象的内容?
- 21. 比较内存缓冲区
- 22. 无法修改帧缓冲区的内容
- 23. 用于DMA的快速缓冲存储器缓冲区
- 24. 打印“stat”缓冲区内容的格式说明符
- 25. 如何将BGRA缓冲区转换为RGBA缓冲区格式?
- 26. 缓冲区内存分配
- 27. Libcurl获取缓冲区中的标题内容
- 28. 双缓冲,组装x86
- 29. fgets的冲洗缓冲区
- 30. AudioUnit(Mac)AudioUnitRender内部缓冲区冲突
当您的代码运行时,它通常会更改TLB的内容。你会如何避免这种情况? –
TLB倾倒应该小一点,以改变TLB。对于不完全关联的TLB,还有一些银行方法(由OS协助)使应用程序TLB不与TLB转储工具的TLB(如页面着色)相交。 – osgx