在操作系统中,分段和分页是两种不同的内存管理技术,主要区别如下:
分段(Segmentation)
-
基本概念
分段将程序的逻辑地址空间划分为多个可变长度的段,每个段对应程序的一个逻辑单元(如代码段、数据段、堆栈段等)。每个段在内存中占据连续的空间,但不同段可以不连续。 -
地址转换
- 逻辑地址由**段号(Segment Number)和段内偏移(Offset)**组成(二维地址)。
- 通过段表(Segment Table)完成地址转换:段表存储每个段的基址(Base Address)和界限(Limit)。
- 物理地址 = 段基址 + 段内偏移。
-
优点
- 符合程序逻辑结构:便于共享和保护(如代码段只读、数据段可读写)。
- 动态扩展:段的大小可根据需求调整。
-
缺点
- 外部碎片:内存中可能存在多个不连续的小块空闲区域,难以利用。
- 管理复杂:需要维护段表,且分配内存时需查找合适大小的空闲区域。
分页(Paging)
-
基本概念
分页将逻辑地址空间划分为固定大小的页(Page),物理内存划分为相同大小的页框(Frame)。页与页框通过页表映射,实现非连续的物理内存分配。 -
地址转换
- 逻辑地址分为页号(Page Number)和页内偏移(Offset)(一维地址)。
- 通过**页表(Page Table)**完成地址转换:页表存储每个页对应的物理页框号。
- 物理地址 = 页框号 × 页大小 + 页内偏移。
-
优点
- 消除外部碎片:页大小固定,内存分配灵活。
- 简化管理:仅需记录页表,无需处理可变长度的内存块。
- 支持虚拟内存:通过缺页中断和页面置换,实现内存的按需加载。
-
缺点
- 内部碎片:最后一页可能未完全利用。
- 页表开销大:尤其在使用多级页表或大地址空间时。
关键区别
特性 | 分段 | 分页 |
---|---|---|
划分单位 | 逻辑段(可变长度) | 固定大小的页 |
地址空间 | 二维(段号 + 偏移) | 一维(页号 + 偏移) |
碎片问题 | 外部碎片 | 内部碎片 |
管理目标 | 逻辑隔离与保护 | 物理内存高效利用 |
虚拟内存 | 需结合分页支持 | 原生支持 |
结合应用
现代操作系统(如x86)常采用段页式存储管理,即先分段再分页:
- 逻辑地址通过分段转换为线性地址。
- 线性地址通过分页转换为物理地址。
这种设计兼顾了逻辑保护与物理内存管理效率。
总结:分段注重程序的逻辑结构,分页优化物理内存利用。两者结合可发挥各自优势,满足复杂系统的需求。