在这种情况下,“有效”时间是指“预期”或“平均”时间。因此,您需要花时间访问各个案例中的页面,并将每个案例乘以它的概率。通过拆分为多个级别的案例,表达式有些复杂。案例有:
- 80% 的时间物理地址在 TLB 缓存中。这给了我们 80% 的时间访问 TLB 寄存器以及访问页面本身:
0.8(TLB + MEM)
- 剩余 20% 的时间它不在 TLB 缓存中。这会分成更多的情况,所以它给了我们
0.2(loooong expression)
(这个表达式实际上没有那个括号,但我会把它当作一个错字,因为没有它,系数加起来不会等于 1,如果它们没有意义不)。案例有:
- 90%(在这 20% 中)页面仍然被映射,但是地址从缓存中掉了出来,所以我们必须从页面映射中读取额外的内存。所以 90% 次访问 TLB 寄存器加上访问页表加上访问页本身:
0.9(TLB + MEM + MEM)
. 提到了一级分页,所以这里只是额外的 1 次内存访问,但实际的实现通常有两级分页,因此会有 2 次额外的内存访问。
- 需要从磁盘加载页面的 10%(在这 20% 中;表达式暗示了这一点,但问题并不清楚,而是建议总体而言是 10%)。这使得对 TLB 寄存器的(失败)访问和对页表的(失败)访问是加载页面所需的 10% 倍。要加载它,它必须为它腾出空间,所以它必须放下另一个页面。这分为两个选项:
- 50% 被丢弃的页面是干净的,所以系统只需要读取新的内容:
0.5(Disk)
.
- 50% 要丢弃的页面是脏的,因此系统需要将其写入磁盘
(MEM+Disk)
并读取新内容(Disk)
,给出0.5(2Disk + MEM)
我认为最后两个(交换)情况应该包括一些额外的内存访问,因为需要两次访问来标记前一页不可用和页表中的新页可用。
这也是非常不现实的,因为在实际系统中,当页面中需要一个阅读空间时,系统总是选择一个干净的页面来替换。为了确保它有干净的页面,有一个后台进程会检查脏页并将它们写出。它需要一些计算资源,因此它实际上应该计入内存访问,但要少得多,因为页面错误不需要等待写入完成。
表述实际上是错误的。它应该是
T = 0.8(TLB + MEM) + 0.2 ( (0.9(TLB + MEM + MEM)) + 0.1(TLB + MEM + 0.5(磁盘) + 0.5(2Disk + MEM) )
如果页面错误占 TLB 未命中的 10% 或
T = 0.8(TLB + MEM)+ 0.1(TLB + MEM + MEM)+ 0.1(TLB + MEM + 0.5(磁盘)+ 0.5(2磁盘+ MEM))
如果页面错误占所有访问的 10%。您对此并不明确,但如果公式不包含 0.2*0.9,我会假设后者,这表明前者。