段式存储、页式存储、段页式存储:三种内存管理策略的演进与权衡
在现代操作系统与计算机体系结构中,内存管理单元(MMU)通过“段”“页”两种粒度把逻辑地址映射到物理地址。段式、页式、段页式三种机制决定了地址转换效率、内存碎片、共享与保护能力,是操作系统、编译器、虚拟化、嵌入式系统设计的核心基础。
一、三种机制总览
维度段式存储页式存储段页式存储逻辑划分单位段(Segment)页(Page)先分段再分页物理划分单位连续物理块固定大小页框段内再分页地址结构段号+段内偏移页号+页内偏移段号+页号+页内偏移碎片类型外部碎片内部碎片外部+内部(可控)共享粒度段级共享页级共享段级共享+页级映射硬件支持段表寄存器、界限寄存器TLB、页表寄存器段表+页表+TLB典型系统早期 80286、Unix System Vx86 32/64 位、ARMv8x86 保护模式、Linux 用户态
二、知识点详解
2.1 段式存储(Segmentation)
段式存储把程序按逻辑意义划分为若干“段”,如代码段、数据段、堆段、栈段。每个段在内存中占据一段连续区域,由操作系统维护一张段表(Segment Table),表项包含:
段基址(Base):段在物理内存的起始地址段界限(Limit):段的最大长度保护位:读/写/执行权限存在位、有效位等
地址转换过程:
逻辑地址 = 段号 + 段内偏移
若偏移 ≤ Limit,则物理地址 = Base + 偏移;否则触发段越界异常。
优点
逻辑与物理视图一致,便于共享、保护、动态扩展。支持可变长段,无内部碎片。
缺点
段长可变,频繁分配/释放导致外部碎片严重。需要连续物理区域,内存利用率随运行时间下降。
2.2 页式存储(Paging)
页式存储把逻辑地址空间与物理地址空间都划分为固定大小的块,分别称为“页”与“页框”(Frame)。操作系统维护页表(Page Table),页表项(PTE)包含:
页框号(Frame Number)有效位、脏位、访问位保护位、缓存禁用位等
地址转换过程:
逻辑地址 = 页号 + 页内偏移
页号作为索引查页表得页框号,再拼接页内偏移即得物理地址。现代 CPU 通过 TLB(快表)缓存近期 PTE,加速转换。
优点
固定大小分配,无外部碎片。支持离散分配,提高内存利用率。易于实现共享、写时复制、按需调页(Demand Paging)。
缺点
存在内部碎片:平均浪费半页。页表本身占用内存;多级页表、反向页表、哈希页表等结构增加复杂度。
2.3 段页式存储(Segmented Paging)
段页式存储是前两者的折中:先按逻辑意义分段,再把每个段内部按固定大小分页。逻辑地址被划分为:
段号 | 页号 | 页内偏移
硬件需维护两级结构:
段表:记录每个段的页表起始地址与页表长度。页表:记录段内各页对应的页框号。
地址转换流程:
段号 → 查段表得页表基址 → 页号 → 查页表得页框号 → 拼接页内偏移 → 物理地址。
优点
兼具段的逻辑可管理性与页的无外部碎片优势。支持段级保护、共享,同时允许段内离散分配。可通过多级页表、TLB 进一步优化。
缺点
地址转换需两次查表(段表+页表),增加延迟;需硬件 TLB 缓解。实现复杂,需要操作系统与 MMU 协同维护两级表结构。
三、总结与对比
比较维度段式页式段页式碎片外部碎片内部碎片内部碎片(可控)连续需求必须连续离散段内离散共享粒度段级页级段级+页级地址转换一次加法一次查表两次查表硬件支持段寄存器+界限TLB+页表寄存器段表+页表+TLB典型应用早期 80286、嵌入式 RTOS现代通用 OSx86 保护模式、Linux 用户态
架构师洞见
在 64 位系统与虚拟化场景下,纯段式已退出历史舞台,但“段”概念仍用于权限隔离(x86 FS/GS 段、ARMv8 TBI)。页式是现代操作系统与硬件的默认选择,TLB 命中率与页表级数直接影响性能;大页(HugePage)、五级页表、IOMMU 是演进方向。段页式在需要逻辑隔离与离散分配并存的场景(如微内核、可信执行环境)仍有价值,未来或将以“域-页”两级映射形式回归。
手机副业赚钱的路子有哪些?盘点2025年比较热门的赚钱方法
诛仙手游版本大全