🔖 章节导读
内存是计算机核心高速资源,本章讲解操作系统对内存的全套管理方案,是操作系统四大核心管理模块之一。
章节脉络:存储管理四大核心功能 → 内存扩充基础技术(覆盖、交换)→ 分区存储管理 → 页式/段式/段页虚拟存储 → Linux内存实现 高频考点:地址重定位、碎片问题、分页分段对比、虚拟内存原理,计算题集中在分区分配、页表地址转换。
📚 本章核心知识点
5.1 存储管理四大核心功能
内存管理所有技术均围绕四大任务展开:
1. 内存分配与回收
- 分配:为进程划分内存空间;回收:进程结束释放空闲内存。
- 配套管理要素:分配数据结构、放置策略、交换策略、调入策略、空闲块合并回收策略。
2. 地址转换(地址重定位)
两个基础概念:
- 逻辑地址(虚拟地址):编译后程序相对首地址的偏移,存于程序内部;
- 物理地址(绝对地址):内存真实存储单元编号。 重定位=逻辑地址→物理地址映射,分两种:
- 静态重定位程序装入内存时一次性完成地址转换,无需硬件支持; 缺点:程序装入后不能移动、必须连续内存、无法实现虚拟存储。
- 动态重定位程序运行访问内存时实时转换,依靠基址寄存器+限长寄存器硬件; 公式:物理地址 = 基址寄存器值 + 逻辑地址; 优势:内存可非连续分配、支持交换、是虚拟存储实现基础。
3. 内存共享与保护
多道程序同时驻留内存,既要共享公用代码,又要隔离互不干扰。
- 共享:可重入纯代码(如编译器)仅存一份副本,多进程共用。
- 保护键法:内存分区绑定密钥,进程匹配密钥才能读写,区分只读/读写权限。
- 特权隔离:用户态只能访问自身空间,核心态可访问全部内存。
4. 内存逻辑扩充(虚拟存储基础)
物理内存容量有限,操作系统通过软硬件结合,将内存+外存统一逻辑地址空间,用户程序感知更大内存,该机制即虚拟存储器。 虚拟空间大小由CPU地址位数决定,不受物理内存限制;实现技术:覆盖、交换、分页、分段。
5.2 两种基础内存扩充技术
5.2.1 覆盖技术
- 核心思想:同一进程内不会同时运行的程序段共享同一块内存;常驻根程序永久驻留,其他模块互相覆盖。
- 缺点:需要程序员手动划分覆盖结构,系统无法自动管理,早期单道系统使用,现代淘汰。
5.2.2 交换技术(中级调度配套)
- 核心思想:将暂时不运行的进程整个程序、数据从内存换出到磁盘交换区,内存空闲后再换入。
- 区分覆盖&交换:覆盖是同一程序内部复用;交换是多个进程之间内存腾挪。
- 应用:分时系统、虚拟内存系统必备,配合中级调度使用。
5.3 分区存储管理(连续内存分配方案)
分区管理:把用户内存划分为连续区域,每个进程占用一片连续内存,分为单分区、固定多分区、可变多分区三类。
1. 单分区管理
整个用户区只分配一道程序,仅单道系统使用; 缺陷:大量内存空闲,CPU等待I/O时资源完全浪费,仅早期微机使用。
2. 固定分区管理
- 提前把内存划分为若干大小固定分区,分区数量、尺寸永久不变。
- 数据结构:主存分配表,记录分区起始、长度、占用标记。
- 分配逻辑:顺序查表,找到能容纳作业的空闲分区分配。
- 缺陷:产生内部碎片(分区大于程序,剩余空间无法利用),内存利用率低。
3. 可变分区(动态分区)
运行时根据进程实际大小划分分区,分区大小、数量动态变化,无内部碎片,但产生外部碎片。
- | 最先适应 | 按地址从小到大查找第一个满足的空闲区 | 低地址碎片多,保 留大空闲块 | | 最优适应 | 选取刚好够用最小空闲块 | 产生大量极小外部碎片 | | 最坏适应 | 选取最大空闲块分割 | 碎片尺寸更大,更容易复用 |
- 空闲区回收合并规则 回收分区时检查上下相邻内存,分4种情况:无上邻/无下邻、仅上邻、仅下邻、上下均空闲,自动合并大块空闲。
- 紧凑(移动技术) 内存碎片过多时,移动所有进程向低地址靠拢,合并零散空闲; 代价:移动进程时暂停程序,产生巨大系统开销; 限制:正在进行I/O传输的进程不能移动。
分区管理整体优缺点
✅ 优点:硬件需求简单、实现容易;
❌ 缺点:必须连续内存,内外碎片严重,无法高效实现虚拟内存。
5.4 页式存储管理(非连续分配,虚拟内存核心)
彻底解决连续分区碎片问题,内存、程序全部划分为固定大小块。
- 页框(物理块):物理内存等分块,尺寸与页面完全相等;
- 页表:每个进程专属映射表,记录页面→物理页框映射关系。
- 动态请求页式(虚拟分页):仅加载运行页面,缺页中断自动调外存页面,现代系统主流。
- ✅ 无外部碎片,仅页面内部微小内碎片;内存非连续分配,利用率高; ❌ 页表占用内存,存在缺页中断开销,页面共享、保护实现复杂。
5.5 段式 & 段页式存储管理
1. 段式存储管理
- 设计逻辑:按照程序逻辑分段(代码段、数据段、栈段),段长度不固定。
2. 段页式存储(结合分段+分页优点)
5.6 Linux存储管理
- 物理内存管理:划分物理页框,通过伙伴系统管理空闲内存块,解决外部碎片;
- 进程虚拟地址空间:分为用户空间、内核空间,隔离保护;
- 虚拟内存机制:基于请求分页,缺页异常加载磁盘页面;
- 内存保护:页表设置读写、执行权限,非法访问触发段错误;
- 交换分区:内存不足时,将冷页面换入swap磁盘分区,缓解物理内存压力。
⚠️ 本章重点&难点
✅ 必背核心重点
❌ 高频难点
🎯 本章高频笔试&面试题
一、理论简答题(面试高频)
- 可变分区三种分配算法(最先/最优/最坏适应)工作流程、优缺点。
- 什么是内部碎片、外部碎片?分区、分页、分段分别产生哪种碎片?
- 分页存储和分段存储的核心区别(逻辑、地址、碎片、共享)。
- Linux物理内存采用什么算法管理空闲块?swap交换分区作用是什么?
二、计算题
- 给定内存空闲分区,分别用最先/最优/最坏适应算法,分配指定大小进程,画出内存分配图并说明碎片情况。
- 已知页面大小、逻辑地址,分页系统下求页号、页内偏移、对应物理地址。
- 段式存储:给出段表,根据逻辑地址判断是否越界,计算物理地址。
- 段页式地址转换计算,两级查表求解真实物理内存地址。
三、辨析判断题
- 覆盖是多进程之间内存交换,交换是单个程序内部复用(×)
四、Linux实操面试题
- swap分区什么时候会使用?频繁swap代表系统什么问题?
- Linux用户空间与内核空间为什么隔离?有什么保护作用?
📝 学习总结
本章内存管理遵循一条演进线:单分区→固定分区→可变分区(连续分配)→分页/分段/段页(非连续虚拟存储)。
- 碎片是区分各类方案的核心指标,连续分配必有碎片,分页仅存在微小内部碎片;
- 地址重定位、地址转换计算是笔试重中之重,必须动手演算;
- 虚拟内存是本章核心拔高内容,依靠动态重定位+交换+请求分页实现;
- Linux采用分页虚拟内存+伙伴系统管理物理内存,swap缓解内存压力,运维、后端面试常结合内存占用、OOM场景提问。