当前位置:首页>Linux>《操作系统教程(Linux版)》第五章|存储管理干货笔记 + 面试高频题 (本书的重点)

《操作系统教程(Linux版)》第五章|存储管理干货笔记 + 面试高频题 (本书的重点)

  • 2026-10-04 13:25:05
《操作系统教程(Linux版)》第五章|存储管理干货笔记 + 面试高频题 (本书的重点)
Hello,大家好,我是程序媛MM。

本文约3600字,今天继续阅读《操作系统教程(Linux 版)》这本书, 本文整理了第五章的读书笔记。

关注公众号, 即可获得与Linux相关的电子书籍(含《操作系统教程(Linux 版)》)以及常用开发工具,文末有文档清单。


书籍原文整理|含高频面试/笔试题,计算机考研、校招后端/运维/内核必看

🔖 章节导读

内存是计算机核心高速资源,本章讲解操作系统对内存的全套管理方案,是操作系统四大核心管理模块之一。

章节脉络:存储管理四大核心功能 → 内存扩充基础技术(覆盖、交换)→ 分区存储管理 → 页式/段式/段页虚拟存储 → Linux内存实现 高频考点:地址重定位、碎片问题、分页分段对比、虚拟内存原理,计算题集中在分区分配、页表地址转换。

📚 本章核心知识点

5.1 存储管理四大核心功能

内存管理所有技术均围绕四大任务展开:

1. 内存分配与回收

  • 分配:为进程划分内存空间;回收:进程结束释放空闲内存。
  • 配套管理要素:分配数据结构、放置策略、交换策略、调入策略、空闲块合并回收策略。
  • 空闲内存记录工具:空闲区表、空闲块链表。

2. 地址转换(地址重定位)

两个基础概念:

  • 逻辑地址(虚拟地址):编译后程序相对首地址的偏移,存于程序内部;
  • 物理地址(绝对地址):内存真实存储单元编号。 重定位=逻辑地址→物理地址映射,分两种:
  1. 静态重定位程序装入内存时一次性完成地址转换,无需硬件支持; 缺点:程序装入后不能移动、必须连续内存、无法实现虚拟存储。
  2. 动态重定位程序运行访问内存时实时转换,依靠基址寄存器+限长寄存器硬件; 公式:物理地址 = 基址寄存器值 + 逻辑地址; 优势:内存可非连续分配、支持交换、是虚拟存储实现基础。

3. 内存共享与保护

多道程序同时驻留内存,既要共享公用代码,又要隔离互不干扰。

  1. 共享:可重入纯代码(如编译器)仅存一份副本,多进程共用。
  2. 内存保护两种硬件方案
  • 上下界寄存器:限定进程地址区间,越界触发中断;
  • 保护键法:内存分区绑定密钥,进程匹配密钥才能读写,区分只读/读写权限。
  1. 特权隔离:用户态只能访问自身空间,核心态可访问全部内存。

4. 内存逻辑扩充(虚拟存储基础)

物理内存容量有限,操作系统通过软硬件结合,将内存+外存统一逻辑地址空间,用户程序感知更大内存,该机制即虚拟存储器。 虚拟空间大小由CPU地址位数决定,不受物理内存限制;实现技术:覆盖、交换、分页、分段。

5.2 两种基础内存扩充技术

5.2.1 覆盖技术

  1. 核心思想:同一进程内不会同时运行的程序段共享同一块内存;常驻根程序永久驻留,其他模块互相覆盖。
  2. 缺点:需要程序员手动划分覆盖结构,系统无法自动管理,早期单道系统使用,现代淘汰。
  3. 适用:单个大程序,进程内部内存复用。

5.2.2 交换技术(中级调度配套)

  1. 核心思想:将暂时不运行的进程整个程序、数据从内存换出到磁盘交换区,内存空闲后再换入。
  2. 区分覆盖&交换:覆盖是同一程序内部复用;交换是多个进程之间内存腾挪。
  3. 应用:分时系统、虚拟内存系统必备,配合中级调度使用。

5.3 分区存储管理(连续内存分配方案)

