操作系统第三十七章作业(1-6题)

操作系统第三十七章作业(1-6题)

所有题目均为自己所作,答案仅供参考学习,禁止抄袭
觉得有用可以点个赞~如有不对欢迎评论指出:)

做题前的准备

安装python-tk包,执行命令:

sudo apt-get install python-tk

第一题

Compute the seek, rotation, and transfer times for the following sets of requests: -a 0, -a 6, -a 30, -a 7,30,8, and finally -a 10,11,12,13.

题目要求:计算以下几组请求的寻道、旋转、和传输时间。

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

磁盘逆时针旋转,从块6中央开始,到块11和块0正中间为止,共转过了165度,旋转时间为165;接着是传输,从块11和块0中央到块0和块1中央,共30度,传输时间为30。总用时为165+30=195。

查看结果:

计算正确。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。磁盘逆时针旋转将近一周,从块6中央开始,到块5和块6正中间为止,共转过了345度,旋转时间为345;接着是传输,从块5和块6中央到块6和块7中央,共30度,传输时间为30。总用时为345+30=375。

查看结果:

计算正确。

-a 30

寻道速率是1单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为80;在磁头寻道的同时,磁盘逆时针转过80度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转265度才可以开始传输块30内容,因此所用旋转时间为265;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为80+265+30=375。

查看结果:

计算正确。

-a 7,30,8

寻道速率是1单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,旋转过15度后开始传输,旋转时间为15;传输时磁盘从块6和块7中央转到块7和块8中央,转过30度,传输时间为30。因此对块7的请求共需要时间为15+30=45。

块30:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过80度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转220度才可以开始传输块30内容,因此所用旋转时间为220;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为80+220+30=330。

块8:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过80度,但要请求块8,旋转时间内磁盘旋转过的度数应该为390,所以还需旋转310度才可以开始传输块30内容,因此所用旋转时间为310;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为80+310+30=420。

寻道总用时:80+80=160

旋转总用时:15+220+310=545

传输总用时:30+30+30=90

全部总用时:160+545+90=795

查看结果:

计算正确。

-a 10,11,12,13

寻道速率是1单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,旋转过105度后开始传输,旋转时间为105;传输时磁盘从块9和块10中央转到块10和块11中央,转过30度,传输时间为30。因此对块10的请求共需要时间为105+30=145。

块11:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块10和块11中央转到块11和块12中央,转过30度,传输时间为30。因此对块11的请求共需要时间为30。

块12:

需跨过一个磁道,寻道时间为40;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转320度才可以开始传输块30内容,因此所用旋转时间为320;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为40+320+30=390。

块13:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块12和块13中央转到块13和块14中央,转过30度,传输时间为30。因此对块11的请求共需要时间为30。

寻道总用时:40

旋转总用时:105+320=425

传输总用时:30+30+30+30=120

全部总用时:40+425+120=585

查看结果:

计算正确。

第二题

Do the same requests above, but change the seek rate to different values: -S 2, -S 4, -S 8, -S 10, -S 40, -S 0.1. How do the times change?

题目要求:执行上述相同请求,但改变寻道速率。

-S 2

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为195。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为375。

-a 30

寻道速率是2单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为40;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转305度才可以开始传输块30内容,因此所用旋转时间为305;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为40+305+30=375。

查看结果:

计算正确。

-a 7,30,8

寻道速率是2单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,因此对块7的请求所需时间不变,为45。

块30:

需跨过两个磁道,寻道时间为40;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转260度才可以开始传输块30内容,因此所用旋转时间为260;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为40+260+30=330。

块8:

需跨过两个磁道,寻道时间为40;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块8,旋转时间内磁盘旋转过的度数应该为390,所以还需旋转350度才可以开始传输块30内容,因此所用旋转时间为350;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为40+350+30=420。

寻道总用时:40+40=80

旋转总用时:15+260+350=625

传输总用时:30+30+30=90

全部总用时:80+625+90=795

查看结果:

计算正确。

-a 10,11,12,13

寻道速率是2单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,因此对块10的请求所需时间不变,为145。

块11:

无需寻道,因此对块11的请求所需要时间为30。

