为啥页表大小不是通过与页大小相乘来确定的?

Posted

技术标签:

【中文标题】为啥页表大小不是通过与页大小相乘来确定的?【英文标题】:why page table size is not determined not by multiplying with number of pages with page size?为什么页表大小不是通过与页大小相乘来确定的? 【发布时间】:2020-04-18 03:32:44 【问题描述】:

页表大小由页数乘以页表条目大小确定,为什么不乘以页数乘以页大小

【问题讨论】:

【参考方案1】:

您可能对什么是页和什么是帧感到困惑(在主内存中进行内存划分)。希望举个例子有助于你理解。

假设您有一个大小为 1KB 的进程,而您的主内存大小为 1MB。要把你的进程放到主存中,需要把进程分页,这样进程中的每一页都会放在主存的一个框架中[所以页面大小==框架大小]

让你的页面大小=帧大小=32B=25B

那么进程的总页数为1KB/32B = (210B) / 25B

这是25

而主存的总帧数为1MB/32B = (220B) / 25B

这是215

现在我们需要将 25 个进程页面放在 215 个内存帧中。页表将在这里帮助我们。

页表将有 25 个条目(代表每个页面),每个条目将填充相应页面所在的帧号。

由于我们在主存中有 215 帧,我们需要 15 位来表示一个帧号。

所以总页面大小将是

25 * 15 = 480Bytes

附加说明

注意1在框架示例中,由于我们得到的页表大小大于页面大小,我们需要使用多级分页

注意 2在现实生活中,页表大小可能不是简单的 15 位。相反,将为每个页表条目提供一些附加信息。

【讨论】:

以上是关于为啥页表大小不是通过与页大小相乘来确定的?的主要内容,如果未能解决你的问题,请参考以下文章

如何查找或计算 Linux 进程的页表大小和其他内核记帐?

[转帖] 学习 Linux 大页的内存知识

使用位深度来确定 BMP 图像中颜色表的大小是不是有效?

MMU:AARCH64 中的长描述符页表大小

为啥哈希表扩展通常通过将大小加倍来完成?

linux内核在哪里定义了内存中页面或页框的大小?(请说一下具体路径)