Windows 内存(二) 内存分配颗粒及页面大小
虚拟内存分配
我们上节课学到, Windows为一个进程分配成如下区域
- NULL指针区
- 用户区
- 64KB进制进入区
- 内核区
在这几个分区中, 只有用户区我们才能够操作
用户地址空间
内存的分配
- 当进程被创建并被赋予它的地址空间时, 该可用地址空间的主体是空闲的, 即
未分配的 若要使用该地址空间的各部分, 必须通过调用
VirtualAllocAPI函数来分配它里边的各个区域- 对一个地址空间的区域进行分配的操作称为
保留 - 也就是这一块空间被标记为使用, 系统将其保留出来了
- 当内存使用完成后, 必须调用
VirtualFreeAPI函数来告知系统不再保留这块虚拟内存空间
- 对一个地址空间的区域进行分配的操作称为
每当保留地址空间的一个区域时
- 系统要确保该区域从
一个分配粒度的边界开始 - 系统要确保该区域的大小是
系统的页面大小的倍数
- 系统要确保该区域从
- 当进程被创建并被赋予它的地址空间时, 该可用地址空间的主体是空闲的, 即
分配颗粒
- 所有的CPU平台都会使用相同的分配颗粒
- 分配颗粒的大小为
64KB
页面大小
- 页面大小为
4KB
- 页面大小为
页面文件
我们的计算机是由CPU通过读取物理内存中的数据并进行计算, 使我们的计算机进行运算
而我们Windows中, 我们是不能直接与物理内存打交道的
我们通过的是虚拟内存来进行一系列操作的
硬盘是可以存放数据的, 所以我们的虚拟内存就存在于硬盘的一块区域内
这块区域我们称之为页交换文件
操作系统就通过硬盘的页面交换文件提交到物理内存中
操作系统提交的过程, 是按
页大小来提交的- Windows中的页大小是
4KB
- Windows中的页大小是
提交物理内存
页面文件提交物理内存的简略过程(便于理解):
CPU进行数据块访问
- 数据块是否在
物理内存 - 有, 则直接使用
- 没有, 发生错误(页面错误)
- 数据块是否在
操作系统捕获到页面错误
- 操作系统检查数据块是否在
页面文件中 在, 检测
物理内存是否还有空间加载该数据块- 有空间, 则进行加载
没有, 尝试在
物理内存中进行页面释放- 释放成功, 进行加载
- 释放失败, 告知
虚拟内存不足
- 操作系统检查数据块是否在
- CPU进行访问
未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-07-13 at 02:57 pm