南京自助建站网站,四大门户网站现状,设计案例,长寿网站建设磁盘结构#xff1a; 常见的机械磁盘是上图左边的样子#xff0c;中间圆的部分是磁盘的盘片#xff0c;一般会有多个盘片#xff0c;每个盘面都有自己的磁头。右边的图就是一个盘片的结构#xff0c;盘片中的每一层分为多个磁道#xff0c;每个磁道分为多个扇区#xff…磁盘结构 常见的机械磁盘是上图左边的样子中间圆的部分是磁盘的盘片一般会有多个盘片每个盘面都有自己的磁头。右边的图就是一个盘片的结构盘片中的每一层分为多个磁道每个磁道分为多个扇区每个扇区是 512 字节。那么多个具有相同编号的磁道形成了一个圆柱称之为磁盘的柱面如上图中间的样子。
磁盘调度算法的目的很简单就是为了提高磁盘的访问性能一般是通过优化磁盘的访问请求顺序来做到的。
寻道的时间是磁盘访问最耗时的部分如果请求顺序优化的得当必然可以节省一些不必要的寻道时间从而提高磁盘的访问性能。
假设有下面一个请求序列每个数字代表磁道的位置
9818337122141246567
初始磁头当前的位置是在第 53 磁道。
接下来分别对以上的序列作为每个调度算法的例子那常见的磁盘调度算法有
先来先服务算法最短寻道时间优先算法扫描算法循环扫描算法LOOK 与 C-LOOK 算法 先来先服务
先来先服务FCFS先到来的请求先被服务
按照这个序列的话
98,183,37,122,14,124,65,67
那么磁盘的写入顺序是从左到右如下图 先来先服务算法总共移动了 640 个 磁道的距离这么一看这种算法比较简单粗暴但是如果大量进程竞争使用磁盘请求访问的磁道可能会很分散那先来先服务算法在性能上就会显得很差因为寻道时间过长。 最短寻道时间优先
最短寻道时间优先SSF算法的工作方式是优先选择从当前磁头位置所需寻道时间最短的请求还是以这个序列为例子
98,183,37,122,14,124,65,67
那么根据距离磁头53最近的请求的算法具体的请求则会是下列从左到右的顺序
65,67,37,14,98,122,124,183 磁头移动的总距离是 236 磁道相比先来先服务性能提高了不少。
但这个算法可能存在某些请求的饥饿因为本例子我们是静态的序列看不出问题假设是一个动态的请求如果后续来的请求都是小于 183 磁道的那么 183 磁道可能永远不会被响应于是就产生了饥饿现象这里产生饥饿的原因是磁头在一小块区域来回移动。 扫描算法
最短寻道时间优先算法会产生饥饿的原因在于磁头有可能在一个小区域内来回移动。
为了防止这个问题可以规定磁头在一个方向上移动访问所有未完成的请求直到磁头到达该方向上的最后的磁道才调换方向这就是扫描算法。
这种算法也叫做电梯算法比如电梯保持按一个方向移动直到在那个方向上没有请求为止然后改变方向。
还是以这个序列为例子磁头的初始位置是 53
9818337122141246567
那么假设扫描算法先朝磁道号减少的方向移动具体请求会是下列从左到右的顺序
37140656798122124183 磁头先响应左边的请求直到达到最左端后才开始反向移动响应右边的请求。
扫描算法性能较好不会产生饥饿现象但是存在这样的问题中间部分的磁道会比较占便宜中间部分相比其他部分响应的频率会比较多也就是说每个磁道的响应频率存在差异。 循环扫描算法
扫描孙发使得每个磁道的响应频率存在差异那么要优化这个问题的话可以总是按相同的方向进行扫描使得每个磁道的响应频率基本一致。
循环扫描CSCAN规定只有磁头朝某个特定方向移动时才处理磁道访问请求而返回时直接快速移动至最靠边的磁道也就是复位磁头这个过程很快并且返回中途不处理任何请求该算法的特点就是磁道只响应一个方向上的请求。
还是以这个序列为例子磁头的初始位置是 53
9818337122141246567
那么假设循环扫描调度算先朝磁道增加的方向移动具体请求会是下列从左到右的顺序
65679812212418319901437 磁头先响应了右边的请求直到碰到了最右端的磁道 199 就立即回到磁盘的开始处但这个返回的途中是不响应任何请求的直到到达最开始的磁道后才继续顺序响应右边的请求。
循环扫描算法相比于扫描算法对于各个位置磁道响应频率相对比较平均。 LOOK 与 C-LOOK 算法
前面说的扫描算法和循环扫描算法都是磁头移动到磁盘 [最始端或对末端] 才开始调换方向。
其实这可以优化优化的思路就是 磁头在移动到 [最远的请求] 的位置然后立即反向移动。
那针对 SCAN 算法的优化叫 LOOK算法它的工作方式磁头在每个方向上仅仅移动到最远的请求位置然后立即反向移动而不需要移动到磁盘的最始端或最末端反向移动的途中会响应请求。
而针对 C-SCAN 算法的优化则叫做 C-LOOK它的工作方式磁头在每个方向上仅仅移动到最远的请求位置然后立即反向移动而不需要移动到磁盘的最始端或最末端反向移动的途中不会响应请求。