我们使用的大部分 PC 是基于 Intel 微处理器的 x86 和 x64 架构计算机.

因此, 我们面对的 windows 避免不了和 Intel 架构有些设计上的契合. 比如接下来要说到的内存管理. 为简单起见, 我们只讨论 x86 体系架构的内存管理. 不考虑换页文件影响.

进程的内存


 图 1 (本图摘自 ref 2)

对于系统中的每一个进程而言, 都有 4GB 的 "内存空间". 也就是每个进程都认为自己有 4GB 的内存可以使用.

系统将每个进程的 4GB 地址空间, 从逻辑上划分为两大部分:

  a) 蓝色的是用户空间, 此空间是被用户程序所使用的. 比如我在代码中写 "分配 100MB 内存", 其实占用的就是这一部分.

  b) 红色的是内核空间, 此空间是被用作操作系统执行必要的线程切换以及从用户态函数进入内核态执行功能所保留的内存地址. 应用程序无法操作此区域.

Intel x86 体系内存管理


Intel 规定, 一个在计算机内部, 可以使用 "分页机制" 对硬件内存进行 "虚拟化". 其核心技术如下图:

             图 2 (本图修改自 ref 1)

首先, 在程序中的一个地址 0x1234, 5678 被计算机的页部件(硬件)经过 1,2,3 步, 从线性地址(程序中的地址) 转变为真正机器上的物理地址(即实际内存的硬件地址). 每个线性地址都被分成 "页目录索引(PDE, 10-bit)", "页表索引(PTE, 10-bit)", "页内偏移(offset, 12-bit)" 三部分.

  1) 在页目录中根据 PDE 找到页表的位置, 即通过 0x48 找到 0xa000, 0000.

  2) 根据页表中的 PTE 找到页地址, 即通过 0x345 找到 0x4000, 0000.

  3) 根据偏移, 在页中找到我们要的具体地址, 即已知页位于 0x4000, 0000, 我们需要存取其 0x678 偏移处的数据, 则我们所需要操作的真是物理地址就是 0x4000, 0678.

基于 x86 的 Windows 内存管理


图 3

首先澄清两个概念:

  1. 一个进程中的内存有三种分类, 空闲, 保留, 提交. 具体的含义可以在 图 3 中找到说明. 这三种类型的内存在某一时刻可能位于内存中, 也可能位于交换文件中.

  2. 工作集定义: The working set of a process is the set of pages in the virtual address space of the process that are currently resident in physical memory. 即: 实际在物理内存中的大小.

结合实际系统, 以我家安装的 win8.1 为例, 打开任务管理器, 可见如下:

                         图 4

工作集(内存): 可以这么理解, 此值就是该进程所占用的总物理内存. 但是这个值是由两部分组成, 即 '专用工作集' + '共享工作集'.

内存(专用工作集): 这对于一个进程是最重要的, 它代表了一个进程独占用了多少内存.

内存(共享工作集): 这是该进程和别的进程共享的内存量. 通常, 这是加载一个 dll 所占用的内存.

提交大小: 属于 Committed 那一类. 但是不一定在物理内存中, 有些可能位于交换文件中. 如果有一个程序, 原本占 500MB 内存, 但是绝大多数内存都不使用, 则可以通过 `EmptyWorkingSet` 向操作系统发送请求, 将此进程的不常用的内容从物理内存中换出到换页文件中保存, 如下图:

                  图 5

写在最后


0. 工作集, 即在物理内存中的数据的集合.

1. 工作集 = 专用 + 共享

2. 将所有的 "工作集" 相加后的值会大于任务管理器中内存占用的百分比, 因为百分比对共享内存进行排重了.

3. "提交大小" 和 "工作集" 是两个层面的概念, 大部分活跃进程的 "工作集" 会大于 "提交大小", 而大部分非活跃的进程 "工作集" 会小于 "提交大小", 但是两者没有绝对关系.

4. 虚拟内存: 就是换页文件.

references:

1. http://www.mouseos.com/arch/paging.html

2. Pushing the Limits of Windows: Virtual Memory

转载于:https://www.cnblogs.com/xumaojun/p/8521615.html

