上一篇文章我们介绍了I/O设备,在本篇文章我们将介绍磁盘驱动器。磁盘驱动器一直是计算机系统中数据持久存储的主要形式。文件系统构建在磁盘驱动器的功能之上,磁盘驱动器的功能是文件系统实现的基础。
磁盘这里我们指的是机械硬盘,由一组(一片或多片)圆形盘片组成,这些盘片围绕主轴连在一起。盘片由硬质材料(比如铝)制造而成,盘片的两面都图上薄薄的磁性层,用于持久存储数据位。盘片上一个个同心圆称作磁道,一个盘面上有数以百万计的磁道,这些磁道紧密的排列在一起。一个磁道划分为一个个的扇形,称为扇区。每个扇区存储512个字节块的数据。一个磁盘盘面上有n个扇区,则扇区编号从0到n-1。
为了读取或写入磁盘盘片上的数据,因此需要机械磁盘臂上的磁头。每个磁盘盘片两面各有一个磁盘臂和磁头。磁盘工作时盘片围绕主轴高速旋转,如7200RPM、10000RPM和15000RPM等,即每分钟旋转7200转、10000转和15000转。磁头在磁盘臂上悬在磁盘盘片上读取或写入数据。磁头需要等待所期待的扇区旋转到磁头下时才能进行读写。这个等待的时间称作旋转延迟。在磁头等待所期待的扇区之前,磁盘臂需带动磁头定位到正确的磁道上,这称为寻道。当期待的扇区经过磁头时,I/O的最后一步是传输数据,即磁头从磁盘盘片表面读取或写入数据。一次读取或写入多个扇区是可能的。磁盘驱动器制造商可以保证写入扇区512字节数据是原子的,即要么完整的写入每个扇区的512字节,要完全不写入。
对于磁盘驱动器,通常会有一些假设。通常假设访问磁盘中相邻的块比访问两个相隔很远的块更快。人们通常也假设访问连续块比随机访问快得多。通常外圈磁道比内圈磁道具有更多的扇区,因为外圈磁道比内圈磁道面积大,能容纳更多的扇区。
磁盘驱动器都有缓存(cache)这个重要的组成部分,又称为磁道缓冲区(track buffer),其容量通常为8MB或16MB。磁盘驱动器用缓存来保存从磁盘上读取或向磁盘写入的数据。为了快速响应后续对同一磁道的访问,磁盘驱动器可能会读取磁道上所有的扇区并缓存到存储器中。在写入数据时,磁盘驱动器可以有两种选择:决定是在将数据写入缓存后(后写),或是实际写入磁盘后(直写),来报告数据写入完成。虽然后写使驱动器看起来更快,但可能有危险。
磁盘驱动器市场有两个重要部分。一个是注重高性能(如是SCSI接口),即驱动器设计的尽可能的块,寻道时间短,传输速度块。另一个是注重容量(如是SATA接口),即磁盘容量较大,但速度较慢。
每个磁盘访问请求需要花费的时间不同,有长有短。因此磁盘调度程序选择先服务花费时间最少的磁盘访问请求,其遵循的原则称为最短任务优先原则(SJF)。磁盘调度程序算法有最短寻道时间优先(SSTF)、电梯算法(elevator)、最短定位时间优先(SPTF)等。SSTF算法先对I/O请求按磁道进行排序,选择最近的磁道上的请求先处理。电梯算法以跨越磁道的顺序来处理磁盘请求。SPTF算法按定位扇区时间最短的磁盘请求先服务。