本系列文章由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. redis的安装---Linux

    1.下载https://redis.io/download wget http://download.redis.io/releases/redis-4.0.14.tar.gz tar -zxvf r ...

  2. 洛谷 P1047 校门外的树(待完善)

    链接:https://www.luogu.org/problemnew/show/P1047 题目: 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米.我们可以把马路看 ...

  3. Docker启动Mongo报警告WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

    警告信息 2019-11-27T09:28:16.659+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_h ...

  4. Oracle数据库默认的data pump dir在哪

    转自:https://zhidao.baidu.com/question/921271686131558779.html 使用select * from dba_directories;可以查到,例如 ...

  5. 在网页中添加google搜索

    网页中插入谷歌搜索,至于怎么上谷歌,后面有时间会更,推荐百度 <form method="GET" action="http://www.google.com.hk ...

  6. 关于NavigationBar的笔记

    1常用几个方法 全局 //设置navigationBar 的类型 ,ps: status bar的状态受navigationbar控制(当用navigationcontroller时,通过设置此属性改 ...

  7. Linux下源码包安装Swoole及基本使用 转

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/msllws/article/details ...

  8. 实现LAMP架构

    LAMP介绍 LAM(M)P: L: linux A: apache (httpd) M: mysql, mariadb M:memcached P: php, perl, python WEB资源类 ...

  9. HTML块级元素与行内元素的区别

    块级元素:块级大多为结构性标记 <address>...</adderss> <center>...</center> 地址文字 <h1>. ...

  10. No package libmcrypt available.

    Centos安装PHP时,安装php依赖包时yum install libmcrypt libmcrypt-devel,报错如下: No package libmcrypt available. No ...