块12:

需跨过一个磁道,寻道时间为20;在磁头寻道的同时,磁盘逆时针转过20度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转340度才可以开始传输块30内容,因此所用旋转时间为340;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为20+340+30=390。

块13:

无需寻道,因此对块13的请求所需要时间为30。

寻道总用时:20

旋转总用时:105+340=445

传输总用时:30+30+30+30=120

全部总用时:20+445+120=585

查看结果:

计算正确。

-S 4

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为195。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为375。

-a 30

寻道速率是4单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为20;在磁头寻道的同时,磁盘逆时针转过20度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转325度才可以开始传输块30内容,因此所用旋转时间为325;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为20+325+30=375。

查看结果:

计算正确。

-a 7,30,8

寻道速率是4单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,因此对块7的请求所需时间不变,为45。

块30:

需跨过两个磁道,寻道时间为20;在磁头寻道的同时,磁盘逆时针转过20度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转280度才可以开始传输块30内容,因此所用旋转时间为280;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为20+280+30=330。

块8:

需跨过两个磁道,寻道时间为20;在磁头寻道的同时,磁盘逆时针转过20度,但要请求块8,旋转时间内磁盘旋转过的度数应该为30,所以还需旋转10度才可以开始传输块30内容,因此所用旋转时间为10;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为20+10+30=60。

寻道总用时:20+20=40

旋转总用时:15+280+10=305

传输总用时:30+30+30=90

全部总用时:40+305+90=435

查看结果:

计算正确。

-a 10,11,12,13

寻道速率是4单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,因此对块10的请求所需时间不变,为145。

块11:

无需寻道,因此对块11的请求所需要时间为30。

块12:

需跨过一个磁道,寻道时间为10;在磁头寻道的同时,磁盘逆时针转过10度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转350度才可以开始传输块30内容,因此所用旋转时间为350;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为10+350+30=390。

块13:

无需寻道,因此对块13的请求所需要时间为30。

寻道总用时:10

旋转总用时:105+350=455

传输总用时:30+30+30+30=120

全部总用时:10+455+120=585

查看结果:

计算正确。

-S 8

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为195。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为375。

-a 30

寻道速率是8单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为10;在磁头寻道的同时,磁盘逆时针转过10度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转335度才可以开始传输块30内容,因此所用旋转时间为335;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为10+335+30=375。

查看结果:

计算正确。

-a 7,30,8

寻道速率是8单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,因此对块7的请求所需时间不变,为45。

块30:

需跨过两个磁道,寻道时间为10;在磁头寻道的同时,磁盘逆时针转过10度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转290度才可以开始传输块30内容,因此所用旋转时间为290;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为10+290+30=330。

块8:

需跨过两个磁道,寻道时间为10;在磁头寻道的同时,磁盘逆时针转过10度,但要请求块8,旋转时间内磁盘旋转过的度数应该为30,所以还需旋转20度才可以开始传输块30内容,因此所用旋转时间为20;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为10+20+30=60。

寻道总用时:10+10=20

旋转总用时:15+290+20=325

传输总用时:30+30+30=90

全部总用时:20+325+90=435

查看结果:

计算正确。

-a 10,11,12,13

寻道速率是8单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,因此对块10的请求所需时间不变,为145。

块11:

无需寻道,因此对块11的请求所需要时间为30。

块12:

需跨过一个磁道,寻道时间为5;在磁头寻道的同时,磁盘逆时针转过5度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转355度才可以开始传输块30内容,因此所用旋转时间为355;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为5+355+30=390。

块13:

无需寻道,因此对块13的请求所需要时间为30。

寻道总用时:5

旋转总用时:105+355=460

传输总用时:30+30+30+30=120

全部总用时:5+460+120=585

查看结果:

计算正确。

-S 10

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为195。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为375。

-a 30

寻道速率是10单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为8;在磁头寻道的同时,磁盘逆时针转过8度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转337度才可以开始传输块30内容,因此所用旋转时间为337;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为8+337+30=375。

查看结果:

计算正确。

-a 7,30,8

寻道速率是10单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,因此对块7的请求所需时间不变,为45。

