磁盘原理简析

欢迎 wx 关注 SH 的全栈笔记

磁盘是一个东西,即使我们不是开发人员,我们也会经常处理它。例如,您家中的台式电脑,或者您用于办公的电脑,或者如果您安装了操作系统,都会涉及到磁盘分区。

作为开发者,自然会更加关注磁盘。

通常你开发的代码会临时存储在磁盘上; MySQL,开发中使用最多的数据库,它的数据是持久化到磁盘的; Redis 的持久化数据落到磁盘上;在内存中的数据、事务日志和快照会被持久化到磁盘;这样的消息队列也会将接收到的数据持久化到磁盘,Kafka当然也不例外;

可以说,磁盘与我们的发展息息相关。但也许在平时的开发中,很多人会忽略磁盘的存在,因为虽然关系密切,但遗憾的是,并没有直接关系。因为上面提到的所有磁盘相关的内容都是工具帮我们完成的,甚至包括你的代码。

感觉就像鱼(可能)不太注意水,而我们通常不太注意氧气。

我们可能听说磁盘 IO 很慢,为什么?我们可能听说磁盘顺序 IO 更快,为什么呢?我们可能听说顺序 IO 到磁盘甚至比随机 IO 到内存还要快,为什么?

也许这些问题,我们可能无法做出明确的解释,这也是我要讲磁盘的原因。

磁盘分类

首先,按照原理,磁盘可以分为三类:

本文的重点将放在硬盘上。

场景切入

首先,切入一个很简单的场景,如下:

图片[1]-磁盘原理简析-唐朝资源网

您正在在您的计算机上创建一个文件并在其中写入一些内容。然后你在N天后打开电脑,看到文件还在(废话)。这其实就是把数据持久化到磁盘上,下次需要文件的时候从磁盘上取。

我们完全不知道这个存入和取回的过程。我们知道安装机器的时候已经安装了硬盘,其他的就不知道了。

磁盘结构

磁盘是什么样的?它是如何存储文件的?它以什么方式存储?看一张有这样问题的图:

图片来自

结合上面的结构图可以看出,现代主流磁盘的设计是在一个(主轴)上,有一些(磁盘),然后磁盘会围绕主轴旋转,然后读写数据由读写头实现,读写头安装在磁头臂上,磁头臂可以旋转覆盖盘片的所有半径,结合主轴的旋转,使磁头可以获取盘片上任意扇区的数据。

那你可能会好奇,这张盘是怎么做的,又是怎么设计用来存储上面提到的文件的呢?

请注意,当今的大多数磁盘盘片都是由非磁性材料制成的,通常是铝合金、玻璃或陶瓷。在你的印象中,它们可以用来存储文件吗(再次手动?狗头)

既然提到了非磁性,那答案肯定和磁性有关……

光盘结构

是的,两个表面都会涂上一层薄薄的磁性材料,到底有多薄?它大约是10-20纳米,然后涂上一层碳进行保护。这层薄薄的磁性材料是存储数据的关键

图片[2]-磁盘原理简析-唐朝资源网

磁性材料

一个磁盘一般有多个盘片,刚才提到的磁性材料盘片有两面。也就是说,盘片的两面都可以用来存储和读取数据。

既然我们知道数据实际上存储在磁性材料上,那么这里还有一个问题:“磁盘如何知道,数据应该存储在哪种磁性材料上?应该从哪里读取数据?多少? ”

这个原理其实和我们的地图差不多。比如说中国那么大,我们怎么才能把某个地方描述的清楚准确呢?其实大家都知道答案,那就是分层分类。

比如网购让你填写的收货地址是这样的,比如“四川省-成都-xx区-xx街-x楼x-xxxx房间”,这样的分层逻辑可以直观代表具体具体位置,地区不用多说,先到中国西南,到市区继续往西走,大概过了好久,再往南走,运气好的话会能够。找到那个地址了(又是手动狗头)。

盘片上都做了类似的事情,我们先看图:

盘片结构

