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

作业

本节引入 raid.py,这是一个简单的 RAID 模拟器,你可以使用它来增强你对 RAID 系统工作方式的了解。 详情请参阅 README 文件。

38.1

问题描述

使用模拟器执行一些基本的 RAID 映射测试。运行不同的级别(0、1、4、5),看看你是否可以找出一组请求的映射。 对于 RAID-5,看看你是否可以找出左对称(left- symmetric)和左不对称(left-asymmetric)布局之间的区别。 使用一些不同的随机种子,产生不同于上面的问题。

解答

RAID-0

运行指令:python2 raid.py -n 3 -L 1 -R 16 -s 1

...
LOGICAL READ from addr:13 size:4096
  Physical reads/writes?

LOGICAL READ from addr:6 size:4096
  Physical reads/writes?

LOGICAL READ from addr:8 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         1       2      3
 4         5       6      7
 8         9      10     11
12        13      14     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:13 size:4096 read [disk 1, offset 3]
  • LOGICAL READ from addr:6 size:4096 read [disk 2, offset 1]
  • LOGICAL READ from addr:8 size:4096 read [disk 0, offset 2]

加-c标志后验证正确

RAID-1

运行命令:python2 raid.py -n 3 -L 1 -R 16 -s 1

...
LOGICAL READ from addr:2 size:4096
  Physical reads/writes?

LOGICAL READ from addr:12 size:4096
  Physical reads/writes?

LOGICAL READ from addr:7 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         0       1      1
 2         2       3      3
 4         4       5      5
 6         6       7      7
 8         8       9      9
10        10      11     11
12        12      13     13
14        14      15     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:2 size:4096 read [disk 1, offset 1]
  • LOGICAL READ from addr:12 size:4096 read [disk 0, offset 6]
  • LOGICAL READ from addr:7 size:4096 read [disk 3, offset 3]

加-c标志后验证正确

RAID-4

运行命令:python2 raid.py -n 3 -L 4 -R 16 -s 2

...
LOGICAL READ from addr:15 size:4096
  Physical reads/writes?

LOGICAL READ from addr:0 size:4096
  Physical reads/writes?

LOGICAL READ from addr:13 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         1       2      P
 3         4       5      P
 6         7       8      P
 9        10      11      P
12        13      14      P
15        16      17      P

disk、offset均从0开始计数,disk3用作奇偶校验磁盘,查表不难得出

  • LOGICAL READ from addr:15 size:4096 read [disk 0, offset 5]
  • LOGICAL READ from addr:0 size:4096 read [disk 0, offset 0]
  • LOGICAL READ from addr:13 size:4096 read [disk 1, offset 4]

加-c标志后验证正确

对于 RAID 5 我们采用顺序读的方式找出左对称(left- symmetric)和左不对称(left-asymmetric)布局之间的区别。

RAID-5

左对称

输入命令:python2 raid.py -n 18 -L 5 -5 LS -W seq -s 3 -c

...
LOGICAL READ from addr:0 size:4096
  read  [disk 0, offset 0]   
LOGICAL READ from addr:1 size:4096
  read  [disk 1, offset 0]   
LOGICAL READ from addr:2 size:4096
  read  [disk 2, offset 0]   
LOGICAL READ from addr:3 size:4096
  read  [disk 3, offset 1]   
LOGICAL READ from addr:4 size:4096
  read  [disk 0, offset 1]   
LOGICAL READ from addr:5 size:4096
  read  [disk 1, offset 1]   
LOGICAL READ from addr:6 size:4096
  read  [disk 2, offset 2]   
LOGICAL READ from addr:7 size:4096
  read  [disk 3, offset 2]   
LOGICAL READ from addr:8 size:4096
  read  [disk 0, offset 2]   
LOGICAL READ from addr:9 size:4096
  read  [disk 1, offset 3]   
LOGICAL READ from addr:10 size:4096
  read  [disk 2, offset 3]   
LOGICAL READ from addr:11 size:4096
  read  [disk 3, offset 3]   
LOGICAL READ from addr:12 size:4096
  read  [disk 0, offset 4]   
LOGICAL READ from addr:13 size:4096
  read  [disk 1, offset 4]   
LOGICAL READ from addr:14 size:4096
  read  [disk 2, offset 4]   
LOGICAL READ from addr:15 size:4096
  read  [disk 3, offset 5]   
LOGICAL READ from addr:16 size:4096
  read  [disk 0, offset 5]   
LOGICAL READ from addr:17 size:4096
  read  [disk 1, offset 5] 

易知左对称布局如下:

disk0  disk1   disk2  disk3
 0         1       2      P
 4         5       P      3
 8         P       6      7
 P         9      10     11
12        13      14      P
16        17       P     15
左不对称

