Windows内存管理机制_第1页
Windows内存管理机制_第2页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows2000/XP内存管理机制冯秋 2004-9-27TOC\o"1-1"\h\z\u概述 1地址空间的布局 1地址转换机制 2用户空间内存分配方式 4系统内存分配 5缺页处理 5工作集 6物理内存管理 7其他内存相关机制 8概述Windows2000/XP内存管理器位于Ntoskrnl.exe文件中,硬件抽象层中没有内存管理器的任何部分.内存管理器是彻底可重入的,支持多进程并发执行。内存管理器组成部分:一组执行体系统服务程序:用于虚拟内存的分配、回收和管理。一个转换无效和访问错误陷阱处理程序:用于解决硬件检测到的内存管理异样,并代表进程将虚拟页面装入内存.运行在六个不同的核心态系统线程上下文中的几个关键组件:16(一个内核创建的系统线程)调用一次。-—进程/23,完成进程和内核线程堆栈的换入和换出操作。17,将修改链表上的脏页写回到适当的页文件.——映射页面写入器:17,将映射文件中脏页写回磁盘。18,负责系统高速缓存和页面文件的扩大和缩小。0,将空闲链表中的页面清零。地址空间的布局Win32环境下,324GB的虚拟内存。默认情况下,将一半(2GB)分配给用户进程,另一半(2GB)分配给操作系统。Windows2000/XPAdvancedServer版本和Windows2000/XPDataCenter版本支持一个引导选项Boot.ini/3GB标识激活,允许用户拥有3GB地址空间,留1GB给操作系统。对待要访问整个3GB地址空间的进程,进程映像文件必需在映像头设置IMAGE—FILE-LARGE—ADDRESS—AWARE3个GB经过指定链接标识/LARGEADDRESSAWARE相链接,3GB用户方式地址空间。2GBWindows2000/XP用户地址空间分布—-NULL指针分配的分区:0x0~0xFFFF——进程私有地址空间:0x10000~0x7FFEFFFF—-64KB拒绝访问区域:0x7FFF0000~0x7FFFFFFF,阻止线程跨过用户/系统边界传送缓冲区。Windows2000/XP用户地址空间系统变量—-MmHighestUserAddres(对待x862GB用户空间为0x7FFEFFF)——MmUserProbeAddress:描述最高用户地址+1性能计数器:Windows2000/XP中可利用性能计数器得到系统虚拟内存的使用信息,和单个进程地址空间的使用情况.x86系统地址空间分布——0x80000000~0x9FFFFFFF:引导系统(Ntoskrnl.exe和Hal.dll)和非分页缓冲池初始部分的系统代码。——0xA0000000~0xA3FFFFFF:系统映射视图(Win32k。sys)或者会话空间。——0xA4000000~0xBFFFFFFF:附加系统页表项(PTE)或附加系统高速缓存.—-0xC0000000~0xC03FFFFF:进程页表和页名目,描述虚拟地址映射的结构.--0xC0400000~0xC07FFFFF:超空间和进程工作集列表。——0xC0800000~0xC0BFFFFF:未使用区域,不行访问.—-0xC0C00000~0xC0FFFFFF:系统工作集链表,描述系统工作集的工作集链表数据结构。—-0xC1000000~0xE0FFFFFF:系统高速缓存,用来映射在系统高速缓存中打开的文件的虚拟空间.——0xE1000000~0xEAFFFFFF:分页缓冲池,可分页系统内存堆.——0xEB000000~0xFFBDFFFF:系统页表项和非分页缓冲池。--0xFFBE0000~0xFFFFFFFF:系统性故障转储信息和硬件抽象层(HAL)使用区域。会话空间:用来映射一个用户的会话信息。——进程创建时,会将会话空间映射到属于该进程会话的页面。-—会话是由进程和其他系统对象组成,每个会话有私有的GUI数据结构,以及Win32子系统进程(Csrss。exe)和登录进程(Winlogon。exe)的拷贝。——会话管理器进程(Smss。exe)负责创建新的会话。地址转换机制用户应用程序以32位虚拟地址方式编址,每个虚拟地址与一个称作“页表项的结构有关,它包含了虚拟地址映射的物理地址。虚拟地址变换x86系统利用二级页表结构实现虚拟地址向物理地址的变换。x8632(10bi(10bi字节索引(12bit)。虚拟地址变换的根本步骤:——内存管理的硬件设备定位当前进程的页名目;——页名目索引指出页名目项在页名目中的位置虚拟地址所需页表的位置;——页表索引指出页表项在页表中的位置置;--当页表项指向的页面有效时,字节索引指明物理页内所需数据的地址;若所指页面无效,则交由内存管理器的故障处理程序处理.页名目,其物理地址被保存在核心进程(KPROCESS)块中。进程切换时,操作系统设置一个专用的CPU寄存器来通知硬件设备新进程页名目所在地址.页名目是由页名目项(PDE)组成,每个页名目项4字节。x864GB虚拟1024张页表,10位。进程页表与系统页表进程页表是每个进程私有的,而系统页表被所有进程共享.当进程创建时,系统空间的页名目项初始化为指向现存的系统页表,但各个进程的系统空间不彻底相同。当系统页表更新时,内存管理器不会立刻更新所有进程页名目,而是当进程访问新的虚拟地址时才更新进程页名目.性能监视器中的空闲系统页表项计数器表示了可用系统页表项的数目,也可在HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\SystemPages中设置需要的页表项数量。页表项有效的页表项有两个主要的域:(1)包含数据的物理页面的页框号,或内存中某页面的物理地址的页框号;(2)一些描述页的状态和保护限制的标志位。—-访问位:某页首次被读写时,置为“1”--修改位:某页首次被写时,置为“1”—-0时,1时,对应页可读写——多处理器的x86经被一个运行在多个处理器上的线程写入。x86中(非PAE系统,映射4GB地址空间需要1024张页表,每个页表含1024410bit。快表TLBx86提供了关联存储器数组形式的高速缓存,称为快表。它是一个向量,其存储单元能被同时读取并与目标值比较。对应页的保护类型和状态。将常用的虚拟地址记录在快表项中,削减了对内存的访问,加快了虚拟地址到物理地址的变换。.当一个页表项由无效变为有效时,内存管理器会调用内核例程将新页表项装入快表,x86中,装入快表不需要软件干预。用户空间内存分配方式首先介绍两个与内存分配相关的数据结构(虚拟地址描述符和区域对象种管理应用程序内存的方式。虚拟地址描述符(VAD),用来描述进程地址空间状态。当进程保留地址空间,VAD来保存分配请求所,需找到一个包含被访问地址的VAD,利用所得信息填充页表项。区域对象区域对象在Win32中也称文件映射对象,表示能够被两个或多个进程共享的内存块,也可被映射到页文件或外存文件。主要作用--将可执行映像装入内存-—访问高速缓存文件中的数据——将文件映射到进程地址空间,不必进行文件I/O32位指针组成:指向数据控制区域的指针、指向共享的高速缓存映射的指针、指向映像控制区域的指针。CreatFileMapping函数能够创建区域对象;OpenFileMapping打开出名字的区域;可经过句柄继承或句柄复制访问区域对象;设备驱动程序可使用ZwOpenSection,ZwMapViewOfSection,ZwUnmapOfSection函数操纵区域对象。以页为单位的虚拟内存分配方式适宜于大型对象或结构数组Win32VirtualAlloc和VirtualAllocEx函数实现的.应用程序能够同时进行保留和提交,也能够先保留地址空间,当需要时再向地址空间提交物理页面,这样能够削减内存的使用。VirtualFree或VirtualFreeEx函数用来回收页面或释放地址空间.回收的内存仍然被保留,而释放的内存是空闲的。内存映射文件适宜于大型数据流文件以及多个进程之间的数据共享内存映射文件用来保留一个地址区域,并将磁盘文件提交给该区域,用于3个目的-—加载和执行。exe和.dll文件,可节省应用程序启动所需时间——访问磁盘数据文件,削减文件I/O——实现多个进程间的数据共享利用区域对象实现这些功能,由于区域对象能够链接到打开的磁盘文件(映射文件),或已提交的内存(提供共享内存).进程要访问格外大的区域对象MapViewOfFile函数映射区域对象的一部分(区域视图),并指定映射范围。堆功能内存堆的应用程序内存管理方式适宜于大量的小型内存申请堆管理器用来分配和回收可变内存,其函数位于Ntdll.dll和Ntoskrnl。exe中。进程启动时有一个缺省堆,通常为 1MB,它在进程生命周期中不能被释放;而HeapCreat函数创建的私有堆能够用HeapDestroy来释放.从缺省堆中分配内存时,先调用GetProcessHeap函数得到句柄,再调用HeapAllocHeapFree来分配和回收内存块.系统内存分配系统初始化时,创建了两种动态大小的内存缓冲池来分配系统内存,ExAllocatePool函数可从缓冲池中分配和回收内存:—-非分页缓冲池:由长驻物理内存的系统虚拟地址区域组成.—-分页缓冲池:系统空间中能够被分页和换出的虚拟内存区域。;4页缓冲池在非分页缓冲池已漫且不允许分配失败时使用。35个/HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement的NonpagedPoolSize和PagedPoolSize值转变缓冲池大小.快速内存分配机制—-后备链表:仅包含固定长度的块,因此不必查找适宜分配大小的空闲内存。ExInitializeNpagedLookasideList和ExInitializePagedLookasideList函数依据频繁分配的数据结构大小创建后备链表.缺页处理对无效页面的一次访问称为缺页错误,由内存管理故障处理程序解决.四个根本类型的无效页表项页文件:所需页没有驻留在内存,而是驻留在页文件中,并引发页面调入操作.请求零页:所需页是零页面,此时会给进程工作集添加一个由零初始化的页。转换:所需页面在内存中的后备链表、修改链表或修改尚未写入链表。此时从链表中删除此页,并添加到工作集。未知:页表项为0,或页表不存在。此时需检查VAD以确定虚拟地址是否被提交。一个特例——原型页表项区域对象第一次被创建时,同时创建原型页表项,它用于实现页面共享。当共享页面为有效时,进程页表项和原型页表项都指向包含数据的物理页。当共享页面无效时,进程页表项指向原型页表项,而原型页表项描述被访问的页面的状态(活动/有效、转换、修改尚未写入、请求零页、页文件、映射文件6种)页面调入I/O(页或映射文件)I/O。页面调入I/O操作是同步的,线程会一直等待I/O完成.当进行调页I/O,I/O结束时页面调度程序必需识别如下情况:冲突页错误、页面从虚拟地址空间中被删除、页面保护限制发生变化、原型页表项引发错误。冲突页错误页错误。页面调度程序检测到冲突页错误时,会对页框号数据库项中的特定事件发出等待操I/O页文件虚拟存储器在磁盘上的部分称为页文件.内存=物理内存+页文件。性能计数器能够检查被提交的进程私有内存使用情况私有内存中有多少常驻内存,多少在页文件中.Windows2000/XP16个页文件。系统启动时,会话管理器进程读取页文件链表,并检查HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\PagingFiles20MB页文件。系统运行期间不能删除打开的页文件。系统进程为每个页文件都维持一个打开的句柄,Ntdll.dllNtCreatePagingfile系统服务程序可增加一个新页文件。工作集工作集即在物理内存中保持的虚拟页面的子集,分进程工作集和系统工作集。页面调度策略取页策略:内存管理器利用请求式页面调度算法及簇方式将页面装入内存断时,将出错页面和它附近的一些页面装入内存,这样可削减读取外存的次数.置页策略:中放置虚拟页面的最佳位置.存中删去来为新的页面腾出空间。多处理器系统中,采纳局部先进先出(FIFO)策略,而单处理器系统中,采纳最近最久未使用(LRU)替换策略.工作集管理系统初始时,所有进程缺省的工作集最大最小值相同。有“增大调度优先级”权限的进程可用SetProcessWorkingSet函数来更改缺省值,但不能超过内 核变量MmMaximumWorkingSetSize中的最大值.当物理内存变得很低时,工作集管理器自动修剪工作集,以增加可用空闲内存数量。有一系列内核控制变量描述工作集扩展和修剪,但这些值是确定的,不能被注册值调整。平衡集管理器和交换程序衡集管理器线程环境下的一个例程.平衡集管理器等待两个事件对象——1秒周期计时器到期后产生事件,并经历以下4步平衡集管理器每被唤醒4次就唤醒交换程序;检查后备链表,必要时调整其深度;查找处于CPU饥饿状态而需提升其优先级的线程;调用工作集管理器。——内部工作集管理器事件,即工作集需要调整时交换程序:即KeSwapProcessOrStack例程,用来查找一段时间内一直处于等待状态的线程,将其内核堆栈转移以收回物理内存。系统工作集5高速缓存页面;分页缓冲池;Ntoskrnl。exe中可分页的代码和数据;设备驱动程序中可分页的代码和数据;系统映射视图。系统工作集最大最小值是在系统初始化时计算的,基于物理内存数量和系统是professionalserver。物理内存管理页框号数据库用来描述物理内存中各页面的状态,有效页表项指向页框号数据库中的项,页框号数据库项又指回此页表。原型页框号指回原型页表项。页面可处于活动、过渡、后备、修改、修改不写入、空闲、零初始化和损坏不行用8种状态,除活动和过渡之外,6种组成了链表。动态页链表一页并零初始化,若也为空,则从后备链表中选取一页并零初始化.-—零页链表是由零页线程(优先级为0)从空闲链表中移过来的,当空闲链表中有88个以上页时激活零页线程。当不需要零初始化页面时,首先访问空闲链表,若为空,则访问后备链表.当进程放弃一个页面时,假若页面未修改过,则加入后备链表;假若修改过,则加入修改链表。束时,页面加入空闲链表。当修改页链表太大,或零初始化和后备链表的大小低于最小值时,唤醒“修改页面写回器"线程,将页面写回外存,并将页面移入后备链表。修改页面写回器由两个系统线程组成,优先级都为17-—MiModifiedPageWriter:将修改页写回页文件——MiMappedPageWriter:将修改页写入映射文件触发修改页面写回器的事件——修改页面数量大于内核变量MmModifiedPageMaximum指定值——可利用页数量小于内核变量MmMinimumFreePages指定值——MiMappedPagesTooOldEvent事件:该事件在预定的数秒后(缺省为300秒,可用注册值修改)产生,将映射页面写入外存若页面写入外存时正在被另一线程共享,则I/O完成后不会将此页移入后备链表。页框号数据结构页框号数据库项是定长的,不同页框号类型,包含的域也不同(参见图4-28)几个根本的域—-页表项地址:指向此页页表项的虚拟地址——访问计数:对此页的访问数量——类型:该页框号表示的页面状态(8种)-—标识:包含修改状态、原型页表项、奇偶校验错误、正在读取或写入等信息。——初始页表项的内容--页表项的页框号:指向该页面页表项的页表页的物理页号其他内存相关机制锁内存能够经过两种方式将页面锁在内存中-—设备驱动程序调用核心态函数MmProbeAndLockPages,MmLockPagableCodeSect

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论