在整个进程加载到内存中(而不是请求分页)的分页内存系统中,您有一个 35 条目的 TLB。假设任何一页内存访问的概率是相同的(与正常情况不同)。如果TLB搜索时间是5nsec,内存访问时间是50nsec,那么如果有效访问时间是70nsec,那么page中的进程有多大?
我如何计算进程的大小?
在整个进程加载到内存中(而不是请求分页)的分页内存系统中,您有一个 35 条目的 TLB。假设任何一页内存访问的概率是相同的(与正常情况不同)。如果TLB搜索时间是5nsec,内存访问时间是50nsec,那么如果有效访问时间是70nsec,那么page中的进程有多大?
我如何计算进程的大小?
本系统在进程中使用虚拟内存,为了访问内存,需要将虚拟地址转换为物理地址。此翻译使用“页表”的某些变体( https://en.wikipedia.org/wiki/Page_table )存储在相同的物理内存中。
在没有 TLB(大小为零条目的 TLB)的变体中,每次程序访问都需要从页表中读取转换条目,然后才能进行真正的访问。因此,有效(平均)内存访问时间将等于 2 * 主内存访问时间。
eff_time(TLB_size_0) = 2 * main_memory_access_time
TLB 是一种优化(有关真实世界 TLB 的更多详细信息,请查看http://ostep.org书籍),它缓存了几个最近使用的翻译(并且每个翻译条目描述了 1 页)。在理想情况下,程序使用的所有虚拟地址都会命中 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 不是,则重做搜索优化),然后访问应用程序所需的内存。