Windows 任务管理器中的几个内存概念相关推荐

  1. windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

    通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分), 内存专用工作集是程序独占的物理内存, 提交大小是程序独占的内存(包含物理内存和在页面文件中的内存). 注:页面文件就是存放不在 ...

  2. Windows 8 中的运行时内存减少

    Windows 8 的运行时内存使用是确定 Windows 8 系统要求以及将承载 Windows 8 的大量设备类型的一个重要因素.如您所知,我们要在基于 SoC 的低功耗设备上交付完整的 Wind ...

  3. 获取 Windows 任务管理器中应用程序和进程 任务

    获取应用程序: #pragma once #include "afxcmn.h" /*判断窗口是否是正常运行还是未响应的*/ typedef   BOOL  (WINAPI *PR ...

  4. Windows 任务管理器 PF使用率 总数 核心内存 物理内存

    1.[CPU 使用] CPU的使用百分比,柱状图表示实时的CPU使用率. 2.[CPU 使用记录] CPU使用量随时间的变化曲线,其中红线则表示系统内核的使用率(红线需点击任务管理器的查看菜单,选中& ...

  5. 【转】Windows 任务管理器 PF使用率 总数 核心内存 物理内存

    From:http://blog.csdn.net/chenshaoying/article/details/2294342 1.[CPU 使用]  CPU的使用百分比,柱状图表示实时的CPU使用率. ...

  6. Windows 任务管理器 PF使用率 总数 核心内存 物理内存(转)

    1.[CPU 使用] CPU的使用百分比,柱状图表示实时的CPU使用率. 2.[CPU 使用记录] CPU使用量随时间的变化曲线,其中红线则表示系统内核的使用率(红线需点击任务管理器的查看菜单,选中& ...

  7. 踩内存是什么意思啊_Win10任务管理器中的quot;共享GPU内存quot;是什么意思?

    WIN10任务管理器中的"共享GPU内存"首次在WINDOWS任务管理器中集成. 红框内中专用GPU内存自然不用说,那是显卡带的内存也就是显存容量.因为我这台机的是GTX1060 ...

  8. cpu和内存占用过高,但是任务管理器中的进程占用的内存和cpu看不出来

    不知道从什么时候电脑总是卡卡的,因为cpu和内存比较高配也就没想过占用率的事情,最近卡的受不了了,任务管理器中发现cpu和内存占用都超过90%,内存更是动辄96%以上,网上有一些介绍解决方案,我通过对 ...

  9. Windows任务管理器 explorer 进程

    今天,不小心结束了windows任务管理器中的 explorer 进程,然后电脑桌面就什么都没有了-- 于是便了解了下explorer 进程-- windows任务管理器的 explorer 进程是w ...

最新文章

  1. 几种常见窗函数及其MATLAB程序实现
  2. 前端html继承的方式,好程序员web前端教程之JS继承实现方式解析
  3. 对AFTER触发器的一些整理
  4. access开发精要(6)-计算
  5. k8s服务网关ambassador部署
  6. 用注册表禁止windows添加新用户
  7. 安装redis和phpredis模块
  8. Django获取请求参数方式
  9. 3d激光雷达开发(生成RangeImage)
  10. 弃用微软 C++ 编译器,Win 版 Chrome 改用 Clang
  11. flex布局_flex 布局概述
  12. 我的实战经验:八年招聘用人心得
  13. SpringCloud OpenFeign(二)
  14. PPT转换为PDF后,图片背景变成了黑色的解决方法
  15. uploadify onSelect
  16. 【文献翻译】Select-Storage: A New Oracle Design Pattern on Blockchain
  17. 全网刷屏的可达鸭,单个炒到2000元?湖北人要错过了?
  18. 【豆瓣读书】高分python学习书籍推荐
  19. CG 函数之选手得分
  20. 证明雅可比式(图文详解)

热门文章

  1. 知识图谱实践篇(四):Apache jena SPARQL endpoint及推理
  2. EOS从入门到精通(三)
  3. Android 5.1 Settings源码简要分析
  4. 云计算机玩大型游戏,云游戏实测点评:大部分都可以顺畅玩耍
  5. matlab3dimshow_matlab利用MATLAB嵌套函数表示3D作图
  6. android excel 筛选功能,Android实现Excel表格展示数据
  7. python释放变量内存_Python尚学堂高淇|1113引用的本质栈内存,堆内存,内存的示意图,标识符,变量的声明初始化,垃圾回收机制...
  8. clover configurator_枯木逢春,用Clover让老电脑从NVME SSD启动 再用叁年没问题
  9. fuzzy k means
  10. 数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引