虚拟地址空间映射到物理地址空间

上传人:无*** 文档编号:185851774 上传时间:2023-02-06 格式:PDF 页数:3 大小:72.66KB
返回 下载 相关 举报
虚拟地址空间映射到物理地址空间_第1页
第1页 / 共3页
虚拟地址空间映射到物理地址空间_第2页
第2页 / 共3页
虚拟地址空间映射到物理地址空间_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述
虚拟地址空间映射到物理地址空间参考如下当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理 器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势:程序可以使用一系列相邻的虚拟地址來访问物理内存中不相邻的大内存缓冲区。程序可以使用一系列虚拟地址來访问大于可用物理内存的内存缓冲区。当物理内存的 供应量变小时,内存管理器会将物理内存页通常大小为4 KB保存到磁盘文件。数据或代 码页会根据需要在物理内存与磁盘之间移动。不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操 作系统使用的物理内存。进程可用的虚拟地址范围称为该进程的“虚拟地址空间”。每个用户模式进程都有其 各自的专用虚拟地址空间。对于32位进程,虚拟地址空间通常为2 GB,范围从0 x00000000至0 x7FFFFFFFo对于64位进程,虚拟地址空间为8 TB,范围从0 x000 00000000至0 x7FFFFFFFFFF。一系列虚拟地址有时称为一系列虚拟内存”。此图说明了虚拟地址空间的一些重要功能。该图显示了两个64位进程的虚拟地址空间:Notepad,exe和MyApp.exe。每个进程 都有其各口的虚拟地址空间,范围从0 x0000000000至0 x7FFFFFFFFFF。每个阴影框都 表示虚拟内存或物理内存的一个页面大小为4 KB。注意,Notepad进程使用从0 x7F7*93950000开始的虚拟地址的三个相邻页面。但虚拟地址的这三个相邻页面会映射到物理内存 中的非相邻页面。而J1还注意,两个进程都使用从0 x7F793950000开始的虚拟内存页面,但这些虚拟页面都映射到物理内存的不同页面。用户空间和系统空间诸如Notepad,exe和MyApp.exe的进程在用户模式下运行。核心操作系统组件和多 个驱动程序在更有特权的内核模式下运行。有关处理器模式的详细信息,请参阅用户模式 和内核模式。每个用户模式进程都有其各口的专用虚拟地址空间,但在内核模式下运行的 所有代码都共享称为“系统空间”的单个虚拟地址空间。当前用户模式进程的虚拟地址空 间称为“用户空间”在32位Windows中,可用的虚拟地址空间共计为232字节4 GB。通常较下的2 GB用丁用户空间,较上的2 GB用丁-系统空间。在32位Windows中,你可以指定在启动时超过2 GB用于用户空间。结果是系统 空间可用的虚拟地址更少。可以将用户空间的大小増至3 GB,在这种情形下系统空间仅 有1 GBo若要增大用户空间的大小,请使用BCDEdit/set increaseuservao在64位Windows中,虚拟地址空间的理论大小为264字节16白亿亿字节,但实 际上仅使用16白亿亿字节范围的一小部分。范围从0 x00000000000至0 x7FFFFFFFFFF的8 TB用于用户空间,范围从0 xFFFF0800,00000000至OxFFFFFFFF,FFFFFFFF的248TB的部分用丁系统空间。用户模式下运行的代码可以访问用户空间,但不能访问系统空间。此限制可防止用户 模式代码读或更改受保护的操作系统数据结构。内核模式下运行的代码既可以访问用户空 间,也可以访问系统空间。即,在内核模式下运行的代码可以访问系统空间和当前用户模 式进程的虚拟地址空间。在内核模式下运行的驱动程序必须在直接从用户空间地址中读取或写入这些地址时非 常小心。此方案说明了原因。用户模式程序发起从设备读取某些数据的请求。程序提供缓冲区的起始地址以接收数 据。在内核模式下运行的设备驱动程序例程启动读取操作并将控制权返回到其调用程序。然后,设备中断了当前运行的任何线程以显示读取操作完成。中断由在此任意线程 上运行的内核模式驱动程序例程进行处理,该例程属于任意进程。此时,驱动程序不得将数据写入用户模式程序在步骤1中提供的开始地址。此地址 位丁发起请求的进程的虚拟地址空间,该进程可能很大程度上不同于当前进程。虚拟地址Virtual Address SpaceWin32通过一个两层的表结构來实现地址映射,因为每个进程都拥有私有的4G的虚拟 内存空间,相应的,每个进程都有自己的层次表结构來实现其地址映射。第一层称为页目录,实际就是一个内存页,Win32的内存页有4KB大小,这个内存页 以4个字节分为1024项,每一项称为“页目录项”PDE;第二层称为页表,这一层共有1024个页表,页表结构与页目录相似,每个页表也都 是一个内存页,这个内存页以4KB的大小彼分为1024项,页表的每一项彼称为页表项PTE,易知共有1024X1024个页表项。每一个页表项对应一个物理内存中的某一个“内存页”,即共有1024X1024个物理内存页,每个物理内存页为4KB,这样就可以索引到4G大小的 虚拟物理内存。如下图所示注下图中的页目录项的大小应该是4个字节,而不是4kB:Win32提供了4GB大小的虚拟地址空间。因此每个虚拟地址都是一个32位的整数值,也就是我们平时所说的指针,即指针的大小为4B。它由三部分组成,如下图:这三个部分的第一部分,即前10位为页目录下标,用來寻址页目录项,页目录项刚 好1024个。找到页目录项后,找对页目录项对应的的页表。第二部分则是用來在页表内 寻址,用來找到页表项,共有1024个页表项,通过页表项找到物理内存页。第三部分用 來在物理内存页中找到对应的字节,一个页的大小是4KB,12位刚好可以满足寻址要求。具体的例子:假设一个线程正在访问一个指针Win32的指针指的就是虚拟地址指向的数据,此指针指为0 x2A8E317F,下图表示了这一个过程:0 x2A8E317F的二进制写法为0010101010_0011100011_000101111111,为了方便我们 把它分为三个部分。首先按照0010101010寻址,找到页目录项。因为一个页目录项为4KB,那么先将0010101010左移两位,0010101010000 x2A8,用此下标找到页目录项,然后根据此页目录项定位到下一层的某个页表。然后按照0011100011寻址,在上一步找到页表中寻找页表项。寻址方法与上述方法 类似。找到页表项后,就可以找到对应的物理内存页。最后按照000101111111寻址,寻找页内偏移。上面的假设的是此数据已在物理内存中,其实判断访问的数据是否在内存中也是在地 址映射过程中完成的.Win32系统总是假设数据已在物理内存中,并进行地址映射。页表 项中有一位标志位,用来标识包含此数据的页是否在物理内存中,如果在的话,就直接做地址映射,否则,抛出缺页中断,此时页表项也可标识包含此数据的页是否在调页文件中外存,如果不在则访问违例,程序将会退出,如果在,页表项会查出此数据页在哪个调页 文件中,然后将此数据页调入物理内存,再继续进行地址映射。为了实现每个进程拥有私 有4G的虚拟地址空间,也就是说每个进程都拥有口己的页目录和页表结构,对不同进程 而言,即使是相同的指针虚拟地址被不同的进程映射到的物理地址也是不同的,这也意味 着在进程之间传递指针是没有意义的。感谢您的阅读,祝您生活愉快。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!