Jim*_*mmy 4 c windows x86 assembly kernel
我有兴趣更深入地了解虚拟内存和页面机制,特别是对于Windows x86系统.根据我从各种在线资源(包括在SO上发布的其他问题)收集的信息,
1)每个进程的各个页表位于同一进程的内核地址空间内.
2)每个进程只有一个页表,包含虚拟页面到物理页面(或帧)的映射.
3)存储器管理单元(MMU)基本上通过使用提供的虚拟地址的前20位作为页表的索引来计算对应于给定虚拟地址的物理地址,使用该索引来检索开始地址.物理帧然后根据虚拟地址的剩余12位向该地址应用一些偏移量.
这三个陈述是否正确?还是我误解了这些信息?
Abh*_*uch 10
所以,首先让我们澄清一些事情:
接下来是32位x86分页模型的大规模压缩版本,使用最简单的版本.还有许多额外的调整是可能的,我知道各种操作系统都在使用它们.我不会进入那些因为我并不熟悉大多数操作系统的内部结构,因为在你掌握了更简单的东西之前,你真的不应该深入研究它们.如果您想了解x86分页模型的所有奇妙怪癖,可以访问英特尔文档:英特尔系统编程指南
在最简单的分页模型中,存储空间被分成称为页面的4KB块.其中1024个连续的块被映射到页表(大小也是4KB).对于更进一步的间接,所有1024页表都映射到4KB页目录,该目录的基础位于%cr3处理器的特殊寄存器中.由于OS中的大多数存储空间都是稀疏的,这意味着大多数存储空间未被使用,因此这种两级结构已经到位.对于未触及的内存,您不希望保留一堆页表.
当你得到一个内存地址时,最重要的10位索引进入页面目录,它为你提供了页表的基础.接下来的10位索引到该页表中,为您提供物理页面的基础(也称为物理帧).最后,最后12位索引到帧中.假设您已设置%cr3为正确的值,MMU会为您完成所有这些操作.
64位系统具有4级寻呼系统,因为它们的存储空间更稀疏.此外,页面大小可能不是4KB.
要真正回答你的问题:
编辑:清理和微小的修改.
| 归档时间: |
|
| 查看次数: |
5071 次 |
| 最近记录: |