认识磁盘
1.磁盘
1.1 前言
计算机的功能主要为:计算、存储和网络。而用于计算的数据以及计算后的结果很大一部分都需要存储起来,以备后续再次使用。向磁盘中存储和读取的过程叫磁盘 I/O。磁盘的读取方式和速度会严重影响到整个业务的计算性能。
1.2 认识磁盘
下面我们简单了解一下磁盘是如何工作的。
磁盘大概长这个样子:
磁盘主要由磁盘盘片
、传动手臂
、读写磁头
和马达
组成。为了存储容量,主轴像穿糖葫芦一样把多个磁盘片组成一个阵列。通过马达驱动主轴转动以及传动手臂移动,使读写磁头在磁盘片上读写数据。大概如下:
磁盘盘片(platter)
磁盘盘片是由坚硬金属材料制成的涂以磁性介质的盘片,这些磁性物质用来记录二进制数据,不同容量硬盘的盘片数不等。因为正反两面都可涂上磁性物质,故一个盘片可能会有两个盘面。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。它们从上至下从“0”开始依次编号。
磁道(track)
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。这些磁道用肉眼是根本看不到的,因为它们仅是盘面上以特殊方式磁化了的一些磁化区,磁盘上的信息便是沿着这样的轨道存放的。相邻磁道之间并不是紧挨着的,这是因为磁化单元相隔太近时磁性会相互产生影响,同时也为磁头的读写带来困难。磁道从外向内从0开始顺序编号。数据就是写在这些磁道上。如下:
扇区(sector)
一个盘面划分为若干内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫一个扇区。
扇区是磁盘的最小组成单元,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节。
为了对扇区进行查找和管理,需要对扇区进行编号,扇区的编号由外向内从0磁道开始,起始扇区为1扇区,其后为2扇区、3扇区……,0磁道的扇区编号结束后,1磁道的起始扇区累计编号,直到最后一个磁道的最后一个扇区(n扇区)。
在老式硬盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代硬盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的 3D 寻址方式,现代硬盘控制器中都有一个地址翻译器将 3D 寻址参数翻译为线性参数。
硬盘在进行扇区编号时与软盘有一些区别,在软盘的一个磁道中,扇区号一次编排,即1、2、3……n扇区。由于硬盘的转速较高,磁头在完成某个扇区数据的读写后,必须将数据传输到微机,这需要一个时间,但是这时硬盘在继续高速旋转,当数据传输完成后,磁头读写第二个扇区时,磁盘已经旋转到了另外一个扇区。因此在早期硬盘中,扇区号是按照某个间隔系数跳跃编排的。
3D 寻址参数:×× 磁道(柱面),×× 磁头,×× 扇区
柱面(cylinder)
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号(相同半径)的磁道形成一个圆柱,所以就是不同盘片相同半径的磁道所组成的圆柱称为柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,柱面数等于磁道数。
1.3 磁盘容量计算
扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参 数,这些参数可以得到硬盘的容量,基计算公式为:
存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
如上图,,磁盘是一个3个磁盘、6个磁头、7个柱面(每个磁盘有7个磁道)的磁盘,每条磁道有12个扇区,所以磁盘的容量为:
6 * 7 * 12 * 512 = 258048(字节)
每个磁道的扇区数一样是说的老的硬盘,外圈的密度小,内圈的密度大,每圈可存储的数据量是一样的。新的硬盘数据的密度都一致,这样磁道的周长越长,扇区就越多,存储的数据量就越大。
并且:
数据的读/写按柱面从外向内进行,而不是按盘面进行。是因为虽然每个盘面对应一个磁头。但是所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。
1.4 磁盘读取
扇区编号定义:由前面介绍可知,我们可以用柱面 + 磁头 + 扇区来唯一定位磁盘上每一个区域,或是说柱面/磁头/扇区与磁盘上每一个扇区有一一对应关系,通常 DOS 将“柱面/磁头/扇区”这样表示法称为“绝对扇区”表示法。
但 DOS 不能直接使用绝对扇区进行磁盘上的信息管理,而是用所谓“相对扇区”或“DOS 扇区”。
“相对扇区”只是一个数字,如柱面 140,磁头 3,扇区 4 对应的相对扇区号为 2757。该数字与绝对扇区“柱面/磁头/扇区”具有一一对应关系。当使用相对扇区编号时,DOS 是从柱面 0,磁头 1,扇区 1 开始(注:柱面 0,磁头 0,扇区 1 没有 DOS 扇区编号,DOS下不能访问,只能调用 BIOS 访问),第一个 DOS 扇区编号为 0,该磁道上剩余的扇区编号为 1 到 16(设每磁道 17 个扇区),然后是磁头号为 2,柱面为 0的 17 个扇区,形成的 DOS 扇区号从 17 到 33。直到该柱面的所有磁头。然后再移到柱面 1,磁头 1,扇区 1 继续进行 DOS 扇区的编号,即按扇区号,磁头号,柱面号(磁道号)增长的顺序连续地分配 DOS 扇区号。
DOS:磁盘操作系统(Disk Operating System)
如果现在要读取某一位置的数据,磁盘需要:
- 寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms,一般都在10ms左右。
- 旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。普通硬盘一般都是7200rpm,慢的5400rpm。
- 数据传输时间:完成传输所请求的数据所需要的时间。
1.5 磁盘块/簇、page
扇区是硬盘数据存储的最小单位,但操作系统无法对数目众多的扇区进行寻址,所以操作系统就将相邻的扇区组合在一起,形成一个簇,然后再对簇进行管理.每个簇可以包括2、4、8、16、32、64个扇区。簇有时也称作磁盘块(block)。它是属于文件系统层面的概念,是文件系统层中数据存储的基本单位
“簇”是DOS进行分配的最小单位。当创建一个很小的文件时,如是一个字节,则它在磁盘上并不是只占一个字节的空间,而是占有整个一簇。
DOS视不同的 存储介质(如软盘,硬盘),不同容量的硬盘,簇的大小也不一样。簇的大小可在称为磁盘参数块(BPB)中获取。簇的概念仅适用于数据区。 磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。在磁盘上,DOS操作系统是以“簇”为单位为文件分配磁盘空间的。硬盘的簇通常为多个扇区,与磁盘的种类、DOS 版本及硬盘分区的大小有关。每个簇只能由一个文件占用,即使这个文件中有几个字节,决不允许两个以上的文件共用一个簇,否则会造成数据的混乱。
这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易,但也造成了磁盘空间的浪费,尤其是小文件数目较多的情况下,一个上千兆的大硬盘,其浪费的磁盘空间可达上百兆字节。 (1)“簇”是DOS进行分配的最小单位。 (2)不同的存储介质,不同容量的硬盘,不同的DOS版本,簇的大小也不一样。 (3)簇的概念仅适用于数据区。
已经有了扇区,为什么还需要簇?
读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。
page
操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。所以,与内存操作,是虚拟一个页的概念来作为最小单位。与硬盘打交道,就是以块为最小单位。
扇区、块/簇、page的关系
- 扇区: 硬盘的最小读写单元
- 块/簇: 是操作系统针对硬盘读写的最小单元
- page: 是内存与操作系统之间操作的最小单元。
扇区 <= 块/簇 <= page
1.6 整体描述
下面我们用几张图来整体描述磁盘相关知识点:
磁盘由磁盘盘片
、传动手臂
、读写磁头
和马达
组成。为了存储容量,主轴像穿糖葫芦一样把多个磁盘片组成一个阵列。通过马达驱动主轴转动以及传动手臂移动,使读写磁头在磁盘片上读写数据。
数据的读/写按柱面从外向内进行,而不是按盘面进行。是因为虽然每个盘面对应一个磁头。但是所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。
在磁盘中,磁道被分为多个内角相等的区域,这个区域叫做扇面,在扇面中, 每一条被划分的磁道被称为扇区。
根据×× 磁道(柱面)(找第几个磁道),×× 磁头(找到第几个磁盘),×× 扇区(找到对应的区域)能定位磁盘上每一个区域。
磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。在磁盘上,DOS操作系统是以“簇”为单位为文件分配磁盘空间的。硬盘的簇通常为多个扇区,与磁盘的种类、DOS 版本及硬盘分区的大小有关。
如果磁盘是一记事本,那么一张磁盘片就是本子的一页纸,而主轴就是本子的装订线;磁道就是纸页的行,而扇区可以看作是很宽的列。
如果在磁盘中存储一首诗,想象中大概这个样子。
磁盘的读 I/O 操作,需要找到数据所在的磁盘片,以及对应的磁道和扇区。这些操作类似于从一本书中找到数据所在的页,行,列。
因为每个磁盘片都对应一个磁头,所以性能的关键就在于找行和列,即寻道和磁盘旋转。寻道即通过磁头找到数据所在的磁道,相当于换行到数据所在行。由于磁头只能水平移动,即只能换行寻道,无法在指定磁道上移动,因此需要磁盘高速旋转移动到指定扇区,类似写春联时,笔不动,纸动。
综上所述,磁盘的读写是通过机械运动来定位数据所在位置,而 cpu 是通过电信号进行数字运算。粗略的认为,机械查询数据,与光速处理数据的性能完全不是在一个量级,总之一句话就是磁盘处理太慢太慢了。
虽然磁盘处理数据太慢了,但是它是目前相对廉价且稳定的存储设备,所以又不能舍弃不用,但大致可以通过以下方法进行优化。
- 尽量减少 I/O 次数,比如可以使用缓存;
- 每次 I/O 尽量获取更多的数据;
- 每次 I/O 尽量获取有用的数据,当然相应的也间接减少总 I/O 次数;
1.7 4K对齐
早期的硬盘一个扇区的大小是512个字节,后来随之磁盘容量的不断增加和读写效率提升的要求,将每个扇区的大小调整为4096个字节,也就是4KB,这种扇区又叫4K扇区。4K对齐指的就是对磁盘分区时,让分区的起始扇区位于某一个4K扇区的起始位置。所以分区起始位置只要是4096的倍数就是4K对齐了。
Read more
https://cloud.tencent.com/developer/article/1129947
https://blog.csdn.net/xiaominthere/article/details/19756551
https://blog.csdn.net/t_1007/article/details/53032682
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,不用于任何的商业用途。如有侵权,请联系本人删除。谢谢!