块30:

需跨过两个磁道,寻道时间为8;在磁头寻道的同时,磁盘逆时针转过8度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转292度才可以开始传输块30内容,因此所用旋转时间为292;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为8+292+30=330。

块8:

需跨过两个磁道,寻道时间为8;在磁头寻道的同时,磁盘逆时针转过10度,但要请求块8,旋转时间内磁盘旋转过的度数应该为30,所以还需旋转22度才可以开始传输块30内容,因此所用旋转时间为22;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为8+22+30=60。

寻道总用时:8+8=16

旋转总用时:15+292+22=329

传输总用时:30+30+30=90

全部总用时:16+329+90=435

查看结果:

计算正确。

-a 10,11,12,13

寻道速率是10单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,因此对块10的请求所需时间不变,为145。

块11:

无需寻道,因此对块11的请求所需要时间为30。

块12:

需跨过一个磁道,寻道时间为4;在磁头寻道的同时,磁盘逆时针转过4度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转356度才可以开始传输块30内容,因此所用旋转时间为356;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为4+356+30=390。

块13:

无需寻道,因此对块13的请求所需要时间为30。

寻道总用时:4

旋转总用时:105+356=461

传输总用时:30+30+30+30=120

全部总用时:4+461+120=585

查看结果:

计算正确。

-S 40

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为195。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为375。

-a 30

寻道速率是40单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为2;在磁头寻道的同时,磁盘逆时针转过10度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转343度才可以开始传输块30内容,因此所用旋转时间为342;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为2+343+30=375。

查看结果:

计算正确。

-a 7,30,8

寻道速率是40单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,因此对块7的请求所需时间不变,为45。

块30:

需跨过两个磁道,寻道时间为2;在磁头寻道的同时,磁盘逆时针转过2度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转298度才可以开始传输块30内容,因此所用旋转时间为298;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为2+298+30=330。

块8:

需跨过两个磁道,寻道时间为2;在磁头寻道的同时,磁盘逆时针转过2度,但要请求块8,旋转时间内磁盘旋转过的度数应该为30,所以还需旋转28度才可以开始传输块30内容,因此所用旋转时间为28;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为2+28+30=60。

寻道总用时:2+2=4

旋转总用时:15+298+28=341

传输总用时:30+30+30=90

全部总用时:4+341+90=435

查看结果:

计算正确。

-a 10,11,12,13

寻道速率是40单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,因此对块10的请求所需时间不变,为145。

块11:

无需寻道,因此对块11的请求所需要时间为30。

块12:

需跨过一个磁道,寻道时间为1;在磁头寻道的同时,磁盘逆时针转过1度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转359度才可以开始传输块30内容,因此所用旋转时间为359;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为1+359+30=390。

块13:

无需寻道,因此对块13的请求所需要时间为30。

寻道总用时:1

旋转总用时:105+359=464

传输总用时:30+30+30+30=120

全部总用时:1+464+120=585

查看结果:

计算正确。

-S 0.1

-a 0

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为195。

-a 6

旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

无需寻道,总用时不变,为375。

-a 30

寻道速率是0.1单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为800;在磁头寻道的同时,磁盘逆时针转过800度,但要请求块30,旋转时间内磁盘旋转过的度数应该为1065,所以还需旋转265度才可以开始传输块30内容,因此所用旋转时间为265;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。总用时为800+265+30=1095。

查看结果:

有一点小差别,应该是disk.py本身的问题,试图使用更精确的disk-precise.py再次运行,却没有跑出结果。

[Note: there is also an experimental program, ‘disk-precise.py’, included in the download. This version of the simulator uses the python Decimal package for precise floating point computation, thus giving slightly better answers in some corner cases than ‘disk.py’. However, it has not been very carefully tested, so use at your own caution.]

但可以确认我的计算正确。

-a 7,30,8

寻道速率是0.1单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,因此对块7的请求所需时间不变,为45。

块30:

需跨过两个磁道,寻道时间为800;在磁头寻道的同时,磁盘逆时针转过800度,但要请求块30,旋转时间内磁盘旋转过的度数应该为1020,所以还需旋转220度才可以开始传输块30内容,因此所用旋转时间为220;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为800+220+30=1050。

