文件系统-性能优化-磁臂调度算法

简介: 操作系统 文件系统 性能优化 磁臂调度算法 先来先服务 FCFS (First Come First Served) 最短寻道时间优先 SSF (Shortest Seek First) 扫描算法(SCAN)/电梯算法 (Elevator algorithm) 单向扫描调度算法 (C-SCAN)N-Step-SCAN FSCAN 旋转调度

1. 概述

为什么需要磁臂调度算法?首先我们需要考虑读写磁盘块时间消耗。读写磁盘的时间主要由以下三个因素决定:

  1. 寻道时间

寻道时间主要是将磁盘臂移动到对应的柱面所需要的时间。

  1. 旋转延迟

磁臂等待对应的扇区移动到适当的柱面上所需要的时间。

  1. 传输时间

将磁盘块数据传输到内存区域所需的时间。

对于大多数磁盘而言,寻道时间与(旋转延迟和传输时间)相比,寻道时间远大于旋转延迟和传输时间之和,所以减少平均寻道时间可以充分的改善系统性能。

2. 调度目标

磁臂调度算法主要目标是为了降低平均磁盘服务时间,达到公平、高效的目标。

  1. 公平

一个I/O请求在有限时间内满足。

  1. 高效

减少设备机械运动带来的时间开销。

3. 调度算法

  1. 先来先服务 FCFS (First Come First Served)
  2. 最短寻道时间优先 SSF (Shortest Seek First)
  3. 扫描算法(SCAN)/电梯算法 (Elevator algorithm)
  4. 单向扫描调度算法 (C-SCAN)
  5. N-Step-SCAN
  6. FSCAN
  7. 旋转调度
  8. LOOK
  9. C-LOOK

3.1 先来先服务 (FCFS)

按照访问磁盘的请求到达的先后次序服务。

优点

  • 简单
  • 公平

缺点

  • 效率不高

举例:
磁盘访问序列:
98,183,37,122,14,124,65,67
读写头起始位置:53,那么磁臂移动的轨迹为:
1.png

3.2 最短寻道时间优先(SSF)

总是处理与磁头距离最近的请求以使寻道时间最小化。

优点

  • 改善了磁盘的平均服务时间。

缺点

  • 饥饿,可能导致一些访问请求得不到服务,因为可能会一直有距离磁头最近的请求达到。

举例:
磁盘访问序列:
98,183,37,122,14,124,65,67
读写头起始位置:53,
那么磁臂移动的轨迹为:
2.png

3.3 扫描算法(SCAN)

扫描算法又称为电梯算法(Elevator algorithm),算法模拟电梯调度。
当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。

优点

  • 理解简单
  • 无饥饿
  • 性能比先来先服务高

缺点

  • 实现较为复杂
  • 较为不公平,因为可能先来的请求会可能是磁头刚刚扫描过的扇区

举例:
假设磁盘访问序列:
磁盘访问序列:
98,183,37,122,14,124,65,67
读写头起始位置:53,
那么磁臂移动的轨迹为:
3.png

3.4 单向扫描调度算法 (C-SCAN)

单向扫描算法(SCAN算法变种):

  • 总是从0号柱面开始向里扫描
  • 按柱面(磁道)位置选择访问者
  • 移动臂到达最后一个柱面后,立即带动读写磁头快速返回到0号柱面
  • 返回时不为任何的等待访问者服务
  • 返回后可再次进行扫描

优点:

  • 磁盘负载中等情况下工作良好
  • 提供了良好的响应时间和统一的等待时间

举例:

输入:
请求序列 = {176, 79, 34, 60, 92, 11, 41, 114}
读写头出事位置 = 50
方向 = 右侧(磁头从左向右移动)

磁头移动轨迹:
4.png

3.5 N-Step-SCAN

N-Step-SCAN算法(SCAN算法变种):

  • 把磁盘请求队列分成长度为N的子队列,每一次用SCAN算法处理一个子队列
  • 在处理某一个队列时,新请求添加到其他子队列中  如果最后剩下的请求数小于N,则它们全都将在下一次扫描时处理
  • N值比较大时,其性能接近SCAN;当N=1时,即FIFO

3.6 FSCAN

FSCAN算法(SCAN算法变种):

  • 使用两个子队列
  • 扫描开始时,所有请求都在一个队列中,而另一个队列为空 
  • 扫描过程中,所有新到的请求都放入另一个队列中
  • 对新请求的服务延迟到处理完所有老请求之后

