Windows虚拟地址空间

虚拟地址空间

一.虚拟地址空间布局

1.     Windows通过虚拟地址空间提供了一个内存的逻辑视图,在虚拟地址空间连续的内存再物理分布上并不一定连续

2.     应用程序通过内存管理器将虚拟地址映射到实际的物理内存地址

3.     32位Windows操作系统的虚拟地址空间大小为4GB

4.     操作系统将地段的一半虚拟地址空间(0X00000000 到0X7FFF FFFF)分配作为进程的私有地址空间,而将高端的一半虚拟地址空间(0X80000000到0XFFFF FFFF)分配给操作系统内核作为系统地址空间

5.     32位的Windows的虚拟地址空间可以分为几个主要的部分。

(1)         从0X00000000到0X7FFF FFFF的2GB的低端地址空间为进程的私有空间,用来存储进程的应用代码,全局变量和线程堆等数据

(2)         高端一半的虚拟地址空间(0X80000000到0XFFFF FFFF)为系统地址空间

(3)         在系统空间地址的低段部分(0X80000000到0XBFFF FFFF)驻留了系统内核以及执行体,硬件抽象层,引导驱动等系统服务

(4)         在系统地址空间的中断(0XC0000000到0XC07F FFFF)驻留了描述进程内存使用情况的页表和工作集

(5)         在系统地址空间的高端(0XC0800000到0XFFF FFFF)用于系统高速缓存,系统内存池等系统资源

二.虚拟地址转换

1.     系统服务和应用程序是通过虚拟地址来操作内存的,访问之前需要将虚拟地址映射到实际的物理内存地址,内存管理器利用页表进行地址转换

2.     为了将虚拟地址转换成以页为单位的结构,Windows将一个32位的虚拟地址解释为3个独立的部分:页目录索引,页表索引和字节索引。

3.     页目录索引引用10个地址位表示,用于定位虚拟地址所对应的页表

4.     页表索引引用10个地址位表示,用于定位该虚拟地址对应的页表入口

5.     字节索引引用12个地址位表示,用于确定该地址在对应的物理页上的具体位置

6.     虚拟地址通过页目录和页表进行地址转换过程

(1)         每一个进程都对应一个页目录,当操作系统开始执行某一个进程时,系统会设置当前进程所对应的页目录

(2)         一个进程可以有多个页表,通过页目录索引,内存管理器可以定位相应的虚拟地址所对应的页表

(3)         通过页表和页表索引,内存管理器可以定位虚拟地址对应的物理页框号

(4)         当定位了物理页框号后没通过字节索引可以正确的判断虚拟地址对应的物理地址

7.     每一个进程都有的单一页目录,它将该进程所有的页表都映射到一个页上,32位Windows它有固定的虚拟地址:0XC030 0000

8.     页表由一组页表入口构成,32位Windows的页表索引用10个地址位表示,因此一个页表可以索引1024页表入口

9.     对32为的Windows来说,需要1024个页表来映射4GB的虚拟地址空间

10.  一个页表入口不仅包含了虚拟地址所对应的物理页框号,而且包含了表示该内存页状态的标识

11.  如表2 页表中的状态以及含义

状态位

含义

Accessed

该页是否已被读过

Cached Disabled

该页是否不能被缓存

Dirty

该页是否已被写过

Global

该转换是否适用于所有进程

Large Page

该页是否为大页(4MB)

Owner

该页是否可以在用户态下访问

Valid

该页是否驻留在物理内存中

Write Through

是否跳过些缓存将该页实时写入磁盘

Write

该页是否可写

表2页表中的状态位以及含义

 

你可能感兴趣的:(windows,操作系统)