中间的黑点为主轴,以主轴为中心分为多条轨道(为方便理解,图中只给出了3条轨道),每条轨道又分为多条区域,每个区域称为一个扇区,每个扇区的大小固定为 512 字节。读取数据时,只需要通过这个划分知道数据在哪个磁道和哪个扇区。

但是从上图还是可以看出一个问题:就是不同磁道的扇区数是一样的,而扇区所在磁道的半径大约越大,磁道的面积越大部门。但是,无论该区域比内磁道的扇区大多少,按照设计和规定,只能存储512字节的数据,这样会浪费很多存储空间。

为了优化这个问题,有一个ZBR技术方案。

图片[3]-磁盘原理简析-唐朝资源网

ZBR,全称Zone Bit,用于解决传统磁盘磁道扇区存储空间浪费的问题。它是如何做到的?也很简单,越靠近外磁道的扇区面积越大,所以ZBR会放置更多的扇区来利用空间。

到图形的转换可能如下所示:

盘片的ZBR

不同磁道扇区数不同的是外磁道上的扇区会更多,这样可以充分利用空间,增加磁盘的总容量。

存储原理

好的,继续深挖磁盘存储相关的问题。

我们知道,从宏观角度来看,计算机并不在乎你是谁,一切都与它有关。那么当一个文件被读取的时候,它是如何从这层磁性材料中识别出来的,然后还原成我们可以理解的文件呢?

我们前面知道,盘片分为磁道和扇区,对应的磁性材料也是如此。现代磁盘通过磁化盘片两侧的磁性材料来记录数据,磁性材料顺序的变化代表对应的二进制0、1。

磁序原理

可以看出,如果两个磁铁的序列方向不同,则标记为R(),如果相同,则标记为N(No),读取时,如果检测到的序列为RR,它对应1,如果是NR,就对应0(也许这就是为什么叫磁盘,然后再手动dog head)

所以,我们常说的写磁盘,并不是说读写磁头在磁盘上刻上什么东西,而是改变磁性材料的顺序,读写磁头不直接接触磁盘。磁盘。它们的直径约为 10 nm。距离。

而且,从上面的现状,我们可以简单的推论出,既然读写盘都是靠读盘片上的磁序,而且盘片的两面都可以用来存储数据,那么盘片肯定是有的两边各有一个头。

磁盘性能

在了解了一些简单的原理之后,我们终于可以理解与磁盘性能相关的问题了。我们将分析为什么磁盘 IO 是一项非常昂贵的操作。

现在想一个问题,我们要查询数据,底层会做什么?会不会:

总结一下,磁盘的IO请求时间主要由三部分组成:

这里提到了旋转的问题。在磁盘旋转延迟中,磁盘旋转得越快,对应的扇区就会越快移动到磁头。

现代磁盘的转速为 5400 或 7200 RPM(每),但也有一些高性能服务器的转速高达 1500 RPM。

盘片的旋转延迟确实和速度有关,因为速度越快,对应扇区移动到磁头位置的速度越快。但并不是说转速越快越好,因为转速越高,发热越严重,磁盘寿命越短。

以下是不同速度下对应旋转延迟的参考:

旋转速度(单位RPM)平均旋转延迟(单位毫秒)

4800

图片[4]-磁盘原理简析-唐朝资源网

6.25

5400

5.55

7200

4.16

10000

3

15000

2

(以上数据来自)

p>

也许你看到几毫秒就觉得还行,没那么慢,但是你拿内存的速度对比一下就可以马上明白。内存的随机读取大约是几百纳秒。假设内存的速度为200ns,磁盘的速度为2ms(根据上表中速度最高的延迟计算),相差10000倍,也就是4个数量级。

至此,我想我们也可以理解为什么磁盘的顺序读写可以与内存的随机读取竞争了。因为磁盘的顺序读写几乎干掉了前两个最耗时的操作,磁头已经移动到对应的磁道上,找到了对应的扇区,直接写就完成了。

好了,磁盘的原理就简单介绍到这里了。

© 版权声明
THE END
喜欢就支持一下吧
点赞56赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容