大家早上好!我在努力练习多层记忆。有人能帮我解决这个问题吗?
考虑一个大小为256 up的2级分页内存,寻址到字节,由1024页组成,让我们说:
(a)逻辑内存、逻辑地址和页的尺寸是多少?(b)物理记忆、物理地址和框架的尺寸是多少?(c)考虑内存访问时间等于100 is (特定内存时间而不考虑寻呼开销),参数α等于95%的TLB访问时间等于10 is,那么页面错误管理导致性能下降所需的页面故障时间必须小于10%,命中率为98%?
发布于 2022-06-26 17:19:36
(a)逻辑内存、逻辑地址和页面的维度是什么?
可能最合理的假设是,逻辑地址空间的大小为256 MB,每个逻辑地址空间有1024个逻辑页。这意味着:
page size = logical address space size / logical pages per logical address
page size = 256 MiB / 1024
page size = 256 KiB逻辑地址中的位数可以根据逻辑地址空间大小来确定:
logical address size = log2(logical address space size) bits
logical address size = log2(256 MiB) bits
logical address size = 28 bits对于两个层次的页表;一个逻辑地址必须分成三个部分:一个索引为第一级页表,一个索引为第二级页表,以及一个偏移量在页内。根据页面大小,我们可以确定:
offset into page = log2(page size) bits
offset into page = log2(256 KiB) bits
offset into page = 18 bits我们还知道,逻辑地址的大小必须等于它的三个部分的大小之和,或者:
logical address size = 1st page table index size + 2nd page table index size + offset into page
28 = 1st page table index size + 2nd page table index size + 18
10 = 1st page table index size + 2nd page table index size现在我们又开始惹麻烦了。在理论上(以及在某些CPU的实践中),第一级页表大小可能与第二级页表大小不同。
让我们再做一个假设。如果第一级页表与第二级页表的大小相同,并且这两个索引必须加到10位,那么假设这两个索引各为5位并不不合理。
如果页表索引为5位,则页表必须有2**5 = 32 (或1 << 5 = 32)项。
我们知道页面表的大小是:
page table size = entries per page table * size of page table entry..but,因为我们不知道页面表的大小或页面表条目的大小;我们没有足够的信息来确定有关页面表的任何其他信息。
注意,页面表的大小通常与页面大小相同(即256个KiB),在这种情况下,我们可以执行"size of page table entry = page table size / entries per page table = 256 KiB / 32 = 8192 bytes“操作。但是,通常,页表条目的大小与物理地址的大小相关(例如32位或4字节,或64位或8字节);而每个页表条目的8192字节是非常不可信的。这意味着一个或多个假设是错误的(例如,假设页表大小和页大小相等)。
(b)物理内存、物理地址和帧的维度是什么?
物理页面大小“极有可能”等于逻辑页大小(即256个KiB)。
没有任何信息可以告诉我们使用任何关于物理内存维度的信息。例如,如果我们可以假设物理地址的大小与页表的大小相同,我们就可以确定物理地址空间的大小;但是我们对页表条目的大小一无所知,所以我们甚至不能做出错误的假设。
(c)考虑内存访问时间等于100 is (不考虑分页开销的特定内存时间),当参数α等于95%时,对TLB的访问时间等于10 is,那么由于页面故障管理而导致性能下降的页面错误时间必须小于10%,命中率为98%?
我搞不懂这个问题。通常,页面错误与TLB命中和TLB未命中无关,并且在以下情况下发生:
SIGSEGV信号)fork(),并且该页被写入)https://stackoverflow.com/questions/72759739
复制相似问题