TLB维护指令¶
TLB(Translation Lookaside Buffer)是一种硬件缓存,用于加速虚拟地址到物理地址的转换。当程序访问虚拟内存时,处理器会优先在TLB中查找地址映射,以避免频繁的页表查找带来的延迟。为确保TLB中的缓存项与实际页表数据保持一致,灵犀逻辑核架构提供了一组TLB维护指令来管理这些缓存项。
TLB维护指令属于系统块内的微指令,无论虚拟内存管理架构(VMMA)是否使用TLB,灵犀逻辑核的TLB维护指令都可以使用,并在存在TLB的时候对TLB的数据进行维护。这些指令使得灵犀逻辑核架构可以高效地管理TLB条目和内存映射,确保在任务切换、虚拟地址更新和特权转换时的映射准确性。
ASID(Address Space Identifier,地址空间标识符)是一种区分不同虚拟地址空间的标记,用于在任务切换或多任务操作系统中管理 不同进程 的TLB数据。借助ASID,不同的进程可以拥有独特的ASID值,从而使不同进程的TLB数据可以共存,避免频繁清空TLB。通过分配独立的ASID,处理器能够在多进程环境中识别和加载正确的虚拟地址映射,有效减少切换时的开销,提升整体系统性能。
TLB维护指令列表¶
| 微指令 | 汇编格式 | 描述 |
|---|---|---|
| TLB.IALL | tlb.iall | 清除当前灵犀逻辑核的所有TLB数据 |
| TLB.IA | tlb.ia SrcL | 清除由SrcL指定的ASID相关的TLB数据 |
| TLB.IV | tlb.iv SrcL | 清除当前ACR(Access Control Ring)对应翻译级别下,当前ASID下,由SrcL指定的虚拟地址范围内的TLB数据 |
| TLB.IAV | tlb.iav SrcL | 清除当前ACR翻译级别下,由SrcL指定的ASID和虚拟地址范围的TLB数据 |
指令编码如下:
所有TLB维护指令均为灵犀逻辑核的系统块微指令,并具备以下特点:
- 权限管理:每个TLB维护指令具备不同的权限要求,以确保在多层次权限管理下的安全性。
- 禁止用于原子块:由于TLB维护指令影响全局内存可见性,因此禁止将其用于原子块中,以防止破坏数据一致性。
TLB维护指令的使用与执行逻辑¶
1. 程序序与内存行为的关系¶
在灵犀逻辑核的执行过程中,先于TLB的内存行为,都对TLB维护指令之后的内存行为可见,包括对内存指令的PTW(Page Walk, 页表遍历)内存行为可见。而后于TLB维护指令的内存行为,都会受到TLB维护指令的影响。
指令取指行为(即指令预取)并不属于内存序列的一部分,因此程序序在TLB维护指令之后的指令可能发生在TLB维护指令发生之前(比如集成块在微指令执行前已经全部取指完成了),灵犀逻辑核的指令预取时也可能提前获得TLB维护指令之前的指令。为了确保在TLB维护指令后的指令重新取指和更新内存状态,灵犀逻辑核提供了isb指令。isb可以确保在TLB维护指令后,后续指令按照程序序列重新取指,从而确保内存和指令访问的正确性。
2. 使用场景¶
TLB维护指令主要用于以下场景:
-
任务切换:在任务切换时,可以通过
tc.ia或tc.iall指令清除当前ASID或所有TLB数据,以确保新任务的内存访问不会受到旧任务缓存项的干扰。 -
虚拟地址空间更新:在系统更新虚拟地址空间的页表映射时,通过
tc.iv或tc.iav清除指定虚拟地址范围内的TLB数据,使其在下次访问时重新加载正确的映射关系。 -
特权级转换:在ACR特权级转换或跨域访问时,通过
tc.iav确保在不同权限级别间访问的TLB数据一致,避免因缓存冲突而导致的不一致问题。
总结¶
TLB维护指令为灵犀逻辑核的虚拟地址管理提供了强大的缓存管理手段,适用于任务切换、虚拟地址空间更新和特权转换等多种场景。通过isb指令保证内存和指令的同步,TLB维护指令能进一步确保系统的缓存一致性和执行正确性,从而提升灵犀逻辑核在高性能计算和复杂内存管理环境中的可靠性。