块8:

需跨过两个磁道,寻道时间为800;在磁头寻道的同时,磁盘逆时针转过80度,但要请求块8,旋转时间内磁盘旋转过的度数应该为390,所以还需旋转20度才可以开始传输块30内容,因此所用旋转时间为310;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为30。因此对块8的请求共需要时间为800+310+30=1140。

寻道总用时:800+800=1600

旋转总用时:15+220+310=545

传输总用时:30+30+30=90

全部总用时:1600+545+90=2235

查看结果:

情况如上,依旧可以确认计算正确。

-a 10,11,12,13

寻道速率是0.1单位距离/单位时间,旋转速率是1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,因此对块10的请求所需时间不变,为145。

块11:

无需寻道,因此对块11的请求所需要时间为30。

块12:

需跨过一个磁道,寻道时间为400;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转320度才可以开始传输块30内容,因此所用旋转时间为320;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为30。因此对块12的请求共需要时间为400+320+30=750。

块13:

无需寻道,因此对块13的请求所需要时间为30。

寻道总用时:400

旋转总用时:105+320=425

传输总用时:30+30+30+30=120

全部总用时:400+425+120=945

查看结果:

情况如上,依旧可以确认计算正确。

第三题

Do the same requests above, but change the rotation rate: -R 0.1, -R 0.5,-R 0.01. How do the times change?

题目要求:同样的请求,但改变旋转速率

-R 0.1

-a 0

旋转速率是0.1度/单位时间。开始前,磁头指向最外磁道块6的中央。

磁盘逆时针旋转,从块6中央开始,到块11和块0正中间为止,共转过了165度,旋转时间为1650;接着是传输,从块11和块0中央到块0和块1中央,共30度,传输时间为300。总用时为1650+300=1950。

查看结果:

计算正确。

-a 6

旋转速率是0.1度/单位时间。开始前,磁头指向最外磁道块6的中央。磁盘逆时针旋转将近一周,从块6中央开始,到块5和块6正中间为止,共转过了345度,旋转时间为3450;接着是传输,从块5和块6中央到块6和块7中央,共30度,传输时间为300。总用时为3450+300=3750。

查看结果:

和计算结果有一点差别,使用更精确的disk-precise.py再运行一次:

计算正确。

-a 30

寻道速率是1单位距离/单位时间,旋转速率是0.1度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为80;在磁头寻道的同时,磁盘逆时针转过8度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转337度才可以开始传输块30内容,因此所用旋转时间为3370;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为300。总用时为80+3370+300=3750。

查看结果:

和计算结果有一点差别,使用更精确的disk-precise.py再运行一次:

计算正确。

-a 7,30,8

寻道速率是1单位距离/单位时间,旋转速率是0.1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,旋转过15度后开始传输,旋转时间为150;传输时磁盘从块6和块7中央转到块7和块8中央,转过30度,传输时间为300。因此对块7的请求共需要时间为150+300=450。

块30:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过8度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转292度才可以开始传输块30内容,因此所用旋转时间为2920;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为300。因此对块30的请求共需要时间为80+2920+300=3300。

块8:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过8度,但要请求块8,旋转时间内磁盘旋转过的度数应该为30,所以还需旋转22度才可以开始传输块30内容,因此所用旋转时间为220;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为300。因此对块8的请求共需要时间为80+220+300=600。

寻道总用时:80+80=160

旋转总用时:150+2920+220=3290

传输总用时:300+300+300=900

全部总用时:160+3290+900=4350

查看结果:

和计算结果有一点差别,使用更精确的disk-precise.py再运行一次:

计算正确。

-a 10,11,12,13

寻道速率是1单位距离/单位时间,旋转速率是0.1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,旋转过105度后开始传输,旋转时间为1050;传输时磁盘从块9和块10中央转到块10和块11中央,转过30度,传输时间为300。因此对块10的请求共需要时间为1050+300=1450。

块11:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块10和块11中央转到块11和块12中央,转过30度,传输时间为300。因此对块11的请求共需要时间为300。

块12:

