大家早上好!我正在努力练习多层次记忆。有人能帮我解决这个问题吗?
考虑一个2级分页内存,大小为256MB,地址为字节,由1024页组成,例如:
(a)逻辑内存、逻辑地址和页面的尺寸是多少?(b)物理存储器、物理地址和帧的尺寸是多少?(c)考虑存储器访问时间等于100ns(具体存储器时间没有考虑由于分页造成的开销),访问TLB的时间等于10ns(带参数)α等于95%,页面故障时间必须是多少才能导致性能下降页面错误管理小于10%,命中率为98%?
(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
对于2级页表;逻辑地址必须分成3个部分:第一级页表的索引,第二级页表的索引和页内的偏移量。从页面大小我们可以确定:
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
. .但是因为我们不知道页表的大小或者页表条目的大小;我们没有足够的信息来确定页表的其他内容。
请注意,页表的大小通常与页面大小相同(通常为256 kb),在这种情况下,我们可以执行"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)。
没有任何信息可以告诉我们物理内存的其他维度。例如,如果我们假设物理地址的大小与页表的大小相同,我们就可以确定物理地址空间的大小;但是我们对页表条目的大小一无所知,所以我们甚至不能做出可能错误的假设。
我搞不懂这个问题。通常页面错误与TLB命中和TLB未命中无关,并在以下情况下发生:(c)考虑内存访问时间等于100ns(不考虑分页开销的特定内存时间),对TLB的访问时间等于10ns,参数α等于95%,为了使页面错误管理导致的性能下降小于10%,命中率为98%,页面错误时间必须是多少?
软件崩溃(例如,当您使用未初始化的指针试图访问不存在的内存时
SIGSEGV
信号)操作系统必须从二级存储(从交换空间,从文件)获取数据
操作系统必须复制数据(例如,一个页面被设置为"写时复制",可能是由于之前的
fork()
,并且该页被写入)