根据我对虚拟地址转换的理解(假设32位虚拟地址空间,如x86架构):
至于物理地址
Visually, this is what happens
我知道Page是一块虚拟内存。但从概念上讲,我很难想象实际上是什么"内部"一页。即,如果我要编入一个" Page entry" (如果这样的事情甚至有意义),我会得到什么呢?
This post 似乎将此值称为"所需的字节。"究竟是什么"所需的字节"?我是否过度思考Pages的功能?
答案 0 :(得分:1)
通过阅读您的问题,听起来您的误解是因为您不了解页表条目的格式。
CPU的内存管理单元(MMU)将物理内存划分为某些固定大小的PAGE FRAMES(通常为512K到1MB)。
操作系统管理内存的PAGES。页面必须与页面框架具有相同的大小。用户模式进程只查看页面;不是页面框架。
操作系统维护一组PAGE TABLES,它们提供页面和页面框架之间的映射。
在逻辑存储器系统中,地址中的位由两个位字段组成。一位字段标识页面,另一位指定页面中的字节偏移量。
当进程访问地址时,MMU将其分为两位字段。然后,它使用页面标识符来查找页面在页表中映射到的页面框架。
。即,如果我要索引到“页面条目”(如果这样的事情甚至有意义),我会得到什么回报?
页面条目(或页面表中的条目)指定物理页面框架的编号。
[这听起来像是你失踪的部分。]
在您的示例中,您将讨论多级页表,但为简单起见,我们假设没有页目录,只有页表。
在32位系统中,64位系统上的页面条目通常为32位和64位。页面条目的格式因系统而异,但可能会有位字段定义:
在您的示例中,您省略了页表条目的格式。
因此,一旦您有了条目,下一步就是从中获取页面框架。 在您的示例中,这是4096字节的数据。
MMU可以只使用页面框架索引来标识页面。或者它可以将该值乘以页面大小以获得启动页面的字节。
要获取4096中的特定字节,MMU使用偏移量(在您的示例中位0:11)
MMU在幕后完成所有这些,所以这个过程永远不会看到它。操作系统的主要工作之一是维护页表及其中的条目。
答案 1 :(得分:0)
您可以将每个页面视为4096字节"数组"。 (在x86上有4k页)。它不是"数组"在高级语言的意义上(除非你的程序中碰巧有一个页面对齐的字节数组),但它是一个线性的字节集合,你可以使用偏移量进行索引。
来自任何特定地址的单字节加载在特定页面内具有偏移量,该偏移量确定应加载哪4096个字节中的哪一个。地址的低12位确定该偏移。 (即" 页面偏移")。
请注意,2 ^ 12 = 4096,这就是为什么它代表地址中页面内偏移量的低12位。