Windows的内存管理
一.内存管理器
1. Windows的存储管理主要包括内存管理和外存管理
2. 32位的Windows操作系统定义了大小为4GB的虚拟内存空间,以便使系统服务和应用可以在固定大小的内存视图上操作
3. 内存管理器将虚拟地址转换到实际的物理内存地址,如果需要访问的数据不在物理内存中,系统通过换页机制将它调入内存
4. 当系统可用的物理内存不够时,内存管理器会将一部分驻留在物理内存中的数据通过分页机制调出到磁盘上,当需要时再将它调入物理内存。
5. 进程一般只有一部分虚拟地址空间的数据驻留在物理内存中,这一部分虚拟地址空间被称为工作集
6. 内存管理器由一组运行在核心态的系统服务组成,用来分配,释放和管理虚拟内存。它还包含内存访问出错陷阱处理程序,用来处理内存访问时出现的错误
二.内存管理的机制
1. 内存管理器将虚拟内存空间瓜分成固定大小的单元:页。页的大小根据计算机体系结构而定
2. 应用程序一般希望申请到连续的虚拟空间地址,内存管理器通过预留机制来是实现这一功能
3. 当线程申请预留一部分内存时,内存管理器对相关的页做标记,在用到时在进行地址映射到物理内存空间,不用时不映射
4. Windows提供了在进程间共享内存的机制
5. 如果进程对共享的页进行写入时,内存管理器会给该共享页重新分配另一个物理内存,并将该页的内容复制到新的页中。进行写入操作的进程将该页映射到新的物理内存中,并完成写入操作,而且该页面称为该进程的私有页
6. 一般来说,内存申请是以页为单位的(4KB)
7. 用堆管理器来解决申请较小的内存块,堆管理器来管理小得而内存分配
8. 堆管理器的内存分配力度可以小到8B
9. 每个进程都有一个进程堆,在进程创建时系统分配默认大小为1MB的空间作为进程堆空间
10. 在分配的内存大于默认的堆大小,系统将动态增加进程堆的空间
11. 所有核心态系统服务都共享同一个系统地址空间。内存管理器利用两种大小动态改变的内存池来管理核心态服务器的内存分配
12. 在系统服务器中,还有一部分程序和数据需要常驻内存,以保证系统的效率。内存管理器用不分页的内存池来为这些服务器分配内存,这些内存不会被调出到磁盘上
13. 在操作系统中,还有一部分的程序和数据可以被调出到磁盘上,以便为其他的程序和数据提供物理内存空间。内存管理器用分页内存池来为他们分配内存,在必要时这部分内存会被系统调出磁盘上
14. 这两个内存池都驻留在系统的虚拟地址空间的高端部分,线程需要通过在核心态的系统调用来访问这一部分空间