首先声明,这不是标准答案,只是本人的见解与想法;其次,这不是第九章的作业题,而是磁盘管理那一章的;最后,我写这个博客更多是为了记录,类似于笔记,以及希望大牛能帮忙点出错误。
题目一:
一个磁盘有 5000 个柱面(0 4999)。假定磁头当前在 143 号柱面上,前一个请求是125 号柱面。对于如下请求:86, 458, 920, 1785, 948, 1509, 122, 4210, 130请按照下列算法给出为满足上述请求从当前磁头位置开始移动的总柱面数。
• FCFS
• SSTF
• SCAN
• LOOK
• C-SCAN
• C-LOOK
解答:
FCFS,即先进先出调度,可画出如下线路图:
移动的总柱面数是:143-86+458-86+920-458+1785-920+1785-948+1509-948+1590-122+4210-130=12709
SSTF,即最短寻道时间调度,假定请求都是同时给的,可画出如下线路图:
移动的总柱面数是:143-130+130-122+122-86+458-86+920-458+948-920+1509-948+1785-1509+4210-1785=4181
约为FCFS的1/3,证明书上的内容正确
SCAN,即电梯调度,由上一个请求为125,假定扫描方向此时为从小向大扫描,而所有的请求都是同时到达的,可画出如下线路图
移动的总柱面数是:458-143+920-458+948-920+1509-948+1785-1509+4210-1785+5000-4210+5000-130+130-122+122-86 =9771
注意,5000是因为要移动到最远端!!!
LOOK,即不会运动到最远端的SCAN,可画出如下线路图:
移动的总柱面数是:458-143+920-458+948-920+1509-948+1785-1509+4210-1785+4210-130+130-122+122-86 =8191
C-SCAN,即跳转类型的磁头移动,假设方向仍旧为从小向大,且跳转所跨越的柱面仍计算在内,可画出如下线路图:
移动的总柱面数是:458-143+920-458+948-920+1509-948+1785-1509+4210-1785+5000-4210+5000+86+122-86+130-122 =9987
虽然看起来很多,但因为跳转非常快,所以假如跳转所需要的柱面忽略,那么就是9987-5000=4987,已经接近了SSTF
C-LOOK,即跳转类型的磁头移动,假设方向仍旧为从小向大,且跳转所跨越的柱面仍计算在内,并且不会到5000,可画出如下线路图:
移动的总柱面数是:458-143+920-458+948-920+1509-948+1785-1509+4210-1785+4210+86+122-86+130-122 =8407
加4210是因为需要跳转到0
虽然看起来很多,但因为跳转非常快,所以假如跳转所需要的柱面忽略,那么就是8407-4210=4197,已经基本上和SSTF一致
题目二:
试说明为何 SSTF 算法在磁盘调度上不是最优算法。
解答:
SSTF是一个贪心算法,或者说局部最优算法,每次将会找到距离最近的,拥有最短寻道时间的请求去执行。但是,这种算法对于磁头的初始位置是有要求的,
如果磁头的初始位置小于最小的请求或者大于最大的请求,那么就可以在线路图上得到一条斜率恒小于0或恒大于0的直线,此时的结果是最优结果。
如果磁头的初始位置在最小和最大的请求之间,那么,必定会存在两个点,该两点之间的斜率与其余点之间的斜率正负相反,即出现“转折”的情况,此时所花费的寻道时间必定大于最短寻道时间。
即便,我们将磁道设置为环形,即物理层面的环形链表,SSTF也不一定是最优算法。因为需要考虑到请求到达的时间。