虚拟地址空间
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图7.8 32位Windows的虚拟地址空间布局
在 64 位 Windows 中,虚拟地址空间的理论大小为 2^64 字节(16 百亿亿字节),但实际上仅使用 16 百亿亿字 节范围的一小部分。范围从 0x000'00000000 至 0x7FF'FFFFFFFF 的 8 TB 用于用户空间,范围从 0xFFFF0800'00000000 至 0xFFFFFFFF'FFFFFFFF 的 248 TB 的部分用于系统空间。 用户模式下运行的代码可以访问用户空间,但不能访问 系统空间。此限制可防止用户模式代码读或更改受保护 的操作系统数据结构。内核模式下运行的代码既可以访 问用户空间,也可以访问系统空间。即,在内核模式下 运行的代码可以访问系统空间和当前用户模式进程的虚 拟地址空间。
在页面缓存池中分配的内存可以根据需要分页至磁盘文件。在非页 面缓冲池中分配的内存永远无法分页至磁盘文件。
②
③
一.虚拟地址空间布局
进程可用的虚拟地址范围称为该进程的“虚拟地址空间”。每个用 户模式进程都有其各自的专用虚拟地址空间,但在内核模式下运行 的所有代码都共享称为“系统空间”的单个虚拟地址空间。当前用 户模式进程的虚拟地址空间称为“用户空间”。
在 32 位 Windows 中,可用的虚拟地址空间共计为 2^32 字节(4 GB)。通常较下的 2 GB 用于用户空间,较上的 2 GB 用于系统空 间。
二、虚拟地址转换
内存管理器将虚拟地址映射到物理地址时,首先通过页表查到该虚 拟地址的页表入口到该地址对应的物理内存地址。
图7.9虚拟地址转换
图7.10虚拟地址的页索引结构
图7.11虚拟地址转换过程
一个页目录有1024项,虚拟地址最高的10bit刚好可以索引1024项 (2的10次方等于1024)。一个页表也有1024项,虚拟地址中间部 分的10bit,刚好索引1024项。虚拟地址最低的12bit(2的12次方等 于4096),作为页内偏移,刚好可以索引4KB,也就是一个物理页 中的每个字节。
一个虚拟地址转换成物理地址的计算过程就是,处理器通过CR3找 到当前页目录所在物理页,取虚拟地址的高10bit,然后把这10bit左 移2bit(因为每个页目录项4个字节长,左移2bit相当于乘4)得到 在该页中的地址,取出该地址处PDE(4个字节),就找到了该虚 拟地址对应页表所在物理页,取虚拟地址第12位到第21位这10位, 然后把这10bit左移2bit(因为每个页表项4个字节长,左移2bit相当 于乘4)得到在该页中的地址,取出该地址处的PTE(4个字节), 就找到了该虚拟地址对应物理页的地址,最后加上12bit的页内偏移 得到了物理地址。
虚拟地址空间
当处理器读或写入内存位置时,它会使用虚拟地址。作为读 或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟 地址访问内存以下优势:
①
程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻 的大内存缓冲区。 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存 缓冲区。当物理内存的供应量变小时,内存管理器会将物理内 存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根 据需要在物理内存与磁盘之间移动。 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更 改正在由另一进程使用的物理内存。
Βιβλιοθήκη Baidu
图7.12页表入口的结构
在用户空间中,所有物理内存页面都可以根据需要进行分页至磁盘 文件。在系统空间中,某些物理页面可以分页,而其他页面不能。 系统空间具有用于动态分配内存的两个区域:页面缓冲池和非页面 缓冲池。在 64 位 Windows 中,页面缓冲池为 128 GB 的虚拟地址, 范围从 0xFFFFA800'00000000 至 0xFFFFA81F'FFFFFFFF。非页面 缓冲池为 128 GB 的虚拟地址,范围从 0xFFFFAC00'00000000 至 0xFFFFAC1F'FFFFFFFF。