一、存储系统层次结构(金字塔模型)

计算机存储体系核心设计思想:速度、容量、成本三者平衡,上层作为下层的高速缓存,层级越高速度越快、容量越小、成本越高。

从上至下层级排序:CPU寄存器 → Cache高速缓存 → 主存(内存) → 外存(磁盘/SSD)

1.1 各层级核心特性

  • 寄存器:CPU内置,速度最快、容量最小,用于存放指令操作数和中间结果,硬件直接调度。

  • Cache(L1/L2/L3缓存):SRAM材质,硬件自动管理、对程序透明,缓存热点数据,解决CPU与主存速度差问题。

  • 主存(内存):DRAM材质,CPU可直接寻址,存放运行中程序与数据,断电数据丢失。

  • 外存:磁盘、SSD等,容量大、速度慢、永久存储,CPU无法直接访问,需调入主存后使用。

1.2 Cache三大核心考点

  1. 地址映射方式

    1. 直接映射:固定位置存放,结构简单、冲突率高

    2. 全相联映射:任意位置存放,无冲突、成本高、速度慢

    3. 组相联映射:分组映射,兼顾性能与成本(工程主流)

  2. 替换算法:FIFO、LRU、OPT、随机替换

  3. 写策略:写直达、写回、标记法


二、内存管理四大分配方式

内存管理核心目标:高效利用内存空间、实现地址隔离、支持虚拟内存、减少内存碎片

2.1 分区存储管理(早期)

核心原理:是最早、最基础的内存管理方式,将物理主存预先或按需划分为若干连续内存分区,每个进程运行时单独占用一个完整分区,进程地址空间与物理分区空间一一对应,支持单一进程独占分区运行,分为固定分区和动态分区两种模式。

  • 固定分区:系统初始化时,分区大小、数量、位置全部固定。优势是算法简单、系统开销小、运行稳定;缺点是灵活性极差,大进程无法适配小分区,小进程占用大分区造成空间浪费,产生大量内部碎片,内存利用率极低。

  • 动态分区:根据进程实际内存需求,动态分配对应大小的连续分区,无内部碎片,内存空间利用率优于固定分区。进程频繁创建、销毁后,空闲内存会被分割为零散小空间,产生外部碎片,需通过内存紧凑、空闲分区合并等方式优化,额外增加系统算力开销。

通俗类比:将整块物理内存划分为若干大小不一或固定的独立房间,每个房间仅允许一个进程入驻,进程独占整个房间资源,不与其他进程共享空间。

  • 核心特点:分区为连续整块内存,结构简单、硬件开销小、系统实现难度低;固定分区灵活性差,动态分区适配性更强,但易产生内存碎片,内存整体利用率偏低。

  • 地址结构:逻辑地址与物理地址为一维连续地址,无页号、段号拆分,进程完整映射到物理分区,地址转换简单,无需复杂查表映射。

  • 适用场景:早期单道/多道简单操作系统、功能固定的老旧嵌入式设备、实时简易控制系统,不适合多任务、大内存、高并发系统。

动态分区四大分配算法:首次适应、循环首次适应、最佳适应、最坏适应,各算法在检索效率、碎片控制上各有优劣,需重点区分辨析。

2.2 页式存储管理(现代系统主流)

核心原理:将进程逻辑地址空间、内存物理地址空间,统一划分为固定大小的页面与页框,通过页表完成逻辑地址→物理地址的精准映射。

  • 核心特点:内存空间规整,无外部碎片,仅程序最后一页会产生少量内部碎片,内存利用率极高。

  • 地址结构:逻辑地址=页号+页内偏移;物理地址=物理块号+页内偏移,页内偏移无需转换,映射效率高。

  • 适用场景:通用操作系统、PC、服务器系统,完美适配虚拟分页机制,通用性极强。

通俗类比:将整块内存比作大书架,均匀分割为若干大小统一的小格子(页框);将运行的程序拆分为同等大小的小块(页面),逐一存入空闲页框。

进程(程序)中的地址,我们称之为逻辑地址(虚地址),而内存中的地址我们称之为物理地址(实地址);

每个页分为页号和页内地址,页号用来和块号对应,代表存储的位置,大小可以代表页的数量,页内地 址代表的是存储的数据内容,大小可以代表数据大小。

