《操作系统导论》第37章课后答案

早点写完,免得夜长梦多

本作业使用 disk.py 来帮助读者熟悉现代磁盘的工作原理。 它有很多不同的选项,与大多数其他模拟不同,它有图形动画, 可以准确显示磁盘运行时发生的情况。详情请参阅 README 文件。

37.1

问题描述

计算以下几组请求的寻道、旋转和传输时间: -a 0,-a 6,-a 30,-a 7,30,8, 最后计算 -a 10,11,12,13

解答

-a 0

首先运行命令python2 disk.py -a 0 -G

如果出现以下提示,首先执行命令 sudo apt-get install python-tk
在这里插入图片描述
运行结果为:
在这里插入图片描述
可以看到,指针在6处 ,我们定义的是-a 0, 所以目标是同磁道的0处,它们在同一个磁道,所以寻道时间为0。接着按s查看动画:
在这里插入图片描述
可以看到,目标是0扇区 ,但是具体整扇区的位置是数字11和0中间,并且由旋转速度为1°/s可以得到旋转时间为30*5+30/2=165。然后0号扇区的大小为30度,所以传输时间为30s。所以总时间为165+30=195
在这里插入图片描述
可以看到总时间确实是195

-a 6

运行命令python2 disk.py -a 6 -G查看运行结果
在这里插入图片描述
这次,目标是6 ,开始扇区也是6,则寻道时间为0。但是由上一小问知道它会到达6和7的中间,从6开始要多旋转一周,即旋转时间为30*11+30/2=345,传输时间同样为30,则总时间为375。按s查看运行结果:
在这里插入图片描述
在这里插入图片描述

-a 30

这次目标是30,不在一个磁道了。 运行命令 python2 disk.py -a 30 -G 查看运行结果:
在这里插入图片描述
这次目标是30,不在一个磁道了。 所以首先会从最外层磁道寻道到最内层。按s查看动画:
在这里插入图片描述
可以看到寻道时间为80,则跨一个磁道的时间就为40。 内磁道后,已经转了80度,所以旋转时间是360-15-80=265,传输时间仍为30 。所以总时间为265+80+30=375
在这里插入图片描述

-a 7,30,8

