目录
5.8.1 磁盘性能简述
1、磁盘的结构和布局
磁道是有宽度的,图中水墨色空心圆柱就是所有盘面上的 0 号磁道对应的柱面。
- 磁盘片:每个磁盘片都有两个盘面,一个磁盘可以有一个或多个磁盘片。
- 盘面上有:磁道 -- 扇区,磁道间隔 -- 扇区间隔。
- 磁道:用于记录信息,每个磁道又被分为了多个扇区。
- 扇区:又被称为盘块或数据块,大小为 600B,存储数据 512B 。
- 柱面:所有盘面上位于同一磁道号上的所有磁道组成一个柱面。
- 磁头:每一个盘面都有一个磁头。
扇区除了存储数据的字节,其它的字节用于校验数据和记录状态。
物理地址形式:柱面号 -- 磁头号 -- 扇区号
柱面号用于指示是哪个磁道,磁头号用于指示是哪个盘面。
2、磁盘的类型
- 固定头磁盘:每个磁道都有一个磁头,I/O 速度快。
- 移动头磁盘:每个盘面仅有一个磁头,I/O 速度慢。
3、磁盘数据的组织和格式
典型的参数 | |
20GB | 60GB |
39813 柱面 | 28733 柱面 |
16 头 | 16 头 |
63 扇区 | 255 扇区 |
柱面 -- 磁道数;头 -- 磁头数 -- 盘面数
4、磁盘的访问过程
由三个动作组成:
- 寻道:磁头移动定位到指定的磁道。
- 旋转延迟:等待指定的扇区从磁头下旋转经过。
- 数据传输:数据在磁盘与内存之间的实际传输。
数据传输时间其实就是磁头完整转过你想读取的区域所需的时间。
5、磁盘访问时间
旋转延迟时间取的是一个均值,极端情况分别为:扇区刚好在磁头下和扇区刚好错过磁头。
5.8.2 磁盘调度算法
当有多个进程都请求访问磁盘时,由于它们访问的磁道各不相同,因此磁头需要频繁地来回移动以进行寻道操作。磁头的寻道操作属于机械运动,花费的时间较长,而且过度的寻道操作会大大缩短磁盘的寿命。因此,必须采用适当的磁盘调度算法,使得在尽可能公平的情况下,缩短平均寻道时间,并使磁头移动距离最小。
磁盘调度算法减少的是三个时间中的:寻道时间。
1、先来先服务 FCFS
按访问请求到达的先后次序服务。
- 优点:简单,公平。
- 缺点:效率不高。
先后到达的相邻的两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。
例、假设磁盘访问序列:98,183,37,122,14,124,65,67,磁头起始位置:53,问:
- 安排磁头的服务序列
- 计算磁头移动总道数
- 磁头移动总道数:640
- 平均寻道长度:80
2、最短寻道时间优先 SSTF
优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
- 优点:改善了磁盘平均服务时间。
- 缺点:造成某些访问请求长期等待得不到服务。
注意:计算时一定要仔细,不要选错了下一磁道!
例、假设磁盘访问序列:98,183,37,122,14,124,65,67,磁头起始位置:53,问:
- 安排磁头的服务序列
- 计算磁头移动总道数
- 磁头移动总道数:236
- 平均寻道长度:29.5
SSTF 算法虽然能获得较好的寻道性能, 但却可能导致某个进程发生饥饿现象。因为只要不断有新进程的请求到达,且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的 I/O 请求将会被优先满足。而距离较远的老进程将会一直得不到满足。
3、扫描算法(电梯算法)SCAN
对 SSTF 算法略加修改后所形成的 SCAN 算法, 即可防止进程出现饥饿现象。SCAN 算法克服了 SSTF 算法的缺点,既考虑了距离又考虑了方向。
SCAN 具体做法
① 当设备无访问请求时,磁头不动;
② 当设备有访问请求时,磁头按一个方向移动。在移动的过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;
③ 否则改变移动方向,并为经过的访问请求服务,如此反复。
SCAN 算法举例
例、假设磁盘访问序列:98,183,37,122,14,124,65,67,磁头起始位置:53,并且此时磁头是在向内移动。
- 磁头移动总道数:208
- 平均寻道长度:26
SCAN 算法的优缺点
① 优点:SCAN 算法既能获得较好的寻道性能,又能防止饥饿现象,故被广泛用于大、中、小型机器和网络中的磁盘调度。
② 缺点:当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。
为了减少这种延迟,推出 CSCAN 算法,规定磁头单向移动。
4、循环扫描算法 CSCAN
SCAN 算法杜绝了饥饿,但假如对磁道的请求是均匀分布的,那么在磁头改变方向时便会发现:靠近磁头的请求很少(因为改变方向前刚刚服务过),而远离磁头的请求较多,从而导致这些请求的等待时间较长。
CSCAN 具体做法
- 总是按照一个方向进行移动,假设是从里向外移动。
- 移动臂到达最后一个柱面后,立即带动磁头快速返回到最里的欲访问磁道。
- 返回时磁头不为任何访问请求服务,直到返回后才开始对访问请求进行扫描。
CSCAN 算法举例
虽然返回的过程中没有为任何访问请求进行服务,但是在计算总磁道时还是要计算返回时移动经过的磁道数。
例、假设磁盘访问序列:98,183,37,122,14,124,65,67,磁头起始位置:53,并且此时磁头是在向外移动。
- 磁头移动总道数:352
- 平均寻道长度:44
5、磁臂粘着
在 SSTF、SCAN 及 CSCAN 这几种调度算法中, 都可能出现磁臂停留在某处不动的情况。究其原因是:这三个算法没有像 FCFS 算法那样考虑先后到达次序,属于是喜新厌旧!
例如,有一个或几个进程对某一磁道有较高的访问频率, 即这个/这些进程反复请求对某一磁道的 I/O 操作,从而垄断了整个磁盘设备。“反复请求” 中的请求就是热乎的新请求!
我们把这一现象称为磁臂粘着(Armstickiness)。
在高密度磁盘上容易出现此情况:因为与低密度磁盘相比,它在一个扇区/一条磁道中容纳的数据更多,所以可能导致进程需要多次访问才能读取完其中的数据。
6、调度算法的选择
- 实际系统相当普遍地采用最短寻道时间优先算法 SSTF,因为它简单有效且性价比好。
- SCAN 算法更适用于磁盘负担重的系统。
- 磁盘负担很轻的系统也可以采用 FCFS 算法。
一般要将磁盘调度算法作为操作系统的单独模块编写,利于修改和更换。