一、磁盘调度部分
在磁盘调度中,当进程请求读写磁盘时,操作系统需依次进行移臂调度和旋转调度,以高效定位数据所在的物理位置。
移臂调度(最短寻道时间优先,SSTF)
当前磁头位于 18 号柱面。根据最短寻道时间优先原则,系统总是选择距离当前磁头位置最近的柱面进行访问。给定请求序列,响应顺序为:
20 → 15 → 8 → 6 → 40- 从 18 出发,最近的是 20(距离 2),然后是 15(距离 5)
- 接着是 8(距离 7),再是 6(距离 2)
- 最后是较远的 40(距离 34)
此策略减少平均寻道时间,但可能导致某些请求“饥饿”。
旋转调度
在完成移臂至目标柱面后,等待目标扇区旋转至磁头下方。- 不同磁道不同扇区:优先处理先到达磁头位置的扇区。例如,在 20 号柱面,若扇区②比③先到,则顺序为②→③。
- 不同磁道相同扇区:多个请求指向同一扇区号时,可任意选择处理顺序。如 15 号柱面请求涉及扇区⑤、①、⑧,因它们处于相同扇区位置,响应顺序可以是⑤→①→⑧ 或 ⑧→①→⑤等,不影响性能。
二、文件管理部分
文件系统的作用
- 屏蔽外存存储细节(如块大小、分布、碎片等),简化用户对数据的访问。
- 支持多道程序并发环境下对文件的安全共享与独立管理。
- 实现“按名存取”,即用户只需提供文件名即可访问内容,无需关心其物理存放位置。
文件的定义
- 文件是具有符号名的一组逻辑上相关的数据集合,如源代码、目标程序、文本、图像等。
- 基本信息单位可以是字符(流式文件)或记录(记录式文件)。
- 包含两个部分:
- 文件体:实际的数据内容;
- 文件说明:元数据信息,包括文件名、类型、长度、创建者、权限、时间戳等。
文件的核心特点
- 是一种抽象机制,将复杂的硬件操作封装起来,提供统一接口供用户使用。
- 独立于任何运行中的进程而存在,即使创建它的程序结束,文件仍可被其他程序访问。
- 通过文件名进行唯一标识和管理,实现持久化和共享。
最短寻道时间优先(SSTF)算法虽然能有效减少平均寻道时间,提高磁盘I/O效率,但存在请求饥饿问题:即某些远离当前磁头位置的请求可能长期得不到服务,因为系统总是优先响应距离更近的新请求。
改进方法:使用 SCAN 或 C-SCAN 算法
SCAN 算法(电梯算法)
- 磁头沿一个方向移动,依次响应路径上的所有请求;
- 到达磁盘一端后,反向移动并继续处理沿途请求;
- 类似电梯运行方式,确保每个请求最终都会被服务。
- 优点:避免饥饿,公平性好;
- 缺点:靠近边缘柱面的请求可能延迟较高。
C-SCAN 算法(循环扫描)
- 磁头单向移动,从低号柱面扫到高号柱面,处理途经请求;
- 到达末端后,立即返回起点(不处理返回途中请求),形成循环;
- 提供更均匀的等待时间,适合负载均衡场景。
FSCAN 算法(分步扫描)
- 将请求队列分为两组:当前扫描周期处理的一组和新到达的一组;
- 当前周期内只处理第一组,防止新请求“插队”导致旧请求饥饿。
N-step-SCAN 算法
- 将请求按固定数量或时间窗口分批;
- 每批请求在一次扫描中全部处理,消除突发请求对原有请求的影响。
添加老化机制(Aging)
- 为每个等待请求设置优先级计数器;
- 随着等待时间增加,逐步提升其优先级;
- 当优先级超过某个阈值时,强制插入调度队列前端,确保及时响应。
综上所述,通过采用 SCAN、C-SCAN 等结构性改进算法,或引入老化机制等动态调整策略,可以有效克服 SSTF 的饥饿缺陷,在保持高效性的同时增强公平性。