Windows内存管理概述

 了解Windows内核中的内存管理器如何有效地管理系统的物理内存以及每个进程中的虚拟内存。

  Windows采用了页式内存管理方案,在Intel x86处理器上,Windows不使用段来管理虚拟内存,但是在Intel x86处理器在访问内存时必须要通过段描述符,这意味着Windows将所有的段描述符都构造成了从基地址0开始,且段的大小设置为0x80000000、0xc0000000或者0xffffffff,具体取决于段的用途和系统设置。随意Windows系统中的代码,所面对的地址空间都是线性地址空间。这种做法相当于屏蔽了处理器中的逻辑地址概念,段只被用于访问控制和内存保护。

  Windows使用了两种特权级别:0和3,特权级0成为内核模式,特权级3称为用户模式。当处理器执行内核模式代码时,它们处于系统地址空间,位于0x80000000-0xffffffff,所有的进程都共享此空间(对应相同的物理空间);当处理器执行用户代码时,它们处于进程地址空间,位于0x00000000-0x7fffffff,这部分空间是进程私有的。

  Windows的每个地址空间中,虚拟地址的分配和回收都必须按照严格的规则进行。Windows规定,应用程序在使用内存以前必须申请,所以操作系统内部可以根据应用程序的申请和释放操作来维护好整个虚拟地址空间的内存分配情况。而且,Windows也采用了按需分配的策略,就是说,只有当一段虚拟地址内存真正被使用的时候,系统才会为它分配页表和物理页面。每个进程的虚拟地址空间的分配情况通过一组虚拟地址描述符(VAD,virtual address descriptor)记录下来,这些描述符构成了一棵平衡二叉树,以便于快速定位到一个制定虚拟地址的描述符上。

  在windows内存管理器中,除了虚拟地址空间的管理,另一重要职责是管理物理页面,以及实现进程页面的换入和换出过程。在windows中,页帧编号数据库(page frame number database, pfn数据库)描述了物理内存各个页面的状态。PFN数据库实际上是一个结构数组,每个页面对应有一个PFN项,记录了该页面使用情况,包括状态、对应页表项的地址等信息。此外,操作系统还维护了一组链表,分别将相同类型的页面连接起来,以便操作系统快速查找某种类型的物理页面。

  虽然Intel x86定义了虚拟地址与物理地址之间的转换方式,但是页目录和页表需要操作系统来维护,Windows定义了PDE(目录项 page directory entry)和PTE(页表项, page table entry),并且小心地维护好这些数据结构,以便处理器能够正确地转译虚拟地址。操作系统在创建每一个进程时,都需要为这个进程建立一套页目录和页表数据结构。,从而建立起该进程的地址空间。

  地址空间建立起来以后,windows 采用按需换页的策略,当进程或系统使用某个尚未得到物理页面的虚拟地址时,处理器会触发页面错误异常,所以操作系统可以在页面错误异常处理例程中为其分配页面,并设置好页表项和页面之间的逻辑关系。

  什么时候页面被替换出去?当系统认为内存紧缺,或者一个进程犹豫工作集的限制而不允许拥有更多的物理页面时,windows 会替换工作集中的页面。这项工作是由一个称为工作集管理器的组建来完成的,它运行在一个称为平衡集管理起的系统线程中。

  以下列出windows 内存管理中的一些比较重要的组件:

  1)执行体层提供了一组内存管理服务,用于分配、释放和管理虚拟地址。执行体也包括一个堆管理器,提供动态小内存块的管理。

  2)页面错误异常处理器。负责分配物理页面,或者把磁盘上的数据读入内存中。

  3)一组系统线程,负责维护操作系统的内存。

        平衡集管理器,它包括工作集管理器,每1s被调用一次,工作集管理器负责实施一些全局性的内存管理策略,比如工作集修剪。

        进程/栈交换器当系统需要执行换入或换出操作时,通知此线程完成这些任务。

        修改页面写出器。它负责将脏页面写回到映射文件或页面文件中。

        零页面线程。它运行的优先级为0,负责将空闲连表上的页面清零,以便当系统需要零页面时可以满足其要求。

 

  系统地址空间包含了全局的系统代码和数据结构,并且对于所有的进程都是可见的,操作系统在初始化过程中首先建立其系统地址空间。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值