需跨过一个磁道,寻道时间为40;在磁头寻道的同时,磁盘逆时针转过4度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转356度才可以开始传输块30内容,因此所用旋转时间为3560;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为300。因此对块12的请求共需要时间为40+3560+300=3900。

块13:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块12和块13中央转到块13和块14中央,转过30度,传输时间为300。因此对块11的请求共需要时间为300。

寻道总用时:40

旋转总用时:1050+3560=4610

传输总用时:300+300+300+300=1200

全部总用时:40+4610+1200=5850

查看结果:

和计算结果有一点差别,使用更精确的disk-precise.py再运行一次:

计算正确。

-R 0.5

-a 0

旋转速率是0.5度/单位时间。开始前,磁头指向最外磁道块6的中央。

磁盘逆时针旋转,从块6中央开始,到块11和块0正中间为止,共转过了165度,旋转时间为330;接着是传输,从块11和块0中央到块0和块1中央,共30度,传输时间为60。总用时为330+60=390。

查看结果(直接使用disk-precise.py):

计算正确。

-a 6

旋转速率是0.5度/单位时间。开始前,磁头指向最外磁道块6的中央。磁盘逆时针旋转将近一周,从块6中央开始,到块5和块6正中间为止,共转过了345度,旋转时间为690;接着是传输,从块5和块6中央到块6和块7中央,共30度,传输时间为60。总用时为690+60=750。

查看结果(直接使用disk-precise.py):

计算正确。

-a 30

寻道速率是1单位距离/单位时间,旋转速率是0.5度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为80;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转305度才可以开始传输块30内容,因此所用旋转时间为610;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为60。总用时为80+610+60=750。

查看结果(直接使用disk-precise.py):

计算正确。

-a 7,30,8

寻道速率是1单位距离/单位时间,旋转速率是0.5度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,旋转过15度后开始传输,旋转时间为30;传输时磁盘从块6和块7中央转到块7和块8中央,转过30度,传输时间为60。因此对块7的请求共需要时间为30+60=90。

块30:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转260度才可以开始传输块30内容,因此所用旋转时间为520;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为60。因此对块30的请求共需要时间为80+520+60=660。

块8:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过40度,但要请求块8,旋转时间内磁盘旋转过的度数应该为390,所以还需旋转350度才可以开始传输块30内容,因此所用旋转时间为700;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为60。因此对块8的请求共需要时间为80+700+60=840。

寻道总用时:80+80=160

旋转总用时:30+520+700=1250

传输总用时:60+60+60=180

全部总用时:160+1250+180=1590

查看结果(直接使用disk-precise.py):

计算正确。

-a 10,11,12,13

寻道速率是1单位距离/单位时间,旋转速率是0.5度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,旋转过105度后开始传输,旋转时间为210;传输时磁盘从块9和块10中央转到块10和块11中央,转过30度,传输时间为60。因此对块10的请求共需要时间为210+60=270。

块11:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块10和块11中央转到块11和块12中央,转过30度,传输时间为60。因此对块11的请求共需要时间为60。

块12:

需跨过一个磁道,寻道时间为40;在磁头寻道的同时,磁盘逆时针转过20度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转340度才可以开始传输块30内容,因此所用旋转时间为680;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为60。因此对块12的请求共需要时间为40+680+60=780。

块13:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块12和块13中央转到块13和块14中央,转过30度,传输时间为60。因此对块11的请求共需要时间为60。

寻道总用时:40

旋转总用时:210+680=890

传输总用时:60+60+60+60=240

全部总用时:40+890+240=1170

查看结果(直接使用disk-precise.py):

计算正确。

-R 0.01

-a 0

旋转速率是0.01度/单位时间。开始前,磁头指向最外磁道块6的中央。

磁盘逆时针旋转,从块6中央开始,到块11和块0正中间为止,共转过了165度,旋转时间为16500;接着是传输,从块11和块0中央到块0和块1中央,共30度,传输时间为3000。总用时为16500+3000=19500。

查看结果(直接使用disk-precise.py):

计算正确。

-a 6

