我在微处理器和微控制器Paradigm中经常听到“地址空间”一词。我了解地址用于引用物理内存(主内存)中的特定内存块。
如果我是对的,那么地址空间就是所有此类地址的超集。对?
通过使用虚拟内存/分页,我们正在使用辅助存储扩展地址空间。
在此范例中,页表,页表条目和页目录到底是什么?我了解到,第一个p.memory已按逻辑进行了分段,并且这些分段分为了几页。那么页表到底是什么?包含页面的表格?页面目录的超级表是什么页面目录?
最佳答案
在x86体系结构中,页面目录和页面表一起提供了虚拟地址(应用程序使用的内存地址)和物理地址(物理内存硬件中的实际位置)之间的映射。
页面只是一个连续的内存块。 x86(32位)支持3种页面大小:4MB,2MB和4KB,后者是主流操作系统中最常用的页面。页表是由1024 * 32位条目组成的数组(方便地装入单个4KB页)。每个条目都指向页面的物理地址。因为单个页表无法独自表示整个地址空间(1024个条目* 4KB =仅22位地址空间),所以我们需要第二级页表:页目录。页面目录还包含1024 * 32位条目(同样适合单个页面),每个条目都指向页面表。我们可以看到现在1024 * 1024 * 4KB = 32位,并且通过这种3级结构,我们可以映射整个4GB虚拟地址空间。
当要求CPU访问虚拟地址时,它使用10个最高顺序位(31:22)索引到页目录表(其基地址存储在特殊寄存器中)。接下来的10个最高位(21:12)用于索引页面目录条目指向的页面表。最低的12个顺序位(11:0)最终用于索引页表项所指向的页中的一个字节。
在其他系统中,可能需要更多或更少级别的页表,具体取决于虚拟地址空间的大小和支持的页大小。例如,具有4MB页面的x86仅需要一个页面目录。在具有4KB页面的64位模式下,使用4级系统:4级页面映射表包含指向许多页面目录之一的条目。