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

Bit*_*han 7 memory operating-system tlb

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

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

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

以上是解释ASID的教科书的引述。

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

话虽如此,ASID 是 TLB 中每个条目的额外位,用于检查正在访问该条目的进程是否属于该进程。

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

请帮助我理解错误的地方。

谢谢!

use*_*003 12

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

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

至少有两种方法可以处理这个问题。一种是在有进程切换时刷新缓存。

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

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

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

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

我想知道的是,当使用 ASID 拒绝进程时,它不应该捕获,而不是 TLB 未命中?

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