旋转速率是0.01度/单位时间。开始前,磁头指向最外磁道块6的中央。磁盘逆时针旋转将近一周,从块6中央开始,到块5和块6正中间为止,共转过了345度,旋转时间为34500;接着是传输,从块5和块6中央到块6和块7中央,共30度,传输时间为3000。总用时为34500+3000=37500。

查看结果(直接使用disk-precise.py):

计算正确。

-a 30

寻道速率是1单位距离/单位时间,旋转速率是0.01度/单位时间。开始前,磁头指向最外磁道块6的中央。块30在最内磁道上,相邻磁道之间为40单位距离,所以寻道需要跨过两个磁道,所用时间为80;在磁头寻道的同时,磁盘逆时针转过0.8度,但要请求块30,旋转时间内磁盘旋转过的度数应该为345,所以还需旋转344.2度才可以开始传输块30内容,因此所用旋转时间为34420;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为3000。总用时为80+34420+3000=37500。

查看结果(直接使用disk-precise.py):

计算正确。

-a 7,30,8

寻道速率是1单位距离/单位时间,旋转速率是0.01度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,旋转过15度后开始传输,旋转时间为1500;传输时磁盘从块6和块7中央转到块7和块8中央,转过30度,传输时间为3000。因此对块7的请求共需要时间为1500+3000=4500。

块30:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过0.8度,但要请求块30,旋转时间内磁盘旋转过的度数应该为300,所以还需旋转299.2度才可以开始传输块30内容,因此所用旋转时间为29920;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为3000。因此对块30的请求共需要时间为80+29920+3000=33000。

块8:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过0.8度,但要请求块8,旋转时间内磁盘旋转过的度数应该为30,所以还需旋转29.2度才可以开始传输块30内容,因此所用旋转时间为2920;最后是传输,从块7和块8中央到块8和块9中央,共30度,传输时间为3000。因此对块8的请求共需要时间为80+2920+3000=6000。

寻道总用时:80+80=160

旋转总用时:1500+29920+2920=34340

传输总用时:3000+3000+3000=9000

全部总用时:160+34340+9000=43500

查看结果(直接使用disk-precise.py):

计算正确。

-a 10,11,12,13

寻道速率是1单位距离/单位时间,旋转速率是0.01度/单位时间。开始前,磁头指向最外磁道块6的中央。

块10:

无需寻道,旋转过105度后开始传输,旋转时间为10500;传输时磁盘从块9和块10中央转到块10和块11中央,转过30度,传输时间为3000。因此对块10的请求共需要时间为10500+3000=14500。

块11:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块10和块11中央转到块11和块12中央,转过30度,传输时间为3000。因此对块11的请求共需要时间为3000。

块12:

需跨过一个磁道,寻道时间为40;在磁头寻道的同时,磁盘逆时针转过0.4度,但要请求块30,旋转时间内磁盘旋转过的度数应该为360,所以还需旋转359.6度才可以开始传输块30内容,因此所用旋转时间为35960;最后是传输,从块23和块12中央到块12和块13中央,共30度,传输时间为3000。因此对块12的请求共需要时间为40+35960+3000=39000。

块13:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块12和块13中央转到块13和块14中央,转过30度,传输时间为3000。因此对块11的请求共需要时间为3000。

寻道总用时:40

旋转总用时:10500+35960=46460

传输总用时:3000+3000+3000+3000=12000

全部总用时:40+46460+12000=58500

查看结果(直接使用disk-precise.py):

计算正确。

第四题

FIFO is not always best, e.g., with the request stream -a 7,30,8, what order should the requests be processed in? Run the shortest seek-time first(SSTF) scheduler (-p SSTF) on this workload; how long should it take (seek, rotation, transfer) for each request to be served?

对于请求流-a 7,30,8,处理请求的顺序为7,8,30更好。

因为SSTF会选择在最近磁道上的请求先完成,因此对于三个块处理的顺序为7,8,30。

寻道速率是1单位距离/单位时间,旋转速率是0.1度/单位时间。开始前,磁头指向最外磁道块6的中央。

块7:

无需寻道,旋转过15度后开始传输,旋转时间为15;传输时磁盘从块6和块7中央转到块7和块8中央,转过30度,传输时间为30。因此对块7的请求共需要时间为15+30=45。

