# 4.10 请求分段管理方式 ## 一、请求分段的基本原理 ### 1.1 什么是请求分段 **请求分段**:在分段存储管理基础上,增加请求调段和段置换功能。 **特点**: - 程序运行时,只需装入部分段 - 需要访问的段不在内存时,产生缺段中断 - 将所需段调入内存 ### 1.2 与请求分页的区别 | 特性 | 请求分页 | 请求分段 | |-----|---------|---------| | 单位 | 页(固定大小) | 段(可变大小) | | 分配 | 页框 | 连续内存区 | | 碎片 | 内部碎片 | 外部碎片 | | 置换 | 页面置换 | 段置换 | | 共享 | 较难 | 容易 | | 保护 | 较难 | 容易 | --- ## 二、段表机制 ### 2.1 段表项内容 | 字段 | 说明 | |-----|------| | 段基址 | 该段在内存中的起始地址 | | 段长 | 该段的长度 | | 状态位 | 该段是否在内存中 | | 访问位 | 该段是否被访问过 | | 修改位 | 该段是否被修改过 | | 访问权限 | 读/写/执行 | | 外存地址 | 该段在外存的地址 | ### 2.2 段表的组织 - 每个进程有一个段表 - 段表驻留在内存中 - 段表基址寄存器指向段表起始地址 --- ## 三、缺段中断 ### 3.1 什么是缺段中断 **缺段中断**:访问的段不在内存时产生的中断。 ### 3.2 缺段中断的处理过程 1. **保护CPU现场** 2. **检查内存**: - 如果有足够大的连续空间,直接调入 - 如果没有,进行段置换 3. **段置换**(如果需要): - 选择牺牲段 - 如果修改位为1,写回外存 - 释放内存空间 4. **段调入**: - 从外存读入段 - 存入内存 5. **修改段表**: - 设置段基址 - 设置状态位为1 - 清除访问位和修改位 6. **恢复CPU现场**,重新执行被中断的指令 ### 3.3 缺段中断与缺页中断的区别 | 特性 | 缺页中断 | 缺段中断 | |-----|---------|---------| | 单位 | 页 | 段 | | 大小 | 固定 | 可变 | | 内存要求 | 页框 | 连续空间 | | 处理复杂度 | 简单 | 复杂 | | 可能失败 | 少 | 多(内存碎片) | --- ## 四、段的共享与保护 ### 4.1 段的共享 **共享方式**: - 多个进程的段表指向相同的物理段 - 代码段可以共享 **共享条件**: - 只读段 - 可重入代码 ### 4.2 段的保护 **越界保护**: - 检查段号是否越界 - 检查段内偏移是否越界 **访问权限保护**: - 读权限 - 写权限 - 执行权限 **环保护**: - 内核环:最高权限 - 用户环:较低权限 - 只能向内环调用 --- ## 五、段置换算法 ### 5.1 段置换的特点 - 段大小可变 - 需要连续内存空间 - 可能产生外部碎片 ### 5.2 段置换算法 **与页面置换类似**: - FIFO - LRU - Clock **额外考虑**: - 段大小 - 内存碎片 - 紧凑(Compaction) --- ## 六、考研重点 1. **请求分段的基本原理**:部分装入、请求调段 2. **段表项内容**:状态位、访问位、修改位、外存地址 3. **缺段中断**:处理过程、与缺页中断的区别 4. **段的共享与保护**:共享条件、保护方式 5. **段置换**:特点、算法 --- *第四章完,进入第五章:文件管理*