IO-2、磁盘的使用

来源:互联网 发布:手机登录淘宝电脑版 编辑:程序博客网 时间:2024/06/10 02:39

参考哈工大李治军老师公开课。


磁盘结构:

磁道:一张磁盘被分成一圈一圈的是磁道;

扇区(sec):每一个磁道被分成多个段成为扇区;

图1:磁盘结构

柱面(cyl):多个磁盘重叠放置,在立体空间中,从一个磁道向下有多个重叠磁道称为一个柱面;

柱头(head):就是每层磁盘有一个去遍历该磁盘面柱头

 

图2:磁盘读取最直观的过程

 

磁盘的使用方式

1、最直接的使用方式:

传递给磁盘控制器:柱面(哪个磁道),磁头(哪一层),扇区,缓存位置,即可把磁盘中的信息读取到缓存中。

 

2、通过盘块号读写磁盘

就是通过一个盘块号(block)进行计算,从而得到第一种方式所需要的三个参数,这种方式需要对扇区进行编号。


图3:通过盘块号读写磁盘

 

首先对扇区进行编号:

由下图不难看出:读写磁盘的时间主要浪费在寻道(寻找柱面)和旋转的时间上。


图4:磁盘读取的时间分布

 

为了减少寻道的时间可以按照如下方式对扇区编号,一个盘面内连续编号,接着在下一层接着编号,从而减少寻道时间和旋转时间。


图5:磁盘盘块号编号方式

 

这样就可以通过block = C * ( Heads * Sectors)+ H * Sectors + S进行推算(公式推导,自己百度)得到相应的三个参数,从而进行磁盘访问。

 

多个进程通过队列使用磁盘

计算机是多进程系统。所以同时肯定不只一个进程需要访问磁盘,所以在磁盘驱动之前加上一个请求队列,用于存储不同进程的请求,那么通过这样的方式访问唯一的问题就是如何控制访问磁盘顺序。


图6:多进程使用磁盘过程

在上面我们知道磁盘访问最耗时的操作在于寻道,所以操作系统需要尽量减少寻道的距离,从而提高磁盘读取的整体效率。

1)、先来先服务算法(FCFS):就是简单的按照进程请求的先后顺序进行访问磁盘,这样的方法直接简单,但是效率低下(例子如下图)。


图7:先来先服务算法(FCFS)

 

2)、最短寻道算法(SSTF):就是每次都访问离本磁头最近的磁道,但是这种方式有一个问题,就是在计算机运行的过程中,会不断有磁盘访问请求加入,而对于大多数磁盘访问的磁道都集中在磁盘的中间,那么很有可能导致一些边缘的磁道很难被访问到。例子如图


图8:最短寻道算法(SSTF)

 

3)、电梯算法(SCAN):就是简单的从一个点开始扫描,需要该磁道就直接读取,直到扫描到边缘再回头反向扫描。但是对于每个周期边缘部分只扫描了一次,而中间却扫描了两次,所以还是由一些不合理的地方。

图9:电梯算法(SCAN)

 

4)、改进的电梯算法:单向扫描,就是沿一个方向扫描到最后一个需要访问的14,而不扫描到0,然后回头不扫描,直接回到另一个边的第一个183,再反方向扫描,这是很多操作系统采用的方法。

图10:单向扫描

最后就得到了生磁盘的使用方法:

图11:生磁盘使用整理

 

文件映射

在上面每个进程通过发送盘块号来访问磁盘,但是用户看见和使用的是文件,不是盘块号,所以操作系统需要再进行一次封装,把文件和盘块号进行一种映射,从而达到访问磁盘的目的。

所有的文件都是字符流,而音频,视频,图片都是相应字符流的不同展现形式。所以对文件的读写其实就是对字符流的操作,而这些字符流通过操作系统映射成对应的盘块号,进行数据的访问。

原创粉丝点击