本文是操作系统系列的第四篇,以下是文章目录
浅入理解计算机系统(1)- 操作系统的两个基本功能和三个抽象概念
浅入理解计算机系统(2)- 程序的机器级表示
浅入理解计算机系统(3)- RAM和ROM,处理器和主存的那些事
浅入理解计算机系统(4)- 你可能不知道的磁盘存储的那些事
磁盘,日常生活中可能更常见地被称为硬盘。大多数看到这篇文章的人应该都知道机械硬盘(Hard Disk Drive , HDD)和固态硬盘(Solid State Drive, SSD)。 HDD普遍分为5400转和7200转等,价格相较于SSD更便宜,但性能比SSD要差不少。那么这是为什么呢?本文章将为大家揭秘磁盘背后的工作原理。
为了避免混淆,下文中将使用磁盘代替机械硬盘(HDD),相信阅读完后也会知道为什么会叫做磁盘。
磁盘构成
主轴(spindle)
磁盘包含一个或多个盘片,并封装在一个密封的容器内。盘片的中央有一个可以旋转的主轴,它使得盘片以固定的速率旋转,通常是5400~15000转每分钟。
盘片(platter)
每个盘片有两面或者称为表面,表面覆盖着磁性记录资料。
图片来源《深入理解计算机系统》
磁道(track)
每个盘片表面是由一组称为磁道的同心圆组成的,每个磁道被划分为一组扇区。
扇区(sector)
每个扇区包含相等数量的数据位(通常512字节),这些数据编码在扇区的磁性材料中,扇区之间由一些间隙分隔开。
间隙(gap)
间隙不存储数据位,而是用来标识扇区的格式化位。
图片来源《深入理解计算机系统》
磁盘容量
记录密度(recording density)
磁道一英寸的段中可以放入的位数。
轨道密度(track density)
从盘片中心出发半径上一英寸可以有的磁道数量。
面密度
记录密度与轨道密度的乘积。
磁盘操作
磁盘用读/写头来读写存储在磁性表面的位,而读/写头连接到一个传送臂一端,沿着半径轴前后移动这个传送臂,驱动器可以将读/写头定位到盘面的任意一个磁道上,当磁道上的每个位通过它的下面时,读/写头可以感知到这个位的值(读操作),也可以修改这个位的值(写操作)。
在有多个盘片的磁盘中,每个盘面都有一个独立的读/写头,并且这些读/写头垂直排列,一致行动,在任何时刻,所有的读/写头都位于同一个柱面上。
图片来源《深入理解计算机系统》
磁盘读写
寻道时间(seek time)
为了读取某个目标扇区的内容,传送臂首先将读/写头定位到包含目标扇区的磁道上。移动传送臂所需要的时间称为寻道时间。
旋转时间(rotational latency)
读/写头到达期望磁道后,驱动器等待目标扇区的第一个位旋转到读/写头下。这个步骤的性能依赖于读/写头到达目标扇区时盘面位置以及磁盘的旋转速度。
换句话说,读/写头需要从扇区的头部(第一个位)开始读,而读/写头大概率不会刚好落在头部,所以需要旋转盘面使读/写头落在头部。
传送时间(transfer time)
当目标扇区的第一个位位于读/写头下时,驱动器就开始读或者写该扇区的内容。一个扇区的传送时间取决于旋转速度和每条磁道的扇区数目。
图片来源《深入理解计算机系统》
逻辑磁盘块
逻辑序列
现代磁盘结构复杂,有多个盘面,这些盘面上有不同的记录区。为了对操作系统隐藏这样的复杂性,现代磁盘将它们的构造呈现为一个B个扇区大小的逻辑块的序列,编号为0, 1, …, B-1。
磁盘控制器
磁盘封装中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)磁盘扇区之间的映射关系。
当操作系统想要执行一个I/O操作时,例如读一个磁盘扇区中的数据到主存,操作系统会发送一个命令到磁盘控制器。控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面、磁道、扇区)的三元组,这个三元组唯一标识了对应的物理扇区。
固态硬盘(Solid State Disk,SSD)
SSD基于闪存的存储技术,行为和其他硬盘一样,处理来自CPU的读写逻辑磁盘块的请求。
基本构成
一个或多个闪存芯片
用于替代传统旋转磁盘的机械驱动器。
闪存翻译层
一个硬件/固件设备,扮演磁盘控制器的角色,将CPU对逻辑块的请求翻译成对底层物理设备的访问。
闪存在操作系统系列第三篇文章中有详细介绍,感兴趣可以回头看下,此处不过多展开。
磁盘相关内容基本介绍完毕,接下来以磁盘是如何连接到CPU和主存的内容进行结尾。
I/O总线
I/O总线相比系统总线和内存总线较慢,但是它可以容纳种类繁多的第三方I/O设备。图形卡、监视器、鼠标、键盘和磁盘等输入/输出(I/O)设备,都是通过I/O总线连接到CPU和主存的。例如Intel的外围设备互联总线(Peripheral Component Interconnect,PCI)。
PS: PCI这样的I/O总线设计与底层CPU无关,这一点与系统总线和内存总线不同。例如PC和MAC都可以适用PCI总线。
通用串行总线(Universal Serial Bus,USB)
连接到USB总线的设备的中转机构。USB总线是一个广泛使用的标准,连接各种外围I/O设备,包括键盘、鼠标、调制解调器、数码相机、游戏操纵杆、打印机、外部磁盘驱动器和固态硬盘。
图形适配器
包含硬件和软件逻辑,负责代表CPU在显示器上画像素。
主机总线适配器
将一个或多个磁盘连接到I/O总线,使用的是特别的主机总线接口定义的通信协议。例如SCSI和SATA,SCSI磁盘通常比SATA驱动器更快但是也更贵。SCSI控制器支持多个磁盘驱动器,SATA只能支持一个驱动器。
其他设备
例如网络适配器,可以通过将适配器插入到主板上空的扩展槽,从而连接到I/O总线,这些插槽提供了到总线的直接电路连接。
本文内容源自《深入理解计算机系统 第三版》以及本文作者的个人理解补充,只涉及一些个人认为重要概念和协作原理的描述,并不深入剖析每一个点。
如果有不准确或者错误的地方欢迎评论指出。
感谢你的阅读。