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

一、磁盘的电磁原理:

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 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏杨龙飞前端

scrollto 到指定位置

2534
来自专栏魂祭心

原 canvas绘制clock

4164
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏ASP.NETCore

ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninjec...

674
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4928
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2665
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4045
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2988

扫码关注云+社区