2.3 段式存储管理(贴合程序逻辑)

核心原理:完全贴合程序开发逻辑,按照程序逻辑模块自主分段,分为代码段、数据段、栈段、常量段等,各逻辑段长度不固定,精准匹配程序运行需求。

  • 核心优势:程序逻辑独立性强,天然支持段共享、段权限保护,适配模块化编程、多进程资源共享场景,程序可维护性高。

  • 地址结构段号,段内偏移。其中段内偏移不能超过该段号对应的段长,否则越界错误,而此地 址对应的真正内存地址应该是:段号对应的基地址+段内偏移。

  • 核心缺陷:段长不统一,进程释放内存后产生大量外部碎片;需单独完成段地址映射,转换开销高于页式存储,内存利用率偏低。

通俗类比:摒弃统一格子,按照文件类型分类收纳,根据程序模块实际大小定制存储空间。

2.4 段页式存储管理(综合最优方案)

核心原理:采用先分段、后分页的双层管理机制,先按程序逻辑划分独立功能段,再将不等长的逻辑段划分为固定大小的页面,兼顾逻辑完整性与空间利用率。

  • 核心优点:保留段式存储的逻辑分层、共享保护特性,同时继承页式存储碎片少、利用率高的优势,综合性能最佳。

  • 核心缺点:需通过段表+页表两次查表完成地址转换,硬件结构复杂,系统访问开销、算力开销更大。

通俗类比:结合段式、页式双重优势,先按文件类型划分收纳大区(逻辑段),再将每个大区分割为统一小格子(页面)。

2.5 四种方式核心对比表

管理方式

粒度

碎片类型

共享保护

适用场景

分区式

整进程分配

内/外部碎片

不支持

早期简单系统

页式

固定大小

少量内部碎片

弱支持

通用操作系统

段式

可变逻辑段

外部碎片

强支持

模块化程序、共享场景

段页式

段+页分级

极少碎片

强支持

高端服务器、大型系统


三、虚拟内存机制

3.1 基本原理

虚拟内存依托局部性原理(时间局部性、空间局部性),将外存作为内存的延伸,无需将整个程序载入内存,仅加载运行所需页面,实现小内存运行大程序

3.2 缺页中断

当进程访问的页面不在主存时,触发缺页中断,系统从外存调入对应页面;若内存已满,则触发页面置换。

缺页中断特点:属于硬件中断、可嵌套、中断处理完成后返回断点继续执行。


四、页面置换算法

内存页框已满、需要调入新页面时,淘汰旧页面的策略,架构师考试高频计算题考点。

4.1 四大经典算法

1)OPT 最优置换算法

淘汰未来最久不被访问的页面,理论最优、缺页率最低。仅用于算法对比,无法工程实现(需要预知未来访问序列)。

2)FIFO 先进先出算法

按照页面进入内存的先后顺序,淘汰最早进入的页面。

特点:实现最简单,存在Belady异常(页框数增加,缺页率反而升高)。

3)LRU 最近最少使用算法(⭐⭐⭐重点)

淘汰最近最长时间未被访问的页面,贴合局部性原理,缺页率接近OPT,工程最常用

实现方式:栈记录访问顺序、时钟算法近似实现。无Belady异常,性能最优。

4)随机置换算法

随机淘汰页面,实现简单、性能不稳定,仅用于低端嵌入式系统。

4.2 算法优先级排序

OPT(理论最优) > LRU(工程最优) > FIFO > 随机置换


五、高频考点&易错点总结

  1. 碎片区分:页式无外部碎片、有内部碎片;段式无内部碎片、有外部碎片。

  2. 地址转换:页式/段式均通过查表完成逻辑地址→物理地址转换,页内/段内偏移量无需转换

  3. 虚拟内存前提:必须具备分页机制、局部性原理、外存支持,单分区无虚拟内存。

  4. Belady异常:仅FIFO算法独有,LRU、OPT均无此问题。

  5. Cache与主存:Cache对用户透明,虚拟内存对用户不透明、由操作系统管理。

下期预告:系统架构师备考:操作系统基础 | 文件管理

系统架构师备考:操作系统基础 | 进程管理

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