第五章 存储器管理学习笔记:核心概念与系统服务解析
存储器管理是操作系统的核心功能之一,它直接关系到计算机系统的性能、稳定性和资源利用率。本章主要探讨了操作系统如何高效、公平、安全地管理主存储器(内存),并为上层的应用程序和系统服务提供支持。
一、存储器管理的核心目标与功能
存储器管理的根本目标是提供一个抽象、高效且安全的存储访问环境。其主要功能包括:
- 内存的分配与回收:跟踪内存的使用情况,响应进程的内存请求,为其分配空间,并在进程结束时回收资源。
- 地址映射与重定位:将进程的逻辑地址(相对地址)转换为物理内存的实际地址。这通过硬件(MMU)和软件(操作系统)协同完成,是实现进程隔离和多道程序并发的基础。
- 内存保护:确保每个进程只能访问其被分配的内存区域,防止进程间相互干扰或破坏操作系统内核。通常通过界限寄存器或页表保护位实现。
- 内存扩充(虚拟内存):利用外存(如硬盘)模拟出比实际物理内存大得多的“虚拟地址空间”,通过请求调入和置换功能,实现小内存运行大程序,并提高多道程序并发度。
二、关键技术与实现机制
1. 连续分配管理方式
- 单一连续分配:最简单,整个内存除系统区外全部供一个用户程序使用。适用于单用户、单任务系统,内存利用率低。
- 固定分区分配:将内存预先划分为若干个大小固定或可变的区域。虽然管理简单,但存在内部碎片(分配单元未用完的部分)问题。
- 动态分区分配:根据进程实际需要动态划分内存分区。虽然更灵活,但会产生外部碎片(分散的、太小而无法利用的内存块),需要通过紧凑技术或更高级的管理算法(如伙伴系统)来解决。
2. 非连续分配管理方式(离散分配)
这是现代操作系统的基石,完美解决了外部碎片问题。
- 分页存储管理:
- 将进程的逻辑地址空间和物理内存都划分为固定大小的页/页框。
- 通过页表实现逻辑页号到物理页框号的映射。
- 优点:无外部碎片,内存利用率高,管理简单。
- 缺点:存在内部碎片,且需要硬件(如快表TLB)支持以提高地址转换速度。
- 分段存储管理:
- 按照程序的逻辑模块(如主程序、子程序、数据段等)划分段,段长可变。
- 通过段表实现逻辑段到物理内存区的映射。
- 优点:符合程序员的直观视图,易于实现信息共享和保护。
- 缺点:会产生外部碎片。
- 段页式存储管理:结合分段和分页的优点。先将程序分段,再将每个段分页。兼具了分段在逻辑上的优势和分页在物理管理上的高效,但地址转换过程更复杂,需要段表和页表两级查找。
3. 虚拟内存技术
这是存储器管理技术的集大成者,其核心思想是局部性原理(时间局部性和空间局部性)。
- 请求分页/请求分段系统:在基本分页/分段基础上,增加了请求调页/调段和页面/段置换功能。
- 页面置换算法:当需要调入新页而内存已满时,决定淘汰哪个旧页。常见算法有:
- 最佳置换算法(OPT):理论最优,但无法实现。
- 先进先出算法(FIFO):实现简单,但可能产生Belady异常(分配页框数增加,缺页率反而升高)。
- 最近最久未使用算法(LRU):性能接近OPT,但实现开销较大。
- 时钟置换算法(CLOCK):LRU的近似实现,性能和开销折中,被广泛采用。
- 工作集模型与抖动:操作系统通过跟踪进程的“工作集”(当前时间段内活跃访问的页面集合)来预防抖动现象——即进程频繁缺页,大部分时间用于页面调入/换出,导致CPU利用率急剧下降。
三、存储器管理与计算机系统服务
操作系统提供的许多核心系统服务都深度依赖于高效的内存管理:
- 进程管理与调度服务:进程控制块(PCB)的存放、进程上下文的切换、进程地址空间的创建与销毁,都离不开内存管理的支持。虚拟内存技术使得系统能够维持远超物理内存数量的进程处于“就绪”状态(提高多道程序度),为调度器提供了更多选择。
- 文件与I/O系统服务:内存管理中的缓冲区管理是I/O性能的关键。磁盘等块设备的数据通常先被读入内存缓冲区,再供进程访问。虚拟内存系统将磁盘空间作为内存的延伸(交换区/页面文件),使得文件操作和内存管理在底层紧密结合(如内存映射文件)。
- 系统安全与保护服务:内存保护机制(页表/段表中的读、写、执行权限位)是防止恶意代码或错误程序破坏系统或其他进程的第一道防线。它隔离了用户态和内核态空间,保障了操作系统的安全稳定运行。
- 动态链接与共享库服务:分段存储便于代码和数据的共享。现代操作系统中,多个进程可以共享同一份只读代码段(如C语言运行库),节省了大量内存。动态链接技术正是在内存管理的支持下,将共享库在运行时映射到进程的地址空间。
四、
存储器管理是连接硬件资源与软件应用的桥梁。从早期的连续分配到现代基于分页/分段的虚拟内存系统,其演进始终围绕着高效利用、安全隔离、方便用户三大目标。它不仅是操作系统内部的关键模块,更是所有上层系统服务得以高效、可靠运行的基石。理解存储器管理的原理,对于分析系统性能瓶颈、进行系统级编程和优化都具有至关重要的意义。