Hola,我是 yes。
硬盘这东西想必我们都相当的熟悉,它存放了我们很多 学习资料 ,还经常因为访问速度慢而被诸多文章拿出来“鞭挞”。
我找了个网站(文末贴链接),这个网站展示了从 1990 开始到 2020 不同介质数据访问的延迟时间,我翻了一遍介质自身速度的数量级没有变化,内存访问延迟从 207ns 到 100ns,硬盘从 19ms 到了 2ms,但是介质之间的访问速度还是差了几个数量级。
不过上述我圈出来的是随机访问,顺序访问的话不会差这么多,想要知道为什么,那就需要了解下硬盘的构造。
当然, 我今天提到的硬盘指的是机械硬盘 ,固态硬盘本文暂不涉及。
之所以写这篇文章是因为我之前一直对磁道、柱面、扇区等一些东西存在疑惑,比如:
所以今儿咱们来理一理,按照我的习惯我们还是先简单的看下历史。
1956 年 9 月 14 号,世界第一台磁盘存储设备 IBM 305 RAMAC 诞生,这个设备用盘片来存储数据,用磁头来读写数据,不过碍于当时的技术,这体积确实有点大,大约有两个冰箱那么大,来看下图就知道了。
中间的历史我看了看对我们没啥用,咱们就快进到 1973 年,那年搭升 IBM 推出了一个代号称为 「温切斯特」的硬盘。
这种硬盘的特点就是磁头和磁片装在一个密闭空间里,当磁片高速自传之后磁头会因为空气动力而悬浮起来,然基粗后磁头臂会 *** 作磁头沿着盘片划圆弧状移动。
咱们现在的机械硬盘就是这样运行的,这么多年过去了,还是典型的“温切斯特”结构,也称为温盘。
至于为什么取这个代号,是因为当时研究出来的那个硬盘拥有两个 30MB 的存储单元,而「温切斯特来福q」的口径和装药也刚好都是 30 ,所以代号就为 「温切斯特」。
历搏枝镇史咱们就了解到这一步差不多了,接下来看看硬盘的内部结构。
先来看看硬盘的真实样子,我就标注了一些重点部位。
我先简述一下硬盘是怎么运行的。
通电之后主轴带动盘片开始旋转,到达一定转速之后磁头就会悬浮在盘片上方,然后磁头臂就可以控制磁头做圆弧形的移动,通过盘片的旋转和磁头的移动就可能访问到盘片上任意地方的数据。
首先磁头和盘片触碰的话就会有摩擦,摩擦久了之后肯定会有磨损,磨损了之后数据不就没了?
其次有摩擦力之后转速肯定就慢了,那磁盘的访问速度也就慢了。
所以悬浮很关键,而磁头悬浮的高度比头发丝还细,约 0.1微米,如果有灰尘进去可能会导致磁头和盘片磨损,这也是硬盘需要密封的原因。
是的,你说的没错,所以人们就想了个法子,也就是磁头停靠点,也就是上面图中画的地方。
当通电之后等达到一定转速磁头才会移动到盘片上,等断电之后靠着电容剩余的电量会把磁头移到停靠处,这样每次启动就不会磨损啦!
还有一种停靠方式是在盘片内圈搞了个不存数据的地方,材质都不一样,专门给磁头停靠。
为了在公众号插入视频,我还在腾讯视频上传了个视频,来自维基百科的硬盘运行视频,这个视频硬盘的停靠应该就是第二种方式。
来看下这个视频
https://v.qq.com/x/page/w3222s68yv5.html
大致清晰硬盘是如何运行之后,我们再来深入一下。
这里我本来想自己画图的,但是个人画画水平有限,人家画的太好了...所以就搬来了,哈哈哈。
先来看下盘面。
A 就是磁道,盘面就是由磁道这样的一组同心圆构成,注意是标红部位,是个环,有横截面的,有些参考书标记到线上去了....
B 是扇面,C 就是扇区,每个磁道都会被划分成一组扇区,每个扇区包含相等数量的数据位,一般为 512 字节,是硬盘存储数据最基本的单位。
D 是簇,即多个扇区组成的,像 DOS 就是以簇为单位为文件分配磁盘空间的。
从图中看,扇区好像是连续着的,其实不然,扇区之间其实有间隙,这些间隙是用来标识扇区的格式化位的,不会存储数据。
不知看到这大家是否有点疑惑,每个扇区包含相等的数据位,那 明显距离圆心更近的同心圆扇区看起来能存的数据比最外围的扇区小很多 ,那岂不是外围的数据位要迁就最内部的?
是的。为了让每个磁道都有相等的扇区数,外圈磁道的扇区之间间隔很大,不过以前硬盘的数据存储密度很低,所以还能接受。
而随着硬盘存储密度的上升这样就造成了极大的浪费,因此就搞了个 zoned-bit recording 技术,目的就是在外圈磁道上放置比内圈磁道更多的扇区,看下这个图就明白了。
具体怎么实现我就不展开了,这不重要。
重要的是解惑, 并不是像有些书上说的,死板的按照最内圈的扇区数来确定所有磁道的扇区数 。
硬盘通常由一个或者多个盘片组成。
例如下图就有三个盘片,每个盘片有上下两个盘面,对应的会有六个磁头。
磁头号从上到下以 0 开始计数,由磁头臂带领着磁头做圆弧形运动。每个盘面的磁道也由 0 开始计数,相同编号的磁道组成的区域称之为柱面,发挥下想象力应该可以 get 到,我再贴个图助力一下。
因为几个磁头其实都是依靠同一个磁头臂运动的,所以要转就一起转,并且都是一个角度。
因此想要数据读取的快,那么数据就应该在统一柱面上顺序存储,比如最上面的盘面的第 1 个磁道上写不下了,那继续写到背部的第二个盘面上,这样磁头臂只要寻道一次即可,读数据的时候也只要寻道一次即可。
从这里我们也可以知道如果 一个硬盘的盘片越多,速度就越快 。
从上文我们已经知道硬盘是以扇区为基本单位的,所以硬盘的访问就是要找到对应的扇区。
盘片的表面是磁性的,盘片随着主轴旋转而转动,当要访问某个扇区的时候首先要转动磁头臂找到对应的磁道,这叫 寻道时间 。
这时盘片还是在旋转中的,磁头可以感知到下方数据位上的值,等旋转到目标扇区的时候就晓得该读/写数据了,这个时间称为 旋转时间 ,所以我们买硬盘的时候会看到 7200RPM、15000RPM 啥的,转的越快磁盘找到扇区的时间就越短。
最后就是读取数据的 传送时间了 。
所以硬盘数据访问延迟就是这三个时间相加,而最慢的就是寻道时间,我给下 CSAPP 提供的数据:
当然不同的硬盘总延时肯定不一样,反正知道寻道时间最慢就行了。
从上述的物理结构我们已经知道需要找到盘面,再找到磁道,最后找到扇区才能读取数据,有点复杂。
没必要把这么不友好的访问姿势暴露给 *** 作系统,所以就搞了个逻辑磁盘块,屏蔽了底层访问的细节,提供编号 0 、1、2.....n 这样的逻辑块序列来对应具体的物理块。
这样 *** 作系统要访问磁盘就很舒服了,不过最终还是要找到对应的扇区的,而 磁盘控制器 就维护了逻辑块和实际物理扇区的映射关系。
磁盘控制器属于硬盘里面的一个硬件,它会将逻辑块翻译成:盘面、磁道、扇区这么一个三元组 。
至此平时我们说的逻辑块与硬盘的物理访问也对应上了。
身为普通程序员我觉得对硬盘的了解到这个地步就差不多了,该知道的都知道了。
如果有什么纰漏指出欢迎指正!
我是 yes,从一点点到亿点点,欢迎在看、转发、留言,我们下篇见。
https://colin-scott.github.io/personal_website/research/interactive_latency.html (各介质延迟的网站)
https://en.wikipedia.org/wiki/Zone_bit_recording
https://en.wikipedia.org/wiki/Hard_disk_drive
https://zh.wikipedia.org/wiki/%E7%A1%AC%E7%9B%98
《深入理解计算机系统》
作为现在这个信息高速发展的时代,电脑可谓是发展了很大的作用,就比如喜欢打游戏的朋友,程序员,毕业工作的朋友都需要用到电脑,而电脑里面硬件大概也就是显卡,cpu,硬盘等,其中很多人疑惑为什么电脑最容易坏的地方是硬盘?因为硬盘调取是无时无刻进行的,尤其是针对机械硬盘,我们来分析看看吧。
电脑的硬盘就是装东西的地方,它分为两种,固态硬盘以及机械硬盘,其中原理运行并不一样,就比如固态硬盘靠的是颗粒让游虚,但是机械硬盘靠的是指针的打转读取文档,尤其是对于机械硬盘对于随机访问数据有着很大的问题,很容易会报销的,所以很多时候程序员第一要处理的就是数据库里面的随机访问问题,当然这里虽然说得比较偏了,但确实就是这样,而固态硬盘的的读取速度比机械硬盘快很多,一般都可以达到500m每秒的速度。
这是一个什么概念呢?平时我们现在所用的usb3.0的速度也就7m每秒的样子,至少也是他的八倍速度,而且这只是一般的固态硬盘,也就是以前的那些stat111的接口,如果是磨岩m.2的读取速度会更快,可以带来更好的体验感,但是同时也给硬盘带来了很大的压力,毕竟只要电脑启动就要无时无刻地进行文件的读取写入等。
这个时候硬盘就是最容易出问题的地坦燃方,而且硬盘内部不稳定,可摔不得,所以经常会看到笔记本开始报错,找不到硬盘,就是很可能因为被摔了,导致硬盘里面出问题了,但是修硬盘成本贵,如果灭有很重要的文件,建议还是买一个二手的品牌硬盘就行了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)