块8:

无需寻道,无需旋转时间,直接开始传输。传输时磁盘从块7和块8中央转到块8和块9中央,转过30度,传输时间为30。因此对块8的请求共需要时间为30。

块30:

需跨过两个磁道,寻道时间为80;在磁头寻道的同时,磁盘逆时针转过80度,但要请求块30,旋转时间内磁盘旋转过的度数应该为270,所以还需旋转190度才可以开始传输块30内容,因此所用旋转时间为190;最后是传输,从块29和块30中央到块30和块31中央,共30度,传输时间为30。因此对块30的请求共需要时间为80+190+30=300。

寻道总用时:80

旋转总用时:15+190=205

传输总用时:30+30+30=90

全部总用时:80+205+90=375

查看结果(直接使用disk-precise.py):

计算正确。

第五题

Now use the shortest access-time first (SATF) scheduler (-p SATF). Does it make any difference for -a 7,30,8 workload? Find a set of requests where SATF outperforms SSTF; more generally, when is SATF better than SSTF?

使用最短定位时间优先调度,对请求-a 7,30,8的请求顺序与SSTF一样,为7,8,30。

考虑请求-a 9,25,21

对于SSTF(最短寻道时间优先):

对于SATF(最短定位时间优先):

可以看到此例中SATF明显优于SSTF。当剩余请求的块中,既存在与当前块是相邻磁道的块,也存在非相邻磁道的块,但是后者的与当前块的相对距离较小时,SATF会优于SSTF。因为SSTF下一个会选择请求相邻磁道的块,但这个块肯能所需的旋转时间很长,而SATF会选择非相邻磁道的块,虽然寻道时间长了一点,但旋转时间会少很多,这样综合一下,SATF就优于SSTF了。

第六题

Here is a request stream to try: -a 10,11,12,13. What goes poorly when it runs? Try adding track skew to address this problem (-o skew). Given the default seek rate, what should the skew be to maximize performance? What about for different seek rates (e.g., -S 2, -S 4)? In general, could you write a formula to figure out the skew?

不论使用FIFO、SSTF、SATF中的哪个调度策略,对于请求流-a 10,11,12,13,请求的顺序都是10,11,12,13。而因为从块11跨过一个磁道后,磁头刚好错过块12,还需要旋转将近一周才能开始对块12的传输,所以该磁盘没有特别好地处理请求流-a 10,11,12,13。

当skew为0时(默认情况下):

寻道所需时间为40,这期间磁盘逆时针转过40度,距离块13中央为5度。如果是请求块14,则再旋转20度就可以传输了,不需要旋转将近一周,所以若是将块12放在磁道偏移为0时块14所在位置,就可以尽量减少这一组请求的时间。所以磁道偏移为2。执行结果:

当-S为2时,寻道所需时间为20,这期间磁盘逆时针转过20度,距离块13中央为25度。如果是请求块13,则再旋转10度就可以传输了,不需要旋转将近一周,所以若是将块12放在现在磁道偏移为0时块13所在位置,就可以尽量减少这一组请求的时间。所以-S为2时,磁道偏移为1。执行结果:

当-S为4时,寻道所需时间为10,这期间磁盘逆时针转过10度,距离块12中央为5度。如果是请求块13,则再旋转20度就可以传输了,不需要旋转将近一周,所以若是将块12放在现在磁道偏移为0时块13所在位置,就可以尽量减少这一组请求的时间。所以-S为4时,磁道偏移为1。执行结果:

设-S为s,则可尽量减少这一组请求的时间的磁道偏移o为:

4 3 s ≤ o < 4 3 s + 1 ( o 为 整 数 ) \frac{4}{3s}\leq o < \frac{4}{3s}+1(o为整数) 3s4o<3s4+1o

更一般的情况:寻道速率-S为s,磁道之间的距离为d,旋转速率为r度/单位时间,

d r 30 s ≤ o < d r 30 s + 1 ( o 为 整 数 ) \frac{dr}{30s}\leq o <\frac{dr}{30s}+1(o为整数) 30sdro<30sdr+1o

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值