分区管理:把用户内存划分为连续区域,每个进程占用一片连续内存,分为单分区、固定多分区、可变多分区三类。

1. 单分区管理

整个用户区只分配一道程序,仅单道系统使用; 缺陷:大量内存空闲,CPU等待I/O时资源完全浪费,仅早期微机使用。

2. 固定分区管理

  1. 提前把内存划分为若干大小固定分区,分区数量、尺寸永久不变。
  2. 数据结构:主存分配表,记录分区起始、长度、占用标记。
  3. 分配逻辑:顺序查表,找到能容纳作业的空闲分区分配。
  4. 缺陷:产生内部碎片(分区大于程序,剩余空间无法利用),内存利用率低。

3. 可变分区(动态分区)

运行时根据进程实际大小划分分区,分区大小、数量动态变化,无内部碎片,但产生外部碎片。

  1. 数据结构:已分配区表、空闲区表/空闲块链表。
  2. 三大空闲区分配算法
     | 算法 | 分配规则 | 优缺点 |
     | ---- | ---- | ---- | 
     | 最先适应 | 按地址从小到大查找第一个满足的空闲区 | 低地址碎片多,保     留大空闲块 | 
     | 最优适应 | 选取刚好够用最小空闲块 | 产生大量极小外部碎片 | 
     | 最坏适应 | 选取最大空闲块分割 | 碎片尺寸更大,更容易复用 |
  3. 空闲区回收合并规则 回收分区时检查上下相邻内存,分4种情况:无上邻/无下邻、仅上邻、仅下邻、上下均空闲,自动合并大块空闲。
  4. 紧凑(移动技术) 内存碎片过多时,移动所有进程向低地址靠拢,合并零散空闲; 代价:移动进程时暂停程序,产生巨大系统开销; 限制:正在进行I/O传输的进程不能移动。

分区管理整体优缺点

✅ 优点:硬件需求简单、实现容易;

❌ 缺点:必须连续内存,内外碎片严重,无法高效实现虚拟内存。

5.4 页式存储管理(非连续分配,虚拟内存核心)

彻底解决连续分区碎片问题,内存、程序全部划分为固定大小块。

  1. 基础概念
  • 页:进程逻辑空间等分块;
  • 页框(物理块):物理内存等分块,尺寸与页面完全相等;
  • 页表:每个进程专属映射表,记录页面→物理页框映射关系。
  1. 地址转换流程(动态重定位硬件完成) 
    逻辑地址 = 页号 + 页内偏移; 
    硬件通过页表查询页框号,拼接偏移得到物理地址。
  2. 分类
  • 静态页式:程序全部一次性装入内存,无虚拟内存;
  • 动态请求页式(虚拟分页):仅加载运行页面,缺页中断自动调外存页面,现代系统主流。
  1. 优缺点
    ✅ 无外部碎片,仅页面内部微小内碎片;内存非连续分配,利用率高; ❌ 页表占用内存,存在缺页中断开销,页面共享、保护实现复杂。

5.5 段式 & 段页式存储管理

1. 段式存储管理

  1. 设计逻辑:按照程序逻辑分段(代码段、数据段、栈段),段长度不固定。
  2. 段表:记录每段起始物理地址、段限长。
  3. 地址结构:段号 + 段内偏移;
  4. 优势:逻辑独立,便于代码共享、分段保护;
  5. 缺陷:段长度可变,产生外部碎片。

2. 段页式存储(结合分段+分页优点)

  1. 双层划分:进程分为多个逻辑段,每个段内部再分页;
  2. 两级映射:段表→段内页表→物理页框;
  3. 优势:兼顾程序逻辑划分、分页无外碎片;
  4. 缺陷:地址转换需要两次查表,硬件复杂、开销更大。

5.6 Linux存储管理

  1. 物理内存管理:划分物理页框,通过伙伴系统管理空闲内存块,解决外部碎片;
  2. 进程虚拟地址空间:分为用户空间、内核空间,隔离保护;
  3. 虚拟内存机制:基于请求分页,缺页异常加载磁盘页面;
  4. 内存保护:页表设置读写、执行权限,非法访问触发段错误;
  5. 交换分区:内存不足时,将冷页面换入swap磁盘分区,缓解物理内存压力。

