第五章 存储器管理 学习笔记:核心概念与系统服务实践
存储器管理是操作系统的核心功能之一,它负责高效、安全地管理计算机系统的主存(内存)资源。本章内容不仅涉及内存分配与回收的理论,更与计算机系统底层的服务紧密相关。
一、存储器管理的主要目标
- 抽象与隔离:为每个进程提供独立的、连续的虚拟地址空间,隐藏物理内存的细节,并确保进程间互不干扰。
- 高效利用:通过多种技术(如分页、分段)提高内存利用率,减少碎片。
- 扩展与共享:利用虚拟内存技术扩展可用内存空间,并允许安全地共享代码与数据。
- 保护与安全:防止进程非法访问其他进程或操作系统内核的内存区域。
二、核心概念与机制
- 地址绑定与地址空间
- 逻辑地址(虚拟地址):由CPU生成的地址,存在于进程的视角中。
- 地址绑定时机:编译时、加载时、运行时。现代操作系统普遍采用运行时绑定,通过内存管理单元(MMU) 动态地将逻辑地址转换为物理地址。
- 连续内存分配
- 固定分区与动态分区:用于多道程序环境。动态分区更灵活,但会产生外部碎片(分区之间无法利用的小块空闲区)。
- 紧凑技术:通过移动进程在内存中的位置来合并空闲区,消除外部碎片,但开销大。
- 非连续内存分配:分页与分段
- 基本分页:将物理内存和逻辑地址空间划分为固定大小的页(帧)。通过页表完成地址转换。优点是无外部碎片,但有少量内部碎片(页内未用满的部分)。
- 基本分段:按照程序的逻辑模块(代码段、数据段、堆栈段)划分地址空间。支持更自然的保护与共享,但会产生外部碎片。
- 段页式存储:结合分段和分页的优点,先分段,段内再分页。是现代主流操作系统(如Linux)采用的复杂但高效的模式。
- 虚拟内存技术
- 核心思想:将部分暂时不用的程序和数据从内存交换到外存(如硬盘的交换区/页面文件),从而在逻辑上扩展可用内存容量。
- 请求分页:是实现虚拟内存的典型方案。仅在需要时(发生缺页中断)才将页面调入内存。
- 页面置换算法:当需要调入新页面而内存已满时,决定换出哪个旧页面。常用算法包括:
- 先进先出(FIFO):简单,但可能性能差(Belady异常)。
- 最近最久未使用(LRU):性能好,接近OPT,但实现开销较大。
- 时钟算法:LRU的近似,实现简单有效,被广泛采用。
三、与计算机系统服务的深度关联
存储器管理并非孤立运行,它深刻依赖于并影响着整个计算机系统的服务层:
- 硬件支持服务:MMU和TLB(快表) 是地址转换的硬件加速器。操作系统必须正确配置和管理这些硬件,以提供高效的地址转换服务。
- 中断与异常处理服务:缺页中断是虚拟内存工作的核心驱动力。当CPU访问的页面不在内存时,MMU会触发缺页中断。操作系统内核的中断服务程序(ISR) 必须能高效处理此中断:从磁盘读入页面、更新页表、可能执行页面置换,最后重新执行被中断的指令。这是一个典型的系统服务响应过程。
- 文件系统服务:虚拟内存的“后备存储”(交换空间)通常以特殊文件(如Linux的swap分区或文件)的形式存在。操作系统需要调用文件系统的底层读写服务来完成页面的换入换出操作。
- 进程调度与上下文切换服务:当发生缺页中断并进行I/O操作时,当前进程会被阻塞。操作系统调度器会切换到另一个就绪进程执行,以实现CPU与I/O的并行,提高系统整体吞吐量。这体现了存储器管理与进程调度的协同。
- 系统调用服务:应用程序通过系统调用(如
malloc/free、mmap)动态申请和释放内存。这些调用最终会陷入内核,由操作系统的存储器管理模块提供服务,在进程的虚拟地址空间中分配或回收区域,并可能相应地调整页表结构。
- 保护与安全服务:每次内存访问都经过MMU和页表的检查。页表项中的保护位(读/写/执行权限)确保了内存访问的安全性。非法访问会触发异常(如段错误),由操作系统的异常处理服务接管,可能终止违规进程。这是系统安全的基础屏障。
四、
存储器管理是连接硬件、内核服务与上层应用的桥梁。它通过精妙的软硬件协同机制,将有限的物理内存抽象为近乎无限的、易于使用的虚拟空间,同时保障了效率、共享与安全。理解其原理,特别是它与中断、I/O、调度等系统服务的交互,是深入理解操作系统如何作为一个整体提供“计算机系统服务”的关键。学习本章时,应着重把握从“逻辑地址”到“物理地址”的完整转换链条,以及当“缺页”发生时,操作系统内核中一系列服务是如何被串联起来协同工作的。