基本思想

  • 按程序的逻辑结构划分为若干(Segment)
  • 每段有独立的名称和长度(主程序段、数据段、堆栈段等)
  • 每段独立编址(从 0 开始),段长可变
  • 物理内存采用可变分区管理
  • 通过段表实现段到物理内存的映射

重点 段表

  • 每个进程一张段表
  • 包含:段号、段基址段长度、状态位等
  • 段号由数组下标自然表示
  • PCB 中有指针指向段表

地址转换

  • 二维逻辑地址:段号(S)+ 段内偏移(D)
  • 转换过程:
    1. 查段号 S 是否超过段表长度寄存器(越界保护
    2. 查段表获取该段物理起始地址
    3. 检查段内偏移 D 是否越界(D < 段长度)
    4. 物理地址 = 基址 + 段内偏移(加法拼接,区别于页式的位拼接)

共享与保护

  • 共享:不同进程段表的段表项指向同一物理起始地址(共享代码段、共享库)
  • 保护:每段可独立设置访问权限(只读代码段、可读写数据段)

优缺点

  • 优点:对用户自然(按逻辑划分),便于共享和保护,无内部碎片
  • 缺点:外部碎片(需内存紧致 Complex),内存分配复杂,编程需在汇编中加段号

重点 页式 vs 段式

方面页式段式
划分依据固定大小(系统决定)逻辑结构(用户/程序员)
地址结构一维线性二维(段号 + 偏移)
段/页大小固定(2^k)可变
页表(较长)段表(较短)
物理地址形成帧号|偏移(位拼接)基址 + 偏移(加法)
对用户不自然自然
碎片内部碎片(平均半页)外部碎片
共享保护困难容易
内存扩充不支持不支持