操作系统4.2.3 减少延迟时间的方法

在上一小节中提到一次读/写磁盘所需的时间分为三个部分:寻道时间、延迟时间、传输时间

其中延迟时间和传输时间是硬盘的转速这个固有属性来决定的,所以操作系统无法优化来减少这两个时间。上文介绍了几种磁盘调度算来及减少寻道时间,本文介绍两种方法来减少延迟时间。

 

一、交错编号

假设需要连续的读取橙色区域的2、3、4扇区,磁头已经移动到最内侧的磁道。

磁头读取一块的内容(也就是一个扇区的内容)后,需要一小段时间处理,而在处理的时间内盘片又在不停地旋转。

因此,如果2、3号扇区相邻着排列,则读完2号扇区后无法连续不断地读入3号扇区,必须等盘片继续旋转,等到3号扇区再次划过磁头,才能完成扇区读入。

结论:磁头读完一个扇区的数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻的化,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”

为了解决上面出现的问题,可以采用交替编号策略,即让逻辑上相邻的扇区在物理上有一定的间隔。可以使读取连续的逻辑扇区所需的延迟时间更小

如上图,磁盘顺时针转动,当读入2号扇区后,磁头需要处理一段时间,如果在转到3号扇区前处理完,那么就可以直接读取3号扇区的数据,就不用像上面那种情况需要再等待一圈,所以转动一圈就可以读取这3个扇区了。

 

 

二、思考:磁盘地址结构的设计

为什么磁盘的物理地址是(柱面号,盘面号,扇区号)

而不是(盘面号,柱面号,扇区号)。即为什么柱面号一定在前,盘面号一定在后。

  1. (盘面号,柱面号,扇区号)读完本转区域再读相邻区域时,需要启动磁头臂,将磁头移动到下一个磁道

  2. (柱面号,盘面号,扇区号)读完本转区域再读相邻区域时,由于柱面号/磁道号相同,只是盘面号不同,因此不需要移动磁头臂只需要激活相邻盘面的磁头即可

答:读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间

 

 

三、错位命名

磁盘是由盘片摞起来的,所有的盘面一起转动,假设某磁盘有8个柱面/磁道(假设最内侧的柱面/磁道号为0),4个盘面,8个扇区。则可用3个二进制位表示柱面,2个二进制位表是盘面,3个二进制位表示扇区。前面说过可以使用物理地址的结构(柱面号,盘面号,扇区号)来定位任意一个磁盘块。物假设需要连续读取物理地址(000,00,000)~(000,01,111)的扇区。

方案一:假设磁盘的所有盘面编号都是相同的,磁头已经在0号扇区的开始位置,如下图

(000,00,111) 即物理地址是7

(000,01,000) 即物理地址是8

先连续读取(000,00,000)~(000,00,111),这些扇区在0号盘面,根据上一小节,要读取完这个磁道需要转两圈(假设在移动到下一个扇区前磁头已经处理完了,可以继续读取了),第一圈读取的是0号、1号、2号、3号扇区,第二圈读取的是4号、5号、6号和7号扇区。刚读完7号扇区(未处理)此时磁头在0号扇区的起始位置,和初始位置一样。

接着在连续读取(000,01,000)~(000,01,111)这些扇区在1号盘面,但是7号刚读完还没有处理,所以磁盘在转动的时候,并不能读取数据,等处理完了,1号盘面的磁头已经错过了读取该盘面0号扇区的机会,只能再等磁盘转一圈才能读取数据。

方案二:所以,为了减少这样的延迟时间,可以将不同的盘面进行错位命名

同样,当0号盘面7号扇区读取结束后,在处理的过程中,由于1号盘面磁头在7号扇区开始位置,当1号盘面0号扇区到达磁头时,已经处理结束了,所以磁头就可以读取0号扇区了。

即7和8要换盘面,如果不错位就要多转一圈。

 

四、小结

  1. 在一个盘面上可以通过交错编号来减少连续读取所需的延迟时间
  2. 不同盘面的相同位置可以通过错位命名来减少所需的延迟时间
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值