磁盘存储原理:从电与磁说起

一、磁盘的电磁原理:

1、电磁效应:

电流通过导体时,会在导体的周围会产生感应磁场。感应磁场的磁极随电流方向的改变而改变。

电磁效应.png

2、电磁感应:

当闭合电路内的磁场发生变化(磁通量变化)时,闭合电路内会产生感应电动势。即闭合电路内磁场的变化会使电路内产生感应电流。 电流的方向与磁极方向有关。

电磁感应.jpg

3、磁盘的写过程:

磁头的结构:

磁头.png

磁头是一个外面被线圈缠绕着的U型磁芯,可以看出当磁头通电时便会产生磁场,磁场的方向随电流方向的变化而变化。

磁盘的结构:

磁盘的表面涂有一层磁性物质,在未受到外部磁场影响的情况下磁盘表面的磁性粒子的磁极方向是不会改变的。一般从未受到外部干扰的磁性粒子磁极方向是随机的,于是出现互相抵消的情况,这时磁盘的表现出无磁极显现。

磁盘写的过程:

写数据时磁头移到到磁盘要写入的位置,输入电流产生感应磁场。受磁场的影响,磁头下磁性粒子的磁极方向变为与磁场同向。如此通过给磁头不同的电流方向,使得磁盘局部产生不同的磁极,产生的磁极在未受到外部磁场干扰下是不会改变的。如此便将电信号持久化到磁盘上(当然并不是一个磁极方向代表1另一个代表0).

4、磁盘读取过程:

磁盘2.png

读取磁盘信息时,不通电的磁头在写入数据的位置上移动,上面可知数据在磁盘上就是一些磁极方向不同的微小局部区域,由于各个域的磁极方向不完全同,所以磁头在通过这些不同方向的区域时会产生不同方向的感应电流,这些微弱正负脉冲经过驱动的去噪扩大成为内存中的二进制数据。

在硬盘读写时,读操作是远快于写操作的,而且读/写操作具有完全不同的特性,所以目前的硬盘一般都分离出读和写两个磁头,但原理还是不变的。

绝命毒师第五季第一季中,记录着老白制毒过程的笔记本电脑被警方获得并放到了物证室里。老白利用电磁效应,在物证室外弄了一个大‘磁铁’破坏了笔记本里面的数据,就是上面的原理。

二、磁盘结构

磁盘.png

 硬盘主要由碟片、磁头、电机马达、接口和控制电路控制芯片组成。

1、碟片与磁头:

碟片的表面涂有磁性材料,厚度一般在0.5mm左右。碟片安装在主轴马达的转轴上,工作时碟片在主轴马达的带动下高速旋转。

每个碟片都有正反两面,每一面称为盘面,第1个碟片的正面称为0面,反面称为1面,第2个碟片的正面称为2面,反面称为3面...依次类推。每个盘面都有一个对应磁头负责读写该该盘面上的数据。盘面数和磁头数是相等的。

磁头.jpg

关机时,磁头停留在硬盘的停泊区。当磁盘工作时,磁头移动到盘面上分,依靠磁盘的高速旋转引起的空气动力效应悬浮在盘面上,与盘面的距离不到1微米。磁头在副轴马达的带动下可以在极短的时间内精确的切换到数据所在的磁道。

可以看出磁盘工作是一个极其细致活,哪怕一个灰尘都会造成磁盘的损坏,所以磁盘都是密封的,我们最好不要自行拆装硬盘。 #### 2、磁道

在碟片高速旋转时磁头保持不变,那么就会形成一个圆形的轨迹,这些同心的圆行轨迹就是磁道(Track)。数据保存在磁道上面。每个盘面有多个磁道,磁道之间并不是紧挨着的,因为磁化的单元挨的太近会互相影响。

磁道.jpg

在每个盘面的最外圈的磁道是“0”磁道,向盘心方向依次增长为1磁道,2磁...。数据从最外面的磁道开始存放。

3、扇区

盘面上可以划分出很多的磁道,每条磁道容量从100多到300多kb不等,但我们读写并不会每次都读写这么多数据,所以又将磁道划分为若干更小的弧段,每段称为一个扇区(Sector)。扇区是磁盘进行读写操作的最小单位。

一般磁盘的一个扇区大小为512字节,这也就意味着哪怕我们只存放1字节的数据也会占用磁盘的一个扇区512个字节,读取时也会读取整个扇区的512个字节然后选择需要的哪个字节。

