Memory management 分页-什么是“分页”;“内部”;一页的页数?

Memory management 分页-什么是“分页”;“内部”;一页的页数?,memory-management,x86,operating-system,paging,virtual-memory,Memory Management,X86,Operating System,Paging,Virtual Memory,根据我对虚拟地址转换发生方式的理解(假设32位虚拟地址空间,如x86体系结构中的虚拟地址空间): 虚拟地址的位31:22表示要访问的正确页面目录条目(即页面表的对齐物理地址) 类似地,虚拟地址的位21:12表示要访问的正确页表条目(即页本身的对齐物理地址) 最后,位11:0表示页中的正确偏移量,并且仅附加到要访问的最终物理地址的末尾 至于实际地址 位31:12是页面的物理基址(对齐)(从PTE中找到) 位11:0与虚拟地址中的位相同 我知道页面是一块虚拟内存。但从概念上讲,我很难想象页

根据我对虚拟地址转换发生方式的理解(假设32位虚拟地址空间,如x86体系结构中的虚拟地址空间):

  • 虚拟地址的位31:22表示要访问的正确页面目录条目(即页面表的对齐物理地址)
  • 类似地,虚拟地址的位21:12表示要访问的正确页表条目(即页本身的对齐物理地址)
  • 最后,位11:0表示页中的正确偏移量,并且仅附加到要访问的最终物理地址的末尾
至于实际地址

  • 位31:12是页面的物理基址(对齐)(从PTE中找到)
  • 位11:0与虚拟地址中的位相同

我知道页面是一块虚拟内存。但从概念上讲,我很难想象页面的实际“内部”是什么。也就是说,如果我要索引到一个“页面条目”(如果这样的事情有意义的话),我会得到什么回报


似乎将此值称为“所需字节”。确切的“所需字节”是什么?我是否过度考虑了页面的功能?

您可以将每个页面视为一个4096字节的“数组”。(在具有4k页面的x86上)。它不是高级语言意义上的“数组”(除非您的程序中碰巧有一个与页面对齐的字节数组),但它是一个线性字节集合,您可以使用偏移量对其进行索引

从任何特定地址加载的一个字节在特定页面中都有一个偏移量,它决定了应该加载4096字节中的哪一个。地址的低12位决定该偏移量。(即“页偏移”)

请注意,2^12=4096,这就是为什么低12位表示地址中页内的偏移量


进一步阅读:

通过阅读您的问题,您的误解似乎是因为您不理解页表条目的格式

CPU的内存管理单元(MMU)将物理内存划分为一些固定大小的页帧(通常为512K到1MB)

操作系统管理内存页。页的大小必须与页框的大小相同。用户模式进程只查看页面;不是页面框架

操作系统维护一组页面表,这些表提供页面和页面框架之间的映射

在逻辑存储器系统中,地址中的位由两个位字段组成。一个位字段标识页面,另一个指定页面中的字节偏移量

当进程访问地址时,MMU将其划分为两位字段。然后,它使用页面标识符在页面表中查找页面映射到的页面框架

。也就是说,如果我要索引到一个“页面条目”(如果这样的事情有意义的话),我会得到什么回报

页面条目(或页面表中的条目)指定物理页面框架的编号

[这是听起来你缺少的部分。]

在您的示例中,您讨论了一个多级页面表,但为了简单起见,让我们假设没有页面目录,只有一个页面表

在32位系统中,页面条目在64位系统中通常为32位和64位。页面条目的格式因系统而异,但它可能具有定义以下内容的位字段:

  • 映射到的页面框架的索引
  • 指示条目是否有效的位
  • 位指示是否已写入相应的页面
  • 位指定页的保护
  • 在您的示例中,省略了页表条目的格式

    因此,一旦您有了条目,下一步就是从中获取页面框架。 在您的示例中,这是4096字节的数据

    MMU可以只使用页面框架索引来标识页面。或者它可以将该值乘以页面大小,得到启动页面的字节

    为了获取4096中的特定字节,MMU使用偏移量(示例中的位0:11)


    MMU在幕后执行所有这些操作,因此流程永远不会看到它。操作系统的主要任务之一是维护页面表及其条目。

    '这篇文章似乎将此值称为“所需字节”。->我在那篇文章的任何地方都找不到这个短语。这个术语是从哪里来的?你的“典型的512K到1MB”声明似乎有点不对劲。大多数虚拟内存系统使用4KB页/页帧。e、 g.x86。有些系统具有用于大型映射的“hugepages”,如x86-64的2MiB或1GiB hugepages。说“正常”页面大小在几乎所有东西上都是4KB,但AArch64允许页面表使用16kiB粒度而不是4k。显然,您所使用的系统范围有限。是的,我只使用过x86(以及一些大学的SPARC机器),并阅读了一些其他主流体系结构,尤其是ARM、MIPS和PowerPC。我不是说没有512k或1M页面是最小选项的系统,我是说这不是“典型的”。你需要足够的例子来超越Linux上运行的大多数体系结构……这里我和Peter在一起。几乎不管你怎么衡量,绝大多数主流架构(对于“主流”的广泛定义)的最小/默认页面大小都小于512K,通常要小得多。如果你不知道,你应该提供一些反例。你没有见过VAX吗?虽然有点旧,但到处都有使用512字节页面控制关键功能的程序。