操作系统——磁盘调度
一、磁盘调度算法
\(1.\) \(FCFS\) 先来先服务
\((1)\)方法
根据进程请求访问磁盘的先后次序进行调度
\((2)\)优点
公平、简单,且对每个进程的请求都能依次得到处理,不会出现某一个进程的请求长期得不到满足的情况。
\((3)\)缺点
由于未对寻道进行优化,平均寻道时间可能较长。
\(2.\) \(SSTF\) 最短寻道时间优先
\((1)\)方法
访问的磁道,与当前磁头所在的磁道距离最近
\((2)\)优点
每次寻道时间最短
\(SSTF\)调度算法较\(FCFS\)调度算法有更好的寻道性能。
\((3)\)缺点
不能保证平均寻道时间最短
\(SSTF\)调度算法的实质是基于优先级进行调度,因此可能导致优先级低的进程出现”饥饿“现象。
\(3.\)\(SCAN\) 扫描算法(电梯调度算法)
\((1)\)方法
磁头在一个方向上移动直到达到最远的请求,然后改变方向
当磁头正在自里向外移动时,先考虑此方向上是否还有要访问的对象。如果有,则继续按照此方向移动;如果没有,则更改方向
\((2)\)优点
寻道性能较好,可避免”饥饿“现象
\((3)\)缺点
不利于原理磁头一段的访问请求
当磁头刚自里向外移动而越过某一磁道后,此时,该进程必须等待,待磁头继续自里向外,然后再自外向里扫描完处于外面的额所有要访问的磁道后,才处理该进程的请求,这致使该进程的请求被打打地延迟。
\(4.\)\(CSCAN\) 循环调度算法
\((1)\)方法
消除了对两端磁道请求的不公平
规定磁头始终朝一个方向移动,即从磁盘的内部向外或从外部向内部。当磁头到达磁盘的一端(最内圈或最外圈)时,它不会立即反转方向,而是跳转到另一端,并继续在同一方向上移动,形成环形路径
\((2)\)优点
-
提高效率
由于磁头不会频繁改变方向,\(CSCAN\)算法可以减少磁头的停顿和反转次数,提高磁盘操作的效率。
-
避免饥饿现象
由于磁头不会频繁改变方向,\(CSCAN\)算法可以减少磁头的停顿和反转次数,提高磁盘操作的效率。
-
请求公平性
\(CSCAN\)算法为磁盘上所有位置的请求提供了相对公平的服务机会,减少了某些请求因位置不佳而受到的不利影响。
\((3)\)缺点
-
磁头移动距离增加
由于磁头在到达一端后需要跳转到另一端继续移动,这可能导致磁头的总移动距离增加。
-
响应时间可能较长
对于靠近磁头当前移动方向末端的请求,可能需要等待较长时间才能得到服务,因为磁头需要完成当前方向上的所有请求后才能跳转并返回。
二、考研真题
\(1.\)
题目:
假设有11个进程先后提出磁盘\(I/O\)请求,当前磁头正在100号磁道处,并预向磁道序号增加的方向移动。请求队列的顺序为\(30、145、120、78、82、140、20、42、165、55、65\),分别用\(FCFS\)调度算法和\(SCAN\)调度算法完成上述诉求,写出磁道访问顺序和每次磁头移动的距离,并计算平均移动磁道数。
解答:
\((1)\) \(FCFS\)调度算法
从100号磁道开始
被访问的下一个磁道号 | 移动距离(磁道数) |
---|---|
30 | 70 |
145 | 115 |
120 | 25 |
78 | 42 |
82 | 4 |
140 | 58 |
20 | 120 |
42 | 22 |
165 | 123 |
55 | 110 |
65 | 10 |
平均寻道长度:\((70+115+25+42+4+58+120+22+123+110+10)/11=63.55\)
\((2)\)\(SCAN\)调度算法
被访问的下一个磁道号 | 移动距离(磁道数) |
---|---|
120 | 20 |
140 | 20 |
145 | 5 |
165 | 20 |
82 | 83 |
78 | 4 |
65 | 13 |
55 | 10 |
42 | 13 |
30 | 12 |
20 | 10 |
平均寻道长度:\((20+20+5+20+83+4+13+10+13+12+10)/11=19.1\)
\(2.\)
题目:
磁盘请求服务队列中要访问的磁道分别为\(38、6、37、100、14、124、65、67\),磁头上次访问了20号磁道,当前处于30号磁道上,试采用\(FCFS、SSTF\)和\(SCAN\)调度算法,分别计算磁头移动的磁道数。
解答:
\((1)\) \(FCFS\)调度算法
从30号磁道开始
被访问的下一个磁道号 | 移动距离(磁道数) |
---|---|
38 | 8 |
6 | 32 |
37 | 31 |
100 | 63 |
14 | 86 |
124 | 110 |
65 | 59 |
67 | 2 |
移动磁道数:\(8+32+31+63+86+110+59+2=391\)
\((2)\) \(SSTF\)调度算法
从30号磁道开始
被访问的下一个磁道号 | 移动距离(磁道数) |
---|---|
37 | 7 |
38 | 1 |
14 | 24 |
6 | 8 |
65 | 59 |
67 | 2 |
100 | 33 |
124 | 24 |
移动的磁道数:\(7+1+24+8+59+2+33+24=158\)
\((3)\)\(SCAN\) 调度算法
磁头上次访问了20号磁道,当前处于30号磁道上,可知当前磁头的方向
被访问的下一个磁道号 | 移动距离(磁道数) |
---|---|
37 | 7 |
38 | 1 |
65 | 27 |
67 | 2 |
100 | 33 |
124 | 24 |
14 | 110 |
6 | 8 |
移动的磁道数:\(7+1+27+2+33+24+110+8=212\)