2010年为了提升磁盘的效率和使用率又推出了4k大小的的扇区标准,这样又出现了一个4k对齐问题,后面再讲。

查看磁盘扇区大小:

cat /sys/block/sda/queue/physical_block_size
512

扇区是硬盘的最小操作单位,但扇区对于操作系统来说还是太小了,一般操作系统有自己的硬盘操作最小单位,在linux下一般为4k

查看操作系统IO大小:

tune2fs -l /dev/sda1|grep "Block size"
Block size:               4096

交叉因子 扇区是从1开始编号的而不是0,且扇区号是按照某个间隔交叉着编排,1扇区的后面并不是2号扇区。若1号扇区后面第八个扇区为2号扇区,这个“八”就称为交叉因子。

数据是存放在连续的扇区里(编号连续),系统对磁盘的io操作往往也是落在在连续的扇区。磁盘的旋转速度非常快,如果扇区按物理顺序进行编号,那么当磁头读取完一个扇区后完全来不及定位到下一个连续的下扇区,盘面就已经旋转过了,这时只能等盘片旋转完一圈,这极大浪费了时间,所以用交叉编排来解决这个问题。

交叉因子为1的扇区划分:

扇区.jpg

4、柱面:

 柱面是抽象出来的一个逻辑概念,盘面被划分为1磁道,2磁道,3磁道....,不同盘面上相同编号的磁道组成了一个圆柱面,即柱面(Cylinder)。

柱面.jpg

磁盘读写数据是按柱面进行,即在读写时磁头先寻找到数据所在的柱面(寻找磁道),然后再判断数据所在的盘面。这样大大提升了磁盘的读写效率,因为盘面的确定是电子操作速度非常快,但磁道的寻找需要电动马达带动磁头移到到指定磁道上,是机械操作。

5、磁盘读写耗时:

磁盘读写时耗 = 寻道时间 + 旋转延迟时间 + 操作时耗

寻道时间:读写数据时磁头首先要移到到指定磁道(柱面),这段时间称为寻道时间

旋转延迟时间:当磁头移动到指定磁道后,需要等待要操作的扇区旋转到磁头的下方,这段时间称为转延迟时间

操作时耗:磁头进行读写操作花费的时间

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

不是你的bug

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

不按标准引发的bug

我们曾经在初级和中级培训中给大家详细讲解了Modbus通讯的开发,并多次强调了一定要按照标准协议的要求编写Modbus驱动程序,可是现实中仍然有很多工程师不按照...

2638
来自专栏C/C++基础

CUDA Study Notes

SSE(Streaming SIMD Extensions,单指令多数据流扩展)指令集是Intel在Pentium III处理器中率先推出的。其中包含70条指令...

952
来自专栏乐沙弥的世界

对参数FAST_START_MTTR_TARGET = 0 的误解及设定

--===============================================

693
来自专栏虚拟化云计算

KVM虚拟化与GPU计算的结合实践

我们知道CUDA是由NVIDIA推出的通用并行计算架构,使用该架构能够在GPU上进行复杂的并行计算。在有些场景下既需要使用虚拟机进行资源的隔离,又需要使用物理G...

3616
来自专栏蓝天

Linux的load average的含义

下面文章中的      “  数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU的数目,结果高于5的时候就表明系统在超负荷运转...

834
来自专栏linux驱动个人学习

GPU与CPU的区别

1213
来自专栏AI科技大本营的专栏

浮点峰值那些事儿

本文作者高洋,目前在商汤科技高性能计算组担任总监,对于并行计算颇有心得。本篇为高洋写给高性能并行计算的初学者,核心内容是教初学者用科学手段测量硬件的理论指标。有...

2225
来自专栏炉边夜话

利用Oprofile对多核多线程进行性能分析

在对应用程序不断调优的过程中,除了制定完备的测试基准(Benchmark)外,还需要一把直中要害的利器——性能分析工具。

622
来自专栏开源FPGA

基于FPGA的有限状态机浅析

  前言:状态机大法好,状态机几乎可以实现一切时序逻辑电路。 有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,...

2768
来自专栏瓜大三哥

XDC设计之时钟篇

XDC 与UCF 的最主要区别: XDC 可以像UCF 一样作为一个整体文件被工具读入也可以在实现过程中被当做一个单独的命令直接执行。这就决定了XDC也具有T...

2168

扫码关注云+社区