本系列文章由jadeshu编写,转载请注明出处。http://blog.csdn.net/jadeshu/article/details/22448323

作者:jadeshu   邮箱: jadeshu@qq.com    欢迎邮件交流

Windows在其内核(ntoskrnl.exe/ntkrnlpa.exe/ntkrnlmp.exe/ntkrpamp.exe)中实现内存管理器
•Windows内存管理器只利用两种保护级别的页面:RING0(内核和驱动使用)RING3(外壳和一般应用程序使用)
•Windows只利用了5个段选择子寄存器:SS、CS、DS、ES、FS,而GS未用永远为0x0000
•Windows内存管理使用了Flat(平坦)模式,所有起始地址都为0x00000000
•在X86架构系统上Windows默认页面大小与CPU定义一致为4K大小
•而分配地址空间(不是实际分配物理内存)大小最小粒度为64k
•Windows利用X86的段存在标志P实现了虚拟内存支持,在硬盘上会创建称为页面文件(pagefile.sys)的虚拟内存文件
•Windows为每个进程都提供了平坦的4GB的虚拟空间
•部分高级的Windows版本支持PAE

•工作集(Working Set):进程虚拟空间中实际被映射到物理内存页面的那部分被称为工作集;
•当进程想访问多余实际物理内存的内存时,系统会启用虚拟内存管理机制(工作集管理),将那些长时间未访问的物理页面复制到硬盘缓冲文件上,并释放这些物理页面,映射到虚拟空间的其它页面上;
•内存管理器由下列组件构成(分别运行于独立的线程):
–工作集管理器(优先级16);
–进程/栈交换器(优先级23);
–已修改页面写出器(优先级17);
–映射页面写出器(优先级17);
–解引用段线程(优先级18);
–零页面线程(优先级0);

1.工作集管理器
•工作集管理器被一个称作“平衡集管理器”(名为KeBahnceSetManager)的系统线程环境调用
•平衡集管理器(内核线程之一)至少每秒调用工作集管理器一次,若系统空闲内存数量过低(低于某个阀值时)也会调用工作集管理器;
•工作集管理器总控内存管理策略,比如:工作集修剪、页面年龄(aging)、以及写出已修改页面等;
•在Windows 2000以上系统中工作集分为3类:进程工作集、系统工作集、会话工作集;

2.进程/栈交换器
•执行进程栈和内核线程栈环境(CONTEXT)的交换工作(线程调度)
•当需要进行栈环境交换时,平衡集管理器就唤醒(Resume)此线程

3.已修改页面写出器
•将物理内存中的已被修改过的页面写回硬盘上的页面文件中
•当已修改页面列表中的页面数量超过某一阀值时,此线程被唤醒

4.映射页面写出器
•将内存映射文件中的已修改页面写回到磁盘对应的文件上
•当修改列表中页面数量大于某个阀值或者修改列表上的页面持续5分钟以上未写回磁盘时,该线程被唤醒执行

5.解引用段线程
•负责页面缓存的回收,以及管理页面文件的增长和缩减
•当可用的映射物理内存变少时,该线程被唤醒释放一些页面缓存用于映射

6.零页面线程
•将空闲的页面清成0,用于下一次使用

进程虚拟地址空间的布局结构
•Windows系统为每个进程准备了独立的虚拟地址空间
•在32位Windows上这个地址空间总大小为4GB
•Windows能支持的最大物理内存范围从2GB-1024GB大小,不同版本(不同的CPU)支持实际大小不同
•进程的虚拟地址空间通常被分为两大部分:用户方式分区和内核分区
•在Win32上每个地址空间的开始地址都是0x00000000,最大地址是0xFFFFFFFF
•一般情况下Win32中用户分区和内核分区的界限是0x7FFFFFFF-0x80000000
•Win32 中 0x7FFFFFFF以下为用户区
•在64位(x64)上用户分区为8192GB,在IA-64上用户分区为7152GB
•一般进程代码仅能访问用户分区中的地址范围

用户分区分布情况



内核分区详细情况


注:本篇GameBaby引用

windows游戏编程X86 32位保护模式下的内存管理概述(二)的更多相关文章

  1. windows游戏编程X86 32位保护模式下的内存管理概述(一)

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22445945 作者:jadeshu   邮箱: jades ...

  2. windows游戏编程X86实模式和保护模式

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22309359 作者:jadeshu   邮箱: jades ...

  3. windows游戏编程X86 (内存)寄存器相关的基本概念

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22446971 作者:jadeshu   邮箱: jades ...

  4. x86架构:保护模式下利用中断实现抢占式多任务运行

         站在用户角度考虑,一个合格的操作系统即使在单核下也能 "同时" 执行多个任务,这就要求CPU以非常快的频率在不同任务之间切换,让普通人根本感觉不到任务的切换.windwo ...

  5. x86架构:保护模式下加载并运行用户程序

    本章的代码分3个模块: MBR 引导:加载内核core程序 core:包含内核代码段(从磁盘加载用户程序并重定位).内核数据段(存放api名称.临时缓冲.字符串等).API段(供用户程序调用) 用户程 ...

  6. windows核心编程---第七章 用户模式下的线程同步

    用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在 ...

  7. 【windows核心编程】 第八章 用户模式下的线程同步

    Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程 ...

  8. 《Windows核心编程》第八章——用户模式下的线程同步

    下面起了两个线程,每个对一个全局变量加500次,不假思索进行回答,会认为最后这个全局变量的值会是1000,然而事实并不是这样: #include<iostream> #include &l ...

  9. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

随机推荐

  1. js 中的 深拷贝与浅拷贝

    js在平时的项目中,赋值操作是最多的:比如说: var person1 = { name:"张三", age:18, sex:"male", height:18 ...

  2. Autofac三种生命周期

    InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例 SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象:每次都用同一个对象: In ...

  3. js对象转数组

    1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: ‘nihao‘, 1: ‘haha‘, 2: ‘ga ...

  4. 图片预加载的插件使用-jquery.imgpreload.min.js

    使用方法: //图片预加载 var the_images = [];//新建一个数组,然后将要加载的图片地址推入这个数组中: the_images.push( 'bg.jpg' ); var load ...

  5. C++ STL 之 常用算法

    #include <iostream> #include <vector> #include <algorithm> using namespace std; // ...

  6. # marshalsec使用

    开启rmi服务,恶意类放到服务上 D:\jdk_1.8\bin\java.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRe ...

  7. java入门学习总结_04

    1.循环结构 2.方法 循环结构 概述 1.对于某些需要重复执行的,相同或者相似的语句,使用某种格式来完成对代码的简化. 2.实现的语句: for语句[常用] while语句[常用] do...whi ...

  8. java - day010 - 基本类型包装,自动装箱和拆箱,日期,集合

    基本类型的包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolea ...

  9. linux设置自动同步服务器时间

    最近遇到一个问题,由于两台服务器时间的问题,经常导致用户登录由于时间差问题而报错,再三百度,最后整理了一下修改linux定时同步的操作(本方法适用于有自己时间服务器,没有的只限于借鉴) 首先确认,我们 ...

  10. idou老师教你学Istio 20 : Istio全景监控与拓扑

    根据Istio官方报告,Observe(可观察性)为其重要特性.Istio提供非侵入式的自动监控,记录应用内所有的服务. 我们知道在Istio的架构中,Mixer是管理和收集遥测信息的组件.每一次当请 ...