zoukankan      html  css  js  c++  java
  • Win32之内存管理之虚拟内存跟物理内存

                       Win32之内存管理

    一丶虚拟内存和物理内存

      我们知道每个应用程序都有自己独立的4GB空间.  假设A进程的 地址123 存储了10  那么B进程的123地址 存储了20

    那么它们两个是互不影响的. 但是值是真实存在的. 而值是存储在物理内存的.如下图所示.

    根据上图所示. 我们可以分清虚拟内存跟物理内存. 如果我们更改了物理内存的值.那么就会影响A进程或者B进程.

    当然如果你学过内核驱动.就知道内核驱动读写就是你这个意思.我也有写过一个简单的内核驱动读写.详情请看内核驱动目录.

    所以说虚拟内存是假的.当用的时候才会存储在物理内存

    二丶物理内存的管理.

      物理内存是使用4K的方式来管理的.也就是4096个字节.也成为一页.所以以后我们使用API的时候. 大多数都会发现跟页相关.这也是因为管理是页方式管理的原因.

    如下图所示

      

    进程A 的数值放到物理页中.

     而我们进程传统意义上说是由4GB 其实分为高低2G. 高两G是给内核使用的.所以用户只能使用低2G. 而低两G也有高低64k不能使用的. (学过内核想使用自己构造即可)

    如下图所示:

    用户模式可以使用的内存就是橘黄色的位置.但是没有对应的物理页.当我们申请了内存才会有对应的物理页

    如果想看三环程序使用的物理页.可以通过双机调试. 调试我们的程序. 使用Windbg.

    1.首先使用命令  !Process 遍历出我们程序Exe的地址.

    2.使用   dt EPROCESS  遍历出的地址  得到这个应用程序的EPROCESS结构.

    3. 得到EPROCESS + 11c (也就是成员)VadRoot的偏移. 使用!VAD 地址. (EPROCESS + 地址)  可以得出这个EXE使用的内存物理页.

    如果不会使用也无所谓. 观看下图:

    这个图说明了 我们的线性地址10开始 - 10结束. 因为物理页是4K 存储的.所以10 代表的就是1000  后面大小是1000 所以下一个位置是20开始也就是 2000线性地址.

    三丶物理页大小.  

      物理页大小根据你的物理内存.大小来设置的.也就是说你的物理内存多大就可以换算出来.我们可以通过任务管理器查看你的物理页总数.

    例如下图:

      

    我们换算一下. 1048048 / 4  转换为16进制 则是可以有多少个物理页. 例如我们例子则是 3FF7C 个物理页.

    我们也可以使用Windbg dd一下查看. 只需要DD这个变量即可.

    如果我们的物理页超过了.那么操作系统还支持使用硬盘来当物理内存.

    具体设置

    计算机属性 -> 高级系统设置 -> 高级 - > 性能设置 -> 高级 -> 虚拟内存更改.

     

     而这快内存会在windows上保存着. 文件名是 pagefile.sys 一般是C盘的隐藏文件.我们可以通过

    EveryThing搜索一下. 

     三丶操作系统可识别内存

      我们可用的内存就是 我们算出的物理页的大小 + 虚拟内存的大小.但是操作系统可识别的不是这么大的.

    也就是说我们物理内存条加了好多好多.那是一点用没有.

      32位系统下能识别64G内存. winxp只能识别4G内存. 具体知识需要学习Windows内核中的页表 (PTE PDE) 页目录表 等才能清楚. 不多说.只需要了解即可.

  • 相关阅读:
    Oracle对表解锁
    写txt文件在AIX5.3系统中乱码
    Spring Data JPA初使用
    简单流水号生成
    Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COER
    install Tcl8.5.10
    centOS下开机自启动apache、mysql、samba、svn等服务的最简单方法
    UNIX_SOCKET 进程间通信
    Linux(CentOS 5.5) Redis 安装及RedisPHP拓展安装应用
    python 返回 字典型结果集
  • 原文地址:https://www.cnblogs.com/iBinary/p/9581594.html
Copyright © 2011-2022 走看看