3.7 旋转调度

旋转调度算法:
旋转调度:根据延迟时间来决定执行次序的调度
三种情况:

  1. 若干等待访问者请求访问同一磁头上的不同扇区
  2. 若干等待访问者请求访问不同磁头上的不同编号的扇区
  3. 若干等待访问者请求访问不同磁头上具有相同的扇区

3.8 LOOK

LOOK调度算法是SCAN算法的增强版本。LOOK调度算法的寻道时间比FCFS、SSF、SCAN、C-SCAN的时间都短(FCFS->SRTF->SCAN->C-SCAN->LOOK)。LOOK调度算法服务访问请求和SCAN算法类似:磁头一直朝一个方向前进,如果在后续的请求中没有了这个方向的访问请求,那么磁头就朝相反的方向运动并处理相反反向的访问请求。SCAN算法的寻道时间长主要是因为SCAN算法中磁头一直朝向一个方向运动直到定位到磁盘的末尾,而LOOK算法则不会。

举例:
输入:
请求序列 = {176, 79, 34, 60, 92, 11, 41, 114}
磁头初始位置 = 50
方向 = 右侧 (磁头从左向右移动)

输出:
磁头初始位置: 50
总寻道次数 = 291
寻道序列:60 79 92 114 176 41 34 11

磁头移动轨迹:
5.png

3.9 C-LOOK

C-LOOK算法是SCAN算法和LOOK算法的增强版本。C-LOOK算法可以避免访问请求饥饿并统一服务所有访问请求。C-LOOK算法也是只在一个方向上服务所有请求,一个方向上所有的请求服务完成后磁头会移动到最远访问请求的位置重新进行一个方向上的访问请求服务。

举例:

输入: 请求序列 = {176, 79, 34, 60, 92, 11, 41, 114} 
磁头初始位置 = 50 
方向 = 右侧 (磁头从左向右移动) 
输出:磁头初始位置: 50 
总的寻道操作 = 156 
寻道序列: 60 79 92 114 176 11 34 41  
磁头移动轨迹:
6.png

4. 参考

  1. 现代操作系统(原书第四版)
  2. Coursera 操作系统原理 陈向群
  3. https://www.geeksforgeeks.org/scan-elevator-disk-scheduling-algorithms/
  4. https://www.geeksforgeeks.org/c-look-disk-scheduling-algorithm/?ref=lbp
  5. https://www.geeksforgeeks.org/scan-elevator-disk-scheduling-algorithms/?ref=lbp
  6. https://www.geeksforgeeks.org/c-scan-disk-scheduling-algorithm/?ref=lbp
  7. https://www.geeksforgeeks.org/look-disk-scheduling-algorithm/?ref=lbp
  8. https://www.geeksforgeeks.org/c-look-disk-scheduling-algorithm/?ref=lbp
  9. https://www.geeksforgeeks.org/n-step-scan-disk-scheduling/?ref=lbp
  10. https://www.geeksforgeeks.org/fscan-disk-scheduling-algorithm/?ref=lbp
