# 4.4 基本分段存储管理 ## 一、分段存储的基本概念 ### 1.1 什么是分段 **分段**:按照程序的逻辑结构,将程序划分为若干个段(Segment),每个段有独立的地址空间,以段为单位进行分配。 ### 1.2 段的划分 **段的类型**: - 代码段:程序代码 - 数据段:全局变量、静态变量 - 栈段:局部变量、函数参数 - 堆段:动态分配内存 **段的特点**: - 每个段有独立的逻辑意义 - 段的大小不固定 - 段内地址从0开始 ### 1.3 地址结构 **逻辑地址**: ``` +----------------+----------------+ | 段号 S | 段内偏移 d | +----------------+----------------+ ``` **地址转换**: - 逻辑地址 = (段号, 段内偏移) - 物理地址 = 段基址 + 段内偏移 --- ## 二、段表 ### 2.1 段表的作用 **段表**:记录每个段的基址和长度。 **段表项**: - 段基址:该段在内存中的起始地址 - 段长:该段的长度 - 状态位:该段是否在内存 - 访问权限:读/写/执行 ### 2.2 段表的组织 **段表在内存中**: - 每个进程有一个段表 - 段表驻留在内存中 - 段表基址寄存器指向段表起始地址 ### 2.3 地址转换过程 1. 根据逻辑地址获取段号和段内偏移 2. 检查段号是否越界 3. 根据段表基址和段号找到段表项 4. 检查段内偏移是否越界 5. 物理地址 = 段基址 + 段内偏移 --- ## 三、分页与分段的比较 | 特性 | 分页 | 分段 | |-----|------|------| | 划分单位 | 固定大小的页 | 可变大小的段 | | 划分依据 | 物理划分 | 逻辑划分 | | 用户可见性 | 不可见 | 可见 | | 地址空间 | 一维 | 二维 | | 内部碎片 | 有 | 无 | | 外部碎片 | 无 | 有 | | 共享 | 较难 | 容易 | | 保护 | 较难 | 容易 | | 大小 | 固定 | 可变 | --- ## 四、段的共享与保护 ### 4.1 段的共享 **共享方式**: - 多个进程的段表指向相同的物理段 - 代码段可以共享 **共享条件**: - 只读段 - 可重入代码 ### 4.2 段的保护 **越界保护**: - 检查段号是否越界 - 检查段内偏移是否越界 **访问权限保护**: - 读权限 - 写权限 - 执行权限 **环保护**: - 内核环:最高权限 - 用户环:较低权限 - 只能向内环调用 --- ## 五、考研重点 1. **分段的基本概念**:段、段号、段内偏移 2. **段表**:段表项的内容(基址、长度) 3. **地址转换过程**:段号检查、段长检查、物理地址计算 4. **分页与分段的比较**:划分单位、碎片、共享、保护 5. **段的共享与保护**:共享条件、越界保护、权限保护 --- *下一节:4.5 段页式存储管理*