您好,欢迎访问三七文档
虚拟地址空间当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存以下优势:①程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。②程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为4KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。③不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程使用的物理内存。一.虚拟地址空间布局进程可用的虚拟地址范围称为该进程的“虚拟地址空间”。每个用户模式进程都有其各自的专用虚拟地址空间,但在内核模式下运行的所有代码都共享称为“系统空间”的单个虚拟地址空间。当前用户模式进程的虚拟地址空间称为“用户空间”。在32位Windows中,可用的虚拟地址空间共计为2^32字节(4GB)。通常较下的2GB用于用户空间,较上的2GB用于系统空间。图7.832位Windows的虚拟地址空间布局在64位Windows中,虚拟地址空间的理论大小为2^64字节(16百亿亿字节),但实际上仅使用16百亿亿字节范围的一小部分。范围从0x000'00000000至0x7FF'FFFFFFFF的8TB用于用户空间,范围从0xFFFF0800'00000000至0xFFFFFFFF'FFFFFFFF的248TB的部分用于系统空间。用户模式下运行的代码可以访问用户空间,但不能访问系统空间。此限制可防止用户模式代码读或更改受保护的操作系统数据结构。内核模式下运行的代码既可以访问用户空间,也可以访问系统空间。即,在内核模式下运行的代码可以访问系统空间和当前用户模式进程的虚拟地址空间。二、虚拟地址转换内存管理器将虚拟地址映射到物理地址时,首先通过页表查到该虚拟地址的页表入口到该地址对应的物理内存地址。图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的页内偏移得到了物理地址。图7.12页表入口的结构在用户空间中,所有物理内存页面都可以根据需要进行分页至磁盘文件。在系统空间中,某些物理页面可以分页,而其他页面不能。系统空间具有用于动态分配内存的两个区域:页面缓冲池和非页面缓冲池。在64位Windows中,页面缓冲池为128GB的虚拟地址,范围从0xFFFFA800'00000000至0xFFFFA81F'FFFFFFFF。非页面缓冲池为128GB的虚拟地址,范围从0xFFFFAC00'00000000至0xFFFFAC1F'FFFFFFFF。在页面缓存池中分配的内存可以根据需要分页至磁盘文件。在非页面缓冲池中分配的内存永远无法分页至磁盘文件。
本文标题:虚拟地址空间
链接地址:https://www.777doc.com/doc-7327852 .html