目录
相关文章
|
8天前
|
算法 人机交互 调度
进程调度算法_轮转调度算法_优先级调度算法_多级反馈队列调度算法
轮转调度算法(RR)是一种常用且简单的调度方法,通过给每个进程分配一小段CPU运行时间来轮流执行。进程切换发生在当前进程完成或时间片用尽时。优先级调度算法则根据进程的紧迫性赋予不同优先级,高优先级进程优先执行,并分为抢占式和非抢占式。多队列调度算法通过设置多个具有不同优先级的就绪队列,采用多级反馈队列优先调度机制,以满足不同类型用户的需求,从而优化整体调度性能。
28 15
|
8天前
|
算法 调度
作业调度算法_先来先服务算法_短作业优先算法_高响应比优先算法
本文介绍了作业调度算法,包括先来先服务(FCFS)、短进程优先(SJF)和高响应比优先(HRRN)算法。通过分析进程的到达时间和所需CPU服务时间,计算进程的开始时间、完成时间、平均周转时间和平均带权周转时间,以评估不同算法的性能。FCFS适合长作业,SJF适合短作业,而HRRN则综合了两者的优点。
34 12
|
10天前
|
算法 调度 UED
深入理解操作系统之进程调度算法
【9月更文挑战第9天】在操作系统的心脏跳动中,进程调度扮演着关键角色,就如同指挥家控制交响乐的节奏。本文将通过浅显易懂的语言和生动的比喻,带领读者走进进程调度的世界,探索不同调度算法背后的哲学与实践,以及它们如何影响系统的性能和用户体验。从最简单的先来先服务到复杂的多级队列和反馈循环,我们将一同见证操作系统如何在众多任务中做出选择,确保系统的高效与公平。
|
3天前
|
算法 Linux 调度
探索现代操作系统的心脏:调度算法的演变与挑战
本文旨在深入探讨现代操作系统中至关重要的组成部分——进程调度算法。通过回顾其发展历程,分析当前主流技术,并展望未来趋势,揭示调度算法如何影响系统性能和用户体验。不同于常规摘要,本文将注重于技术的深度解析和背后的设计哲学,为专业开发者提供全面的视角。
14 0
|
3天前
|
人工智能 算法 物联网
探究操作系统的心脏:调度算法的进化与影响
本文深入探讨了操作系统中核心组件—调度算法的发展历程,重点分析了先来先服务、短作业优先、时间片轮转、优先级调度及多级反馈队列等经典调度算法。通过对比各算法的性能特点,如公平性、响应速度和系统吞吐量,阐述了它们在不同应用场景下的适用性和局限性。同时,文章展望了未来调度算法可能的改进方向,包括人工智能驱动的自学习调度策略、云计算环境下的分布式调度优化,以及物联网设备资源限制下的轻量级调度方案。此外,还强调了实时系统对高可靠性和严格时序保证的需求,以及在多核处理器普及背景下,线程级并行化对调度机制提出的新挑战。本文旨在为操作系统设计者、性能优化工程师及计算机科学领域的研究者和学生提供一个全面而深入的
13 0
|
29天前
|
DataWorks 算法 调度
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
26 1
|
20天前
|
存储 算法 调度
深入理解操作系统:进程调度的算法与实现
【8月更文挑战第31天】在操作系统的核心,进程调度扮演着关键角色,它决定了哪个进程将获得CPU的使用权。本文不仅剖析了进程调度的重要性和基本概念,还通过实际代码示例,展示了如何实现一个简单的调度算法。我们将从理论到实践,一步步构建起对进程调度的理解,让读者能够把握操作系统中这一复杂而精妙的部分。
|
20天前
|
算法 调度 开发者
深入理解操作系统:进程管理与调度算法
在数字时代的心脏,操作系统扮演着至关重要的角色。它不仅是计算机硬件与软件之间的桥梁,更是确保多任务高效运行的守护者。本文将带你一探操作系统中进程管理的奥秘,并通过实际代码示例深入解析进程调度算法。无论你是编程新手还是资深开发者,了解这些基础概念都将有助于你更好地理解计算机工作原理,并提升你对系统性能调优的认识。准备好,让我们一起揭开操作系统的神秘面纱!【8月更文挑战第31天】
|
20天前
|
算法 调度
探索操作系统的心脏:进程调度算法揭秘
【8月更文挑战第31天】本文将带领读者深入理解操作系统中至关重要的一环——进程调度。通过浅显易懂的语言和逐步深入的内容安排,我们将从基础概念入手,探讨进程调度的目的和挑战,进而分析几种常见的调度算法。文中不仅提供了丰富的代码示例,还设计了互动问题,鼓励读者思考并应用所学知识。让我们一起揭开操作系统进程调度的神秘面纱,看看它是如何在幕后支撑着我们日常使用的电脑和移动设备的顺畅运行。
|
1月前
|
存储 算法 调度
基于和声搜索算法(Harmony Search,HS)的机器设备工作最优调度方案求解matlab仿真
通过和声搜索算法(HS)实现多机器并行工作调度,以最小化任务完成时间。在MATLAB2022a环境下,不仅输出了工作调度甘特图,还展示了算法适应度值的收敛曲线。HS算法模拟音乐家即兴创作过程,随机生成初始解(和声库),并通过选择、微调生成新解,不断迭代直至获得最优调度方案。参数包括和声库大小、记忆考虑率、音调微调率及带宽。编码策略将任务与设备分配映射为和声,目标是最小化完成时间,同时确保满足各种约束条件。