Windows采用了页式内存管理方案,在Intel x86处理器上,Windows不使用段来管理虚拟内存,但是,Intel x86处理器在访问内存时必须要通过段描述符,这意味着Windows将所有的段描述符都构造成了从基地址0开始,且段的大小设置为0x80000000、0xc0000000或0xffffffff,具体取决于段的用途和系统设置。所以,Windows系统中的代码,包括操作系统本身的代码和应用程序代码,所面对的地址空间都是线性地址空间。这种做法相当于屏蔽了处理器中的逻辑地址概念,段只被用于访问控制和内存保护。
Windows使用了两种特权级别:0和3,其中特权级0称为内核模式,特权级3称为用户模式。当处理器执行内核模式代码时,它们处于系统地址空间,位于0x80000000~0xffffffff,所有进程共享此地址;当处理器执行用户模式代码时,它们处于进程地址空间,位于0x00000000~0x7fffffff,这部分空间是进程私有的。用户模式代码只能访问进程自身的数据,而内核模式代码不仅可以访问当前进程的数据,也可以访问系统地址空间中的数据。所有的进程,一旦进入到内核模式,则共享同样的系统地址空间。
其次,在Windows的每个地址空间中,虚拟地址空间的分配和回收都必须按照严格的规则进行。Windows规定,应用程序在使用内存以前必须先申请,所以,操作系统内部可以根据引用程序的申请和释放操作来维护好整个虚拟地址空间的内存分配情况。而且,Windows也采用了按需分配的策略。也就是说,只有当一段虚拟内存正真被使用的时候,系统才会为它分配页面和物理页面。每个