⚠️ 本章重点&难点

✅ 必背核心重点

  1. 存储管理四大功能、静态/动态地址重定位区别;
  2. 覆盖、交换的定义与两者区分;
  3. 可变分区三种分配算法、空闲区合并、紧凑技术;
  4. 分页、分段、段页式地址结构与转换原理;
  5. 内外碎片产生原因、各类内存管理方案碎片对比;
  6. Linux虚拟内存、伙伴系统、swap交换分区。

❌ 高频难点

  1. 逻辑地址转物理地址计算题(分页/分段/段页);
  2. 三种分区分配算法的内存布局推演;
  3. 虚拟存储器实现原理;
  4. 分页vs分段核心差异对比;
  5. 紧凑技术的使用限制与性能损耗。

🎯 本章高频笔试&面试题

一、理论简答题(面试高频)

  1. 存储管理包含哪四大核心功能?分别简述作用。
  2. 什么是静态重定位、动态重定位?二者区别、优缺点。
  3. 覆盖和交换技术有什么区别,各自适用场景?
  4. 可变分区三种分配算法(最先/最优/最坏适应)工作流程、优缺点。
  5. 什么是内部碎片、外部碎片?分区、分页、分段分别产生哪种碎片?
  6. 简述紧凑(移动技术)作用与使用限制。
  7. 分页存储和分段存储的核心区别(逻辑、地址、碎片、共享)。
  8. 简述虚拟存储器的实现思想与硬件支撑条件。
  9. Linux物理内存采用什么算法管理空闲块?swap交换分区作用是什么?

二、计算题

  1. 给定内存空闲分区,分别用最先/最优/最坏适应算法,分配指定大小进程,画出内存分配图并说明碎片情况。
  2. 已知页面大小、逻辑地址,分页系统下求页号、页内偏移、对应物理地址。
  3. 段式存储:给出段表,根据逻辑地址判断是否越界,计算物理地址。
  4. 段页式地址转换计算,两级查表求解真实物理内存地址。

三、辨析判断题

  1. 固定分区产生外部碎片,可变分区产生内部碎片(×)
  2. 分页系统存在外部碎片,分段只有内部碎片(×)
  3. 动态重定位支持程序在内存中移动,静态不支持(√)
  4. 覆盖是多进程之间内存交换,交换是单个程序内部复用(×)
  5. 段页式管理需要进行两次地址转换(√)

四、Linux实操面试题

  1. Linux伙伴系统解决什么内存问题?
  2. 什么是缺页异常?发生时系统执行哪些操作?
  3. swap分区什么时候会使用?频繁swap代表系统什么问题?
  4. Linux用户空间与内核空间为什么隔离?有什么保护作用?

📝 学习总结

本章内存管理遵循一条演进线:单分区→固定分区→可变分区(连续分配)→分页/分段/段页(非连续虚拟存储)。

  1. 碎片是区分各类方案的核心指标,连续分配必有碎片,分页仅存在微小内部碎片;
  2. 地址重定位、地址转换计算是笔试重中之重,必须动手演算;
  3. 虚拟内存是本章核心拔高内容,依靠动态重定位+交换+请求分页实现;
  4. Linux采用分页虚拟内存+伙伴系统管理物理内存,swap缓解内存压力,运维、后端面试常结合内存占用、OOM场景提问。

往期文章(欢迎订阅技术分享栏目全部文章):

【从零开始撸内核驱动源码】:以ttyserial(串口驱动)为例,串联字符设备驱动基础知识点的学习计划
Linux内核源码顶层 Makefile分析并单独编译调试内核自带的驱动
【从零开始撸内核驱动源码】:ttynull驱动
Linux内核驱动安装失败问题调试及解决方法
Linux内核驱动源码走读之编译内核及外部驱动实操指南
“谢谢你看到这里”

这里是女程序员的笔记本

 15年+嵌入式软件工程师兼二胎宝妈

分享读书心得、工作经验,自我成长和生活方式。

希望我的文字能对你有所帮助

最新文章

随机文章