内存管理与动态内存分配详解
1. 内存分页与页面操作
1.1 页面基本概念
在操作系统中,页面是内存管理的基本单位。对于 32 位系统,页面大小通常为 4KB;对于 64 位系统,页面大小通常为 8KB。页面分为有效页面和无效页面:
- 有效页面:与物理内存中的页面或某些二级存储(如交换分区或磁盘上的文件)相关联。
- 无效页面:未与任何内容关联,代表地址空间中未使用、未分配的部分。访问无效页面会导致段错误。
地址空间不一定是连续的,尽管是线性编址,但包含许多不可寻址的间隙。
1.2 页面错误与换页操作
程序不能直接使用位于二级存储而非物理内存中的页面,直到该页面与物理内存中的页面关联。当进程尝试访问此类页面上的地址时,内存管理单元(MMU)会生成页面错误。此时,内核会介入,将所需页面从二级存储透明地调入物理内存。由于虚拟内存通常比物理内存大得多,内核还会不断地将物理内存中的页面调出到二级存储,为更多的页面调入腾出空间。内核会尝试调出近期最不可能使用的数据,以优化性能。
1.3 内存共享与写时复制
多个虚拟内存页面,即使属于不同进程的不同虚拟地址空间,也可以映射到单个物理页面,从而实现不同虚拟地址空间共享物理内存中的数据。共享数据可以是只读的,也可以是可读可写的。
当进程写入共享的可写页面时,会出现以下两种情况:
- 简单情况:内核允许写入操作,所有共享该页面的进程都能看到写入操作的结果。通常,允许多个进程对共享页面进行读写操作需要一定程度的协调和同步。
- 写时复制(COW):MMU 可能会拦截写入操作并引发异常,内核会为写入进