zoukankan      html  css  js  c++  java
  • [书摘]Windows内存管理术语

    1. Virtual Address space 虚拟地址空间

       一个应用程序能够访问的最大的内存地址空间, 32位的机器上面最大的就是4GB 但是 并不是所有的内存都放到主存里面, 可能放到pagefile里面

       windows和linux对操作系统的管理都有内核态和用户态, 针对的虚拟地址位置也是不同的.

    2. Phiscal memory 物理内存

      实际内存, 物理内存. 一般情况下物理内存越大的机器性能越好一些.内存的延迟一般是100ns左右 磁盘的是10ms左右 相差10万倍

    3. Reserved memory 保留内存

     应用程序调用win32 API 申请到的一块虚拟内存空间, 只是保留出来的一块地址空间,并不是真正的物理地址空间, 如果空间已经被其他程序使用还去访问的话 会出现 access violation错误提示.

    4. Committed memory

     提交内存 将预先保留的 reserved的内存页面正式提交commit使用.提交的页面在访问时最终转换到了物理内存上面去.提交内存是正式在物理内存中申请一段空间,向页面写入数据.

    5.Shared memory

    共享内存 Windows 提供了在进程和操作系统间共享内存的机制, 共享内存 可以定义为对一个以上的进程都可见的内存. COPY ON WRITE 应该也是使用类似的技术来实现 一个进程中的文本区 可以作为共享使用, 数据区域是私有的.(后面一段是自己的理解)

    6. Private memory

    某个进程 已经committed memory中 非共享的部分

    7. Working set 工作集

    某个进程中的内存 存放到物理内存中的一部分 理解的应该是commit过后的那部分reserved内存.

    8. Page fault 页面错误

    有soft 和hard 两种页面错误, 

    Hard fault 只是的是 VAS里面的地址空间不存在物理内存中,而是放到了pagefile里面去, 需要通过一个物理IO将硬盘上面的内容读入到内存中name就是一个硬错误

    如果想要访问的内存地址在物理内存中 只是没有放到working set中 需要做一次重定向 定位到正确的内存位置

    因为内存比硬盘快数万倍,所以应该主要关注 hard fault 如果经常出现 这样的错误 会导致CPU占用率较高 并且响应变慢

    因为IO是内核态操作, 需要用户态和内核态切换, 上下文切换和物理IO都是非常高的成本

    9. System Workting set 

    这是windows系统需要使用的物理内存

    主要分类:

    System cache、Non paged pool、Paged pool、System mapped views

    System cache 系统高速缓存

    用户映射系统高速缓存打开的文件页面,用于提高磁盘的IO速度 性能监视器中的 memory Cache Resident Bytes 来监控

    Non Paged Pool 非页交换区

    保证一直存在于物理内存中, 并且可以通过 Memory: Pool nopaged Bytes来监控

    应该是被所有的进程共享, 存放对象指针等

    Paged pool 页交换区

    系统空间中能够换入换出到磁盘上面的工作集虚拟地址空间

    Stack

    每个线程有两个栈,一个给内核模式,一个给用户模式,每个栈都是一快内存区域,用于存放线程运行的过程或函数的调用地址,以及所有的参数值( 这个是完全抄的 跟之前的理解不一样)

    In process 

    运行在同一个进程的地址空间里, 比如将dll 加载到内存 好处是速度快不需要进行context switch, 坏处是容易出现错误 影响安全性

    Out of process

    运行在不通的进程地址空间里,比如驱动或者w3wp 运行在单独的进程空间

    Memory leak

    内存泄露 一直不断的保留reserver 或者是提交commit内存资源,哪怕他们不再使用,也不释放给其他用户使用.

  • 相关阅读:
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习4.Intents和Intent Filters)
    第二部分:开发简要指南第五章 支持不同的Android设备
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习2.service)
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习5.Android中的进程与线程)
    第二部分:开发简要指南第四章 Activity的生命周期
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习6.权限(Permissions))
    第三部分:Android 应用程序接口指南第一节:应用程序组件第一章1.Activity
    让青春在绚丽的季节怒放!
    不写诗歌好多年
    成大事者的气质与风范(转)
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/8196125.html
Copyright © 2011-2022 走看看