地址空间标识符(ASID)的用途

问题描述 投票:0回答:3

我目前正在学习 A Silberschatz、P Galvin、G Gagne 的操作系统。

我正在研究内存管理策略,以及他们介绍翻译后备缓冲区(TLB)的部分。

某些 TLB 在每个 TLB 条目中存储地址空间标识符 (ASID)。 ASID 唯一标识每个进程,并用于为该进程提供地址空间保护。当 TLB 尝试解析虚拟页号时,它会确保当前正在运行的进程的 ASID 与与虚拟页关联的 ASID 相匹配。如果 ASID 不匹配,则该尝试将被视为 TLB 未命中。

以上引用自教科书解释ASID。

我有点困惑,因为 TLB 未命中意味着逻辑地址无法在 TLB 中匹配,因此必须使用页表检查才能指向物理内存。

也就是说,ASID 是 TLB 中每个条目的额外位,用于检查访问该条目的进程是否属于该进程。

我想知道的是,当使用ASID拒绝进程时,不应该是trap,而不是TLB miss吗? TLB 未命中会将进程转发到页表,页表中进程的逻辑地址将能够映射到主内存中的某个地址。

我理解不正确的地方请帮助我。

谢谢!

memory operating-system tlb
3个回答
14
投票

假设您有两个进程在系统上运行。进程 A 的第 2 个页面映射到第 100 个页框,进程 B 的第 2 个页面映射到第 200 个页框。

所以现在MMU需要找到页#2,但不想再次读取页表。它转到页框 100 还是页框 200?

至少有两种方法可以解决这个问题。一种是每当有进程切换时刷新缓存。

另一种是为每个进程分配一些唯一的标识符,并将其包含在 TLB 缓存条目中。

我有点困惑,因为 TLB 未命中意味着逻辑地址无法在 TLB 中匹配,因此必须使用页表检查才能指向物理内存。

将逻辑页 #X 转换为物理页框:

  1. 在 TLB 中查找 #X。如果不存在,请转到页表。
  2. [#X 存在] 是否存在 ASID 与当前进程匹配的 #X 条目?如果没有,则转到页表。
  3. 使用TLB中的页面映射。

我想知道的是,当使用ASID拒绝进程时,不应该是trap,而不是TLB miss吗?

然后你会在进程第一次访问页面时遇到陷阱,并且程序会崩溃。


1
投票

虽然一年过去了,我却遇到了和你一样的问题。 而且我找到了TLB miss的详细解释:

对于软件管理的TLB,当机器遇到TLB未命中时,硬件会向操作系统引发异常(陷阱)(切换到内核模式),然后TLB未命中的陷阱处理程序会查找页表并更新TLB。

之后,处理程序将返回到被中断的指令(再次尝试导致异常的指令),这一次将产生 TLB 命中。

操作系统三件简单的事情,解释在19.3节


0
投票

我认为当 TLB 是物理/实际内存的最终 TLB 但也有用于 L1 缓存、L2 缓存和 L3 缓存的 TLB 时,TLB 未命中应该捕获到操作系统(或虚拟内存管理器)。当缓存 TLB 未命中时,可能有一个硬件页表遍历器可以比上下文切换到操作系统更快地解决 TLB 未命中(这也会污染缓存和 TLB)。

多核处理器上的多个进程共享一个 L3 TLB,当超线程可用并启用时,两个进程共享一个 L1 TLB 和 L2 TLB。每个进程都有自己独立的虚拟地址空间,TLB 必须区分这些空间。

© www.soinside.com 2019 - 2024. All rights reserved.