所以顺序是7->30->8。直接开始计算。从6到7:寻道0,旋转15(半扇区就到运行命令 python2 disk.py -a 7,30,8 -G 查看运行结果
在这里插入图片描述
策略是FIFO,所以顺序是7->30->8。直接开始计算。

  • 从6到7:寻道0,旋转15(半扇区就到了),运输30。

  • 从7到30:寻道40*2=80,旋转的话,7与31是对齐的,所以7的结尾与30的开头之间的角度是360-30-15-15=300,再减去寻道时候转的角度,所以旋转时间应该是300-80=220,然后传输30。

  • 从30到8∶寻道80,旋转的话,本来只要30(30的尾和8的头只差了一个扇区的度数),但要再加一圈,所以是30+360-80=310,传输30。

按s查看运行结果:
在这里插入图片描述

-a 10,11,12,13

运行指令python2 disk.py -a 10,11,12,13 -G 查看运行结果:
在这里插入图片描述

  • 从6到10、11:寻道0,旋转30*3+15=105,传输302=60。
  • 从11到12、13: 注意:11到12不在一个磁道,寻道之后就得绕一圈。所以寻道40,旋转0+360-40=320,传输30*2=60。

总时间为105+60+40+320+60=585

按s查看动画:
在这里插入图片描述

37.2

问题描述

执行上述相同请求,但将寻道速率更改为不同值:-S 2,-S 4,-S 8, -S 10,-S 40, -S 0.1 时间如何变化?

解答

更换寻道速率后,对于-a 0-a 6这两个寻道时间为0的没有影响

-a 30的,开始的位置(扇区6的中间)与扇区30的开头相差360-15=345度,所以只要寻道时间(40 * 2/S)内,旋转角度不超过345度的就只是减少了寻道节省的时间而已,包括了-S 2,-S 4,-S 8,-S 10,-S 40;而-S 0.1的话,寻道时间为40 * 2/0.1=800,所以要多绕2圈,旋转时间为345+360+360-800=265,传输时间30,如下图︰
在这里插入图片描述

-a 7,30,8的和-a 10,11,12,13的,具体时间看下表

与-S 1对比-S 2-S 4-S 8-S 10-S 40-S 0.1
-a 0完全不变完全不变完全不变完全不变完全不变完全不变
-a 6完全不变完全不变完全不变完全不变完全不变完全不变
-a 30寻道时间减少寻道时间减少寻道时间减少寻道时间减少寻道时间减少寻道时间增加,多旋转2圈
-a 7,30,8寻道时间减少寻道时间减少,少旋转1圈寻道时间减少,少旋转1圈寻道时间减少,少旋转1圈寻道时间减少,少旋转1圈寻道时间增加,多旋转4圈
-a 10,11,12,13寻道时间减少寻道时间减少寻道时间减少寻道时间减少寻道时间减少寻道时间增加,多旋转1圈

37.3

问题描述

同样的请求,但改变旋转速率:-R 0.1,-R 0.5,-R 0.01。时间如何变化?

解答

寻道时间不影响。旋转时间有的线性增加,而有的会因为寻道相对快了而少绕圈。传输时间线性增加(传输时间=30/R)。

例如-a 7,30,8中从30到8的,旋转速度为0.1时,寻道完后还未进入8的扇区,所以只需要转30度,不需要多绕一圈,这一步旋转时间为30/0.1=300比原来的(30+360)/1=390还少。

其他的,只是旋转时间增加,对圈数不影响。

具体时间如下表:

与-R 1对比-R 0.1-R 0.5-R 0.01
-a 0旋转时间增加旋转时间增加旋转时间增加
-a 6旋转时间增加旋转时间增加旋转时间增加
-a 30旋转时间增加旋转时间增加旋转时间增加
-a 7,30,8少旋转一圈,旋转时间减少只是旋转时间增加少旋转一圈,但旋转时间增多
-a 10,11,12,13旋转时间增加旋转时间增加旋转时间增加

37.4

问题描述

你可能已经注意到,对于一些请求流,一些策略比 FIFO 更好。例如,对于请求流 -a 7,30,8 处理请求的顺序是什么?现在在相同的工作负载上运行最短寻道时间优先 (SSTF)调度程序(-p SSTF)。每个请求服务需要多长时间(寻道、旋转、传输)?

解答

对于请求流-a 7,30,8,FIFO处理请求的顺序为7,30,8,会白白多了一次寻道和一圈的旋转;而最短寻道优先策略SSTF、电梯算法SCAN、最短定位时间优先SPTF的顺序都会是7,8,30。

由第一题我们知道使用后FIFO策略的时间为795

而使用 SSTF 策略后的执行过程:

  • 6到7:寻道0,旋转15,传输30
  • 7到8:寻道0,旋转0,传输30
  • 8到30:寻道80,旋转360-3*30-80=190,传输时间30

总时间为15+30+30+80+190+30=375

运行命令 python2 disk.py -a 7,30,8 -p SSTF -G 查看运行结果:

在这里插入图片描述
总时间确实为375

37.5

问题描述

现在做同样的事情,但使用最短的访问时间优先(SATF)调度程序(-SATF)。 它是否对 -a 7,30,8 请求有影响? 找到 SATF 明显优于 SSTF 的一组请求。出现显著差异的条件是什么?

解答

用最短定位时间优先SATF对-a 7,30,8进行处理,无论是从旋转或是寻道的角度讲,顺序都必定是7、8、30是最优的。所以没有改变顺序:

运行命令python2 disk.py -a 7,30,8 -p SSTF -G查看运行结果
在这里插入图片描述
可以看到时间确实没变。

举个最短定位时间优先比最短寻道时间优先性能优异很多的例子,例如: -a 7,34,13,6

因为最短寻道时间优先只考虑寻道时间,也就是只会先完成最近磁道,那么找一个极端的例子,如下图,如果是SATF的话顺序为6->7->13->6->34,如果是SSTF的话顺序为6->7->6->13->34。用SSTF的话会在最外层多转一圈,消耗很多时间

图一为使用SATF,图二为使用SSTF,可以看到,确实明显减少了很多时间
在这里插入图片描述
在这里插入图片描述
由此可得,当寻道时间远远小于旋转时间的情况,SATF性能就会显著优于SSTF

37.6

问题描述

你可能已经注意到,该磁盘没有特别好地处理请求流 -a 10,11,12,13。这是为什么? 你可以引入一个磁道偏斜来解决这个问题(-o skew,其中 skew 是一个非负整数)?考 虑到默认寻道速率,偏斜应该是多少,才能尽量减少这一组请求的总时间?对于不同的寻道速率(例如,-S 2,-S 4)呢?一般来说,考虑到寻道速率和扇区布局信息,你能否写出 一个公式来计算偏斜?

解答

不论使用FIFO、SSTF、SATF中的哪个调度策略,对于请求流-a 10,11,12,13,请求的顺序都是10、11、12、13。因为如下图,扇区11的尾与扇区12的头是一个角度上的,必须要绕一圈才能开始对扇区12的传输,这是磁盘扇区位置设计的弊端。
在这里插入图片描述
因此需要磁道偏斜

偏斜量为0:

为0时为默认情况,其时间在第一问已经求出,为585

偏斜量为1

运行命令python2 disk.py -a 10,11,12,13 -o 1 -G 查看运行结果
在这里插入图片描述
传输完11之后,寻道到了中间磁道,还是错过了12扇区的开始位置

偏斜量为2:

运行命令python2 disk.py -a 10,11,12,13 -o 2 -G查看运行结果
在这里插入图片描述
传输完11之后,寻道到了中间磁道,刚好就到12扇区的开始位置。

偏斜量再大,在速度不变的情况下,只会增加寻道后等待12扇区开始位置的旋转时间。

如果寻道时间加快,如 -S 2或者 -S 4 ,那么偏斜量为1反而是最优的,因为这时候寻道时间40/S小于30,所以刚好能碰到12开始的位置。

也就是,跨越相邻磁道的寻道时间约接近(小于)旋转过一个扇区的旋转时间,效果越好。因此,如果寻道速度为V,寻道距离为D,旋转角速度为W,每扇区区域跨越的角度为A,偏斜为O,那么:D / V < A*O / W ,所以偏斜量O > DW / VA,并取满足该条件下的最小的整数。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值