磁盘调度算法的实现与分析

设计内容

编程序实现下述磁盘调度算法,并求出每种算法的平均移动磁道数,并分析结果:

①先来先服务算法(FCFS)

②最短寻道时间优先算法(SSTF)

③扫描算法(SCAN)  

 ④循环扫描算法(C-SCAN)

设计目的

使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。

设计原理

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。[1]

①先来先服务算法FCFS

算法思想:根据进程请求访问磁盘的先后顺序进行调度。

假设磁头的初始位置是30号磁道,有多个进程先后陆续地请求访问50,70,60,80,110,20号磁道。

按照先来先服务算法规则,按照请求到达的顺序,磁头需要依次移动到50,70,60,80,110,20号磁道。

②最短寻道时间优先算法SSTF

算法思想:优先处理的磁道是与当前磁头最近的磁道。可以保证每次寻道时间最短,但是不能保证总的寻道时间最短。(贪心算法)

假设磁头的初始位置是30号磁道,有多个进程先后陆续地请求访问50,70,60,80,110,20号磁道。

③扫描算法SCAN

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

假设磁头的初始位置是30号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续的访问50,70,60,80,110,20号磁道。

④循环扫描算法C-SCAN

算法思想:在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。

假设磁头的初始位置是30号磁道,有多个进程先后陆续的访问50,70,60,80,110,20号磁道。

实现代码

流程图

数据说明

选择算法与实验参数

在main函数中输入磁道数量与进程请求访问数量和实验次数,进入method函数。

初始化数组

先来先服务算法FCFS

最短寻道时间优先算法SSTF

扫描算法SCAN

循环扫描算法C-SCAN

实现结果

①数据分布较为分散时:

②数据分布较为密集时:

实现总结

综上实验,可以得知两组数据下四种算法的平均移动磁道数分别为:

算法

平均移动磁道数

FCFS

16449

SSTF

1030

SCAN

1946

C-SCAN

1990

表1 数据组1结果

算法

平均移动磁道数

FCFS

66469.1

SSTF

1737.08

SCAN

1842.65

C-SCAN

1989.41

表2 数据组2结果

在数据较为分散时:FCFS性能最差;SSTF明显优于SCAN;SCAN的性能与C-SCAN接近,而两者平均移动磁道数都接近两倍磁道数量。

在数据较为集中时:FCFS性能下降颇多;SSTF与SCAN、C-SCAN性能接近;而C-SCAN无论何种情况平均移动磁道数都接近两倍磁道数量。

由结果可以得知:

算法

优点

缺点

FCFS

公平、易实现

请求分散时,性能差

SSTF

性能优于FCFS

可能产生“饥饿”现象

SCAN

同时考虑距离与方向,可以避免“饥饿”现象

不利于远离磁头一端的请求访问

C-SCAN

在SCAN的基础上消除对两端磁道请求的不公平

仍然存在磁臂粘着

表3 算法比较

参考资料

[1]科普中国.磁盘调度算法.百度百科[OL].[2022-07-18].

https://baike.baidu.com/item/%E7%A3%81%E7%9B%98%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95/3505728?fr=aladdin

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现平衡二叉树的各种算法(如AVL树、红黑树等)可以应用在SCAU(South China Agricultural University,华南农业大学)的数据结构与算法课程中。这些算法的目标是确保二叉树的左右子树高度差不超过1,从而使树的高度保持相对较小的水平,提高插入、删除和查找等操作的效率。 一种常见的平衡二叉树算法是AVL树。实现AVL树的关键是通过旋转操作来保持树的平衡。在SCAU,可以使用多种编程语言(如C++、Java等)实现AVL树算法。插入新节点时,首先按照二叉查找树的方式找到合适的插入位置,然后通过不同的旋转操作调整树的平衡。具体的实现包括左旋、右旋、左右旋和右左旋等操作。 另一种常见的平衡二叉树算法是红黑树。SCAU可以使用编程语言(如C++、Java等)实现红黑树算法。红黑树通过使用辅助信息(即节点的颜色)来维持树的平衡。红黑树的插入操作包括节点的颜色变换和旋转操作。具体实现包括左旋、右旋、颜色变换等操作。 无论是AVL树还是红黑树,它们的实现都需要处理平衡调整,在插入或删除节点时通过旋转和颜色变换等操作来保持树的平衡。实现这些算法需要对平衡树的定义和性质有深入的理解,并具备编程技巧和数据结构基础。SCAU的学生在学习数据结构与算法课程时,可以通过理论学习和实践编程来掌握实现平衡二叉树的各种算法。除了课程的学习,还可以通过参考相关的教材、博客、论文等来加深对平衡二叉树算法实现的理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leviash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值