首页 文章

ARM11 Translation Lookaside Buffer(TLB)用法?

提问于
浏览
8

是否有一个体面的指南解释如何在 ARM1176JZF-S 核心上使用TLB(Translation Lookaside Buffers)表?

查看了ARM平台的技术文档后,我仍然不知道TLB是什么或它看起来像什么 . 据我所知,每个TLB条目将虚拟页面映射到物理页面,允许重新映射和控制内存权限 .

除此之外,我完全不知道如何使用它们 .

  • TLB条目有什么结构?如何创建新条目?

  • 如何在用户空间线程的上下文切换中处理VM?如何确保这些线程只能访问分配给其父进程的特定页面(强制执行内存保护)?我是否为每个上下文保存TLB状态?

  • 为什么有两个TLB?如果它只能有10个条目,我可以使用MicroTLB吗?当然,我需要超过10个 .

  • 它说主要TLB的一个部分是"a fully-associative array of eight elements, that is lockable" . 那是什么?主TLB只有8个条目吗?

Thank you in advance. 我'll be really glad if someone provides an explanation of what TLBs are. I'目前正在为我的内核工作一个内存映射器,而且我几乎已经走到了尽头 .

1 回答

  • 15

    ARM1176JZF-S的技术参考手册似乎是DDI 0301.该文档包含该特定ARM内核的所有特定详细信息 .

    我仍然不知道TLB是什么或它看起来像什么 . 据我所知,每个TLB条目将虚拟页面映射到物理页面,允许重新映射和控制内存权限 .

    TLB是页表的缓存 . 一些处理器允许直接访问TLB,而对页表没有任何了解(例如:MIPS),而其他处理器知道页表,并且内部使用程序员大多看不到的TLB(例如:x86) . 在这种情况下,TLB由硬件管理,系统程序员只需要关注使TTB(转换表基)寄存器指向页表,并使TLB在适当的位置无效 .

    TLB条目有什么结构?如何创建新条目?

    由硬件完成 . 在TLB未命中时,MMU遍历页表并从那里填充TLB .

    如何在用户空间线程的上下文切换中处理VM?

    某些平台具有简单地将虚拟地址映射到物理地址的TLB(例如:x86) . 在这些平台上,您必须在每个上下文切换上执行完整的TLB刷新 . 其他平台(MIPS,此特定ARM核心)映射(ASID,虚拟地址)映射到物理地址 . ASID是特定于应用程序的标识符,即:进程的标识符 . MMU使用寄存器来知道要使用哪个ASID(在这种情况下,我认为它是Context ID寄存器) . 由于可能存在比ASID更多的进程,因此有时您可能需要回收ASID(将其分配给不同的进程)并执行TLB刷新(这是ASID操作的Invalidate TLB所针对的) .

    为什么有两个TLB?如果它只能有10个条目,我可以使用MicroTLB吗?当然,我需要超过10个 .

    这正是出于为指令和数据提供小的单独1级高速缓存的原因 . 由于它们是缓存,因此您不需要超过10个(尽管有更多可以提高性能) .

    它说主TLB的一个部分是“一个可锁定的八个元素的完全关联数组” . 那是什么?主TLB只有8个条目吗?

    一些存储器页面(例如:内核的某些部分)经常被访问 . 锁定它们是有意义的,因此它们不会被TLB抛弃 . 而且,在实时系统上,TLB未命中或高速缓存未命中可能引入一些不希望的不可预测性 . 因此,可以选择锁定多个TLB条目 . 主TLB有更多条目,但只有8个是可锁定的 .

相关问题