【问题标题】:How To Calculate Process Size from TLB size and mean memory access time如何根据 TLB 大小和平均内存访问时间计算进程大小
【发布时间】:2017-08-06 23:39:24
【问题描述】:

在整个进程加载到内存中的分页内存系统中(不是请求分页),您有一个 35 条目的 TLB。假设任何一页内存访问的概率是相同的(与正常情况不同)。如果TLB搜索时间是5nsec,内存访问时间是50nsec,如果有效访问时间是70nsec,那么page中的进程有多大?

如何计算进程的大小??

【问题讨论】:

  • “有效访问时间”是如何定义的?什么是TLB(这里使用ostep.org book),为什么需要它?使用什么样的MMU和page walk(是一级、二级还是多级page table)?
  • @osgx 我假设是一级。这是一个家庭作业问题,这就是我提供的全部内容。
  • 不,你没有。在这个作业之前还有半学期的 CS 课程。您是如何定义“有效访问时间”的?您是否了解 TLB 是什么?
  • @osgx 我不知道“有效”访问时间是什么意思,而不是前面提到的访问时间。而且我知道 TLB 是什么以及它的作用(实际上将页面映射到地址并减少从所述地址位置访问信息的时间)
  • 添加了一些想法作为答案;这里没有完整的解决方案。还要检查stackoverflow.com/a/14193216stackoverflow.com/questions/18550370/… 以了解有效访问时间的可能定义。

标签: memory tlb page-tables


【解决方案1】:

本系统在进程中使用虚拟内存,为了访问内存,需要将虚拟地址转换为物理地址。此翻译使用“页表”的某种变体 (https://en.wikipedia.org/wiki/Page_table) 存储在同一物理内存中。

在没有 TLB(大小为零的 TLB 条目)的变体中,每次程序访问都需要从页表中读取转换条目,然后才能进行真正的访问。因此,有效(平均)内存访问时间将等于 2 * 主内存访问时间。

eff_time(TLB_size_0) = 2 * main_memory_access_time

TLB 是一种优化(查看http://ostep.org book 了解更多details of real world TLB),它缓存了几个最近使用的翻译(并且每个翻译条目描述一页)。在理想情况下,程序使用的所有虚拟地址都会命中 TLB,并且只有 TLB 的延迟会增加内存访问时间。对于 35 个条目的 TLB,这对于访问不超过 35 个页面的程序(或时间段)来说是正确的。

但是当程序进行统一的内存访问并使用比 TLB 存储更多的页面(页数中的大小更大)时,一些访问将需要执行“页表遍历”(在 1 级页表的情况下 - 1额外的内存访问)来重新填充一些 TLB 条目。如果 1/5 的程序内存访问未命中 TLB(而 4/5 没有),则平均有效访问时间将如下所示

eff_time (TLB_miss_rate_of_1_over_5) = (1-1/5) * full_access_time_with_TLB_hit + 1/5 * full_access_time_with_TLB_miss

其中 full_access_time_with_TLB_hit 是在 TLB 中进行成功搜索并进行 1 次主存访问的时间,而 full_access_time_with_TLB_miss 是进行不成功的 TLB 搜索、访问页表(通过读取主存)的时间,(可能重新填充 TLB 和重做搜索,如果你MMU 未优化),然后访问应用程序所需的内存。

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 2017-03-14
    • 2020-03-01
    • 1970-01-01
    • 2014-01-28
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多