左不对称参数 -5 LA,输入命令:python2 raid.py -n 18 -L 5 -5 LA -W seq -s 3 -c

...
LOGICAL READ from addr:0 size:4096
  read  [disk 0, offset 0]   
LOGICAL READ from addr:1 size:4096
  read  [disk 1, offset 0]   
LOGICAL READ from addr:2 size:4096
  read  [disk 2, offset 0]   
LOGICAL READ from addr:3 size:4096
  read  [disk 0, offset 1]   
LOGICAL READ from addr:4 size:4096
  read  [disk 1, offset 1]   
LOGICAL READ from addr:5 size:4096
  read  [disk 3, offset 1]   
LOGICAL READ from addr:6 size:4096
  read  [disk 0, offset 2]   
LOGICAL READ from addr:7 size:4096
  read  [disk 2, offset 2]   
LOGICAL READ from addr:8 size:4096
  read  [disk 3, offset 2]   
LOGICAL READ from addr:9 size:4096
  read  [disk 1, offset 3]   
LOGICAL READ from addr:10 size:4096
  read  [disk 2, offset 3]   
LOGICAL READ from addr:11 size:4096
  read  [disk 3, offset 3]   
LOGICAL READ from addr:12 size:4096
  read  [disk 0, offset 4]   
LOGICAL READ from addr:13 size:4096
  read  [disk 1, offset 4]   
LOGICAL READ from addr:14 size:4096
  read  [disk 2, offset 4]   
LOGICAL READ from addr:15 size:4096
  read  [disk 0, offset 5]   
LOGICAL READ from addr:16 size:4096
  read  [disk 1, offset 5]   
LOGICAL READ from addr:17 size:4096
  read  [disk 3, offset 5] 

易知左不对称布局如下:

disk0  disk1   disk2  disk3
 0         1       2      P
 3         4       P      5
 6         P       7      8
 P         9      10     11
12        13      14      P
15        16       P     17

加-c标志验证后正确

38.2

问题描述

与第一个问题一样,但这次使用 -C 来改变块的大小。大块的大小如何改变映射?

解答

把大块的大小由原来的4096乘以2变成8192。

RAID-0

输入命令:python2 raid.py -n 3 -L 0 -R 16 -s 0 -C 8K
结果如下:

...
LOGICAL READ from addr:13 size:4096
  Physical reads/writes?

LOGICAL READ from addr:6 size:4096
  Physical reads/writes?

LOGICAL READ from addr:8 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         2       4      6
 1         3       5      7
 8        10      12     14
 9        11      13     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:13 size:4096 read [disk 2, offset 3]
  • LOGICAL READ from addr:6 size:4096 read [disk 3, offset 0]
  • LOGICAL READ from addr:8 size:4096 read [disk 0, offset 2]

RAID-1

输入命令:python2 raid.py -n 3 -L 1 -R 16 -s 1 -C 8K

...
LOGICAL READ from addr:2 size:4096
  Physical reads/writes?

LOGICAL READ from addr:12 size:4096
  Physical reads/writes?

LOGICAL READ from addr:7 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         0       2      2
 1         1       3      3
 4         4       6      6
 5         5       7      7
 8         8      10     10
 9         9      11     11
12        12      14     14
13        13      15     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:2 size:4096 read [disk 2, offset 0]
  • LOGICAL READ from addr:12 size:4096 read [disk 0, offset 6]
  • LOGICAL READ from addr:7 size:4096 read [disk 3, offset 3]

RAID-4

输入命令:python2 raid.py -n 3 -L 4 -R 16 -s 2 -C 8

...
LOGICAL READ from addr:15 size:4096
  Physical reads/writes?

LOGICAL READ from addr:0 size:4096
  Physical reads/writes?

LOGICAL READ from addr:13 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         2       4      P
 1         3       5      P
 6         8      10      P
 7         9      11      P
12        14      16      P
13        15      17      P

disk、offset均从0开始计数,disk3用作奇偶校验磁盘,查表不难得出

  • LOGICAL READ from addr:15 size:4096 read [disk 1, offset 5]
  • LOGICAL READ from addr:0 size:4096 read [disk 0, offset 0]
  • LOGICAL READ from addr:13 size:4096 read [disk 0, offset 5]

RAID-5

输入命令:python2 raid.py -n 3 -L 5 -5 LS -R 16 -s 3 -C 8K

...
LOGICAL READ from addr:3 size:4096
  Physical reads/writes?

LOGICAL READ from addr:5 size:4096
  Physical reads/writes?

LOGICAL READ from addr:10 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         2       4      P
 1         3       5      P
 8        10       P      6
 9        11       P      7
16         P      12     14
17         P      13     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:3 size:4096 read [disk 1, offset 1]
  • LOGICAL READ from addr:5 size:4096 read [disk 2, offset 1]
  • LOGICAL READ from addr:10 size:4096 read [disk 1, offset 2]

RAID 5 LA

运行命令:python2 raid.py -n 3 -L 5 -5 LA -R 16 -s 3 -C 8K

...
LOGICAL READ from addr:3 size:4096
  Physical reads/writes?

LOGICAL READ from addr:5 size:4096
  Physical reads/writes?

LOGICAL READ from addr:10 size:4096
  Physical reads/writes?
disk0  disk1   disk2  disk3
 0         2       4      P
 1         3       5      P
 6         8       P     10
 7         9       P     11
12         P      14     16
13         P      15     17

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:3 size:4096 read [disk 1, offset 1]
  • LOGICAL READ from addr:5 size:4096 read [disk 2, offset 1]
  • LOGICAL READ from addr:10 size:4096 read [disk 3, offset 2]

加-c标志经验证,答案都正确。

38.3

问题描述

执行上述测试,但使用 r 标志来反转每个问题的性质。

解答

就是说用-r标志,使得问题反转,之前是告诉逻辑地址,求物理地址;现在是告诉物理地址,求逻辑地址。

RAID0-0

输入命令:python2 raid.py -n 3 -L 0 -R 16 -s 0 -r

...
LOGICAL OPERATION is ?
  read  [disk 1, offset 3]   

LOGICAL OPERATION is ?
  read  [disk 2, offset 1]   

LOGICAL OPERATION is ?
  read  [disk 0, offset 2]
disk0  disk1   disk2  disk3
 0         1       2      3
 4         5       6      7
 8         9      10     11
12        13      14     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:13 size:4096 read [disk 1, offset 3]
  • LOGICAL READ from addr:6 size:4096 read [disk 2, offset 1]
  • LOGICAL READ from addr:8 size:4096 read [disk 0, offset 2]

RAID-1

输入命令:python2 raid.py -n 3 -L 1 -R 16 -s 1 -r

...
LOGICAL OPERATION is ?
  read  [disk 1, offset 1]   

LOGICAL OPERATION is ?
  read  [disk 0, offset 6]   

LOGICAL OPERATION is ?
  read  [disk 3, offset 3]   
disk0  disk1   disk2  disk3
 0         0       1      1
 2         2       3      3
 4         4       5      5
 6         6       7      7
 8         8       9      9
10        10      11     11
12        12      13     13
14        14      15     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:2 size:4096 read [disk 1, offset 1]
  • LOGICAL READ from addr:12 size:4096 read [disk 0, offset 6]
  • LOGICAL READ from addr:7 size:4096 read [disk 3, offset 3]

RAID-4

输入命令:python2 raid.py -n 3 -L 4 -R 16 -s 2 -r

...
LOGICAL OPERATION is ?
  read  [disk 0, offset 5]   
LOGICAL OPERATION is ?
  read  [disk 0, offset 0]   
LOGICAL OPERATION is ?
  read  [disk 1, offset 4]  
disk0  disk1   disk2  disk3
 0         1       2      P
 3         4       5      P
 6         7       8      P
 9        10      11      P
12        13      14      P
15        16      17      P

disk、offset均从0开始计数,disk3用作奇偶校验磁盘,查表不难得出

  • LOGICAL READ from addr:15 size:4096 read [disk 0, offset 5]
  • LOGICAL READ from addr:0 size:4096 read [disk 0, offset 0]
  • LOGICAL READ from addr:13 size:4096 read [disk 1, offset 4]

RAID 5 LS

输入命令:python2 raid.py -n 3 -L 5 -5 LS -R 16 -s 3 -r

...
LOGICAL OPERATION is ?
  read  [disk 3, offset 1]   
LOGICAL OPERATION is ?
  read  [disk 1, offset 1]   
LOGICAL OPERATION is ?
  read  [disk 2, offset 3]   
disk0  disk1   disk2  disk3
 0         1       2      P
 4         5       P      3
 8         P       6      7
 P         9      10     11
12        13      14      P
16        17       P     15

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:3 size:4096 read [disk 3, offset 1]
  • LOGICAL READ from addr:5 size:4096 read [disk 1, offset 1]
  • LOGICAL READ from addr:10 size:4096 read [disk 2, offset 3]

RAID 5 LA

输入命令:python2 raid.py -n 3 -L 5 -5 LA -R 16 -s 3 -r

...
LOGICAL OPERATION is ?
  read  [disk 0, offset 1]   
LOGICAL OPERATION is ?
  read  [disk 3, offset 1]   
LOGICAL OPERATION is ?
  read  [disk 2, offset 3] 
disk0  disk1   disk2  disk3
 0         1       2      P
 3         4       P      5
 6         P       7      8
 P         9      10     11
12        13      14      P
15        16       P     17

disk、offset均从0开始计数,查表不难得出

  • LOGICAL READ from addr:3 size:4096 read [disk 0, offset 1]
  • LOGICAL READ from addr:5 size:4096 read [disk 3, offset 1]
  • LOGICAL READ from addr:10 size:4096 read [disk 2, offset 3]

加-c标志经验证,答案都正确。

38.4

问题描述

现在使用反转标志,但用-S 标志增加每个请求的大小。尝试指定 8 KB、12 KB 和 16 KB 的大小,同时改变 RAID 级别。 当请求的大小增加时,底层 IO 模式会发生什么?请务必在顺序工作负载上尝试此操作(-W sequential)。 对于什么请求大小,RAID-4 和 RAID-5 的 I0 效率更高?

解答

用-S改变请求的大小,看看底层I/O模式会发生什么。

8k

8k的写请求,大块的大小是4k,所以会是连续写两个大块,相当于对地址和地址+1的请求。

RAID-0:python2 raid.py -R 30 -n 5 -L 0 -S 8k -w 100 -c (-w 100是写请求)
在这里插入图片描述
显然,每次直接写入两个块,2次写操作。、

RAID-1:python2 raid.py -R 30 -n 5 -L 1 -S 8k -w 100 -c
在这里插入图片描述
可以看出,因为有镜像,每次写入两个块,以及它的镜像块,所以会有4次写操作。

RAID-4: python2 raid.py -R 30 -n 5 -L 4 -S 8k -w 100 -c

在这里插入图片描述
正常如果请求的大小跟块大小一样,应该要次先读地址对应的块,再读奇偶校验块,判断是否需要改变,然后再写入地址对应的块和校验块即可。但是请求大小为8k的话,其实是写入地址和地址+1的块,若两个块不连续,则需要两次上述的操作,需要8个I/O操作;若这两个块是连续的(偏移量一样),奇妙的事情发生了,例如第一个例子,要写25(还有26),如下图,只要读24即可,然后24跟需要写入的25、26进行异或运算可以算出奇偶校验块的值,就直接写入25、26和P,由原来的8个I/O操作减少到4个。
在这里插入图片描述
RAID-5: python2 raid.py -R 30 -n 5 -L 5 -S 8k -w 100 -c
在这里插入图片描述

12K

同理,RAID-0和RAID-1都是直接写入三个块,而RAID-4和RAID-5能用到上面说的连续块减少I/O操作的情况更频繁了。

python2 raid.py -R 30 -n 5 -L 0 -S 12k -w 100 -c ( -L 改变即可)
在这里插入图片描述

16K

与12K同理。

python2 raid.py -R 30 -n 5 -L 0 -S 16k -w 100 -c ( -L 改变即可)

结果类似,省略

当请求大小为16k时,RAID-4和RAID-5效率更高。因为连续的写入4个块,能更多地用到上述的连续块节省I/O的方法。

RAID比较

最后附上各级RAID在容量、可靠性和性能上的对比。
在这里插入图片描述
RAID 0是后面几种策略的基础,这里重点讨论RAID 1与RAID 4/5,当磁盘请求较少的情况下,这几种策略没有较大的差别,在请求数据量增大时,对于RAID 1考虑单个磁盘,它在接收一个请求之后,每个磁盘都会接收到每个其他块的请求。其在跳过的块上旋转时,不会为客户提供有用的带宽。因此,每个磁盘只能提供一半的峰值带宽;而相比RAID 1,RAID 4/5在请求较大时效率更高,一般超过一半峰值带宽。

38.5

问题描述

使用模拟器的定时模式(-t)来估计 100 次随机读取到 RAID 的性能,同时改变 RAID 级别,使用 4 个磁盘。

解答

RAID-0

输入命令:python2 raid.py -L 0 -t -n 100 -c -D 4
在这里插入图片描述
总时间为275.7

RAID-1

输入命令:python2 raid.py -n 100 -D 4 -t -L 1 -c
在这里插入图片描述
总时间为278.7

RAID-4

输入命令: python2 raid.py -n 100 -D 4 -t -L 4 -c
在这里插入图片描述
总时间为386.1

RAID-5

输入命令: python2 raid.py -n 100 -D 4 -t -L 5 -c
在这里插入图片描述
总时间为276.7

通过比较可以发现,RAID 0、RAID 1、RAID 5的耗时基本一致,而 RAID 4 耗时较长,约为前三者的1.38倍。又观察到 RAID 4 的disk3始终处于空闲状态,没有处理读取请求,这是因为disk3是奇偶校验磁盘。

我们知道RAID 0、RAID 1、RAID 5的随机读吞吐量均为N·R,而 RAID 4 的随机读吞吐量为(N-1)·R,本题中N=4,4/3=1.33,与实验数据基本相符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值