1. 机械硬盘
1.1 基本概念
机械硬盘即是传统普通硬盘,硬盘的物理结构一般由磁头
与盘片
、电动机
、主控芯片
与排线
等部件组成。
所有的数据都是存储在盘片中的,盘面物理上讲就是一个铝合金或者玻璃盘子,上面涂一层磁性材料,然后上面覆盖一层润滑保护涂层。
磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。信息通过离磁性表面很近的磁头,由电磁流来改变极性方式被电磁流写到磁盘上,信息可以通过相反的方式读取。硬盘作为精密设备,尘埃是其大敌,所以进入硬盘的空气必须过滤。
机械硬盘内部的实物结构
机械硬盘内部的逻辑结构
基本概念:
-
磁头(Heads):每张盘片(磁片)的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁头就可以表示数据在哪个磁面。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。 如下图
-
盘片和盘面:硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上计算面数。依次为0、1(底部盘片的两面),再上一个盘片的面编号为2和3。
-
磁道(Track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。资料存储手段从LMR进展到PMR这中又有CMR、SMR等技术。
-
柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。因为磁头都是绑定在一起移动的,所以才会有柱面的结构,机械硬盘的读取数据都是按照柱面来进行的。
-
扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为
512
字节。硬盘的第一个扇区,叫做引导扇区。读取和写入数据的时候,磁盘会以扇区为单位进行读取和写入数据,即使电脑只需要某个扇区内的几个字节的文件,也必须一次把这几个字节的数据所在的扇区中的全部512字节的数据全部读入内存,然后再进行筛选所需数据。
为什么要进行扇区的划分呢?
是逻辑化数据的需要,能更好的管理硬盘空间。在计算机磁盘存储中,扇区是磁盘或光盘上磁道的细分,硬盘的最小存储单元。机械硬盘的CHS寻址方式和LBA寻址方式,都需要借助于扇区才能找到实际的存储地址。- 早期的硬盘每磁道扇区数相同,由于每磁道扇区数相同,外圈磁道半径大,里圈磁道半径小,外圈和里圈扇区面积自然会不一样。这样就是造成了外圈的密度比内圈小,会浪费大量的存储空间。
- 如今的硬盘都使用ZBR(Zoned Bit Recording,区位记录)技术,盘片表面由里向外划分为数个区域,不同区域的磁道扇区数目不同,同一区域内各磁道扇区数相同,盘片外圈区域磁道长扇区数目较多,内圈区域磁道短扇区数目较少,大体实现了等密度,从而获得了更多的存储空间。
外侧的扇区数量比较多,那就意味着外侧数据的读取,能够有更高的读写速度了。
一些重要标准:
- 主轴转速:硬盘的主轴转速是决定硬盘内部数据传输率的决定因素之一,它在很大程度上决定了硬盘的速度,同时也是区别硬盘档次的重要标志。硬盘转速以每分钟多少转来表示,单位表示为RPM,RPM是Revolutions Per minute的缩写,是转/每分钟。RPM值越大,内部传输率就越快,访问时间就越短,硬盘的整体性能也就越好。家用的普通硬盘的转速一般有5400rpm、7200rpm几种,高转速硬盘也是现在台式机用户的首选;而对于笔记本用户则是4200rpm、5400rpm为主,虽然已经有公司发布了7200rpm的笔记本硬盘,但在市场中还较为少见;服务器用户对硬盘性能要求最高,服务器中使用的SCSI硬盘转速基本都采用10000rpm,甚至还有15000rpm的,性能要超出家用产品很多。
- 寻道时间:该指标是指硬盘磁头移动到数据所在磁道而所用的时间,单位为毫秒(ms)。
- 硬盘表面温度:该指标表示硬盘工作时产生的温度使硬盘密封壳温度上升的情况。
- 道至道时间:该指标表示磁头从一个磁道转移至另一磁道的时间,单位为毫秒(ms)。
- 高速缓存:该指标指在硬盘内部的高速存储器。目前硬盘的高速缓存一般为512KB~2MB,SCSI硬盘的更大。购买时应尽量选取缓存为2MB的硬盘。
1.2 工作原理
机械硬盘在工作的时候,磁头会悬浮于磁盘面上方几纳米的距离。磁盘面上有很多的小格子,小格子内有很多的小磁粒。
这些磁盘上的磁粒有一定的极性,当磁粒极性朝下的时候记为0,磁粒极性朝上的时候记为1,这样磁头就可以通过识别磁盘磁粒的极性读取数据了。
而磁头也可以利用其变化的磁场改变磁盘磁粒的极性,这样就做到写入和改写磁盘数据了。
所以,一般读取数据都会比写入快
1.3 寻址方式
我们知道机械硬盘中划分了,磁道和扇区已经柱面,那么一个当一个数据被写入到盘面中,下次的读取如何定位到盘片中具体的位置呢?
为了在硬盘中写入或读取数据,磁盘的每一个存储单元(扇区)都必须是一个固定的地址。对于机械硬盘而言,有两种地址编号方式,对应两种寻址方式:
- CHS寻址方式;
- LBA寻址方式。
-
CHS寻址方式
之前的机械硬盘,盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的CSH 3D参数 (Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应CHS寻址方式。CHS寻址方式是过去采用的一种方式,也就是用柱面(Cylinder)/磁头(Head)/扇区(Sector)三个参数来定位一个唯一的扇区地址。
需要存储每个区域的三个参数(这称为3D参数),使用时再分别读取三个参数,然后在送到磁盘控制器去执行。
随着硬盘技术的进步,硬盘容量越来越大,CHS模式无法管理超过8064 MB的硬盘,因此工程师们发明了更加简便的LBA寻址方式。
-
LBA寻址方式
LBA寻址方式是一种线性寻址模式,这种模式下,不需要考虑磁盘的物理结构,直接将磁盘上的所有扇区依次从“0”开始进行编号,直到磁盘的最大扇区数减1。它把机械硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了 烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器在这种逻辑地址转换为实际硬盘的物理地址。
例如:数据存放在磁盘的第五磁道的第七扇区上:
那磁头就会先摆动到第五磁道上空,然后等待第七扇区转过来。当第七扇区转到磁头下面的时候,才可以读取数据。
1.4 磁盘磁记录方式
磁盘上是磁性物质,通过写磁头写入数据,通过读磁头,读取数据。提高磁盘的密度,可以提高磁盘的存储容量。磁头分为写磁头和读磁头,写磁头因为其自身体积限制没办法做到和读取磁头一样大,所以写入数据磁头会比读取磁头大很多。
垂直磁记录(PMR)
PMR,也称为常规磁记录(CMR),通过将代表数据位的磁性元素的磁极与磁盘表面垂直对齐来工作。磁道并排写入,不重叠。由于写入磁头通常大于读取磁头,因此HDD制造商会尽量缩小写入磁头的大小。
使用PMR技术,除了磁道和磁道之间的空格,同时写磁头比读磁头宽,加上读写磁头的宽度差值,造成了磁盘中有很多空间被浪费了。所以引入了SMR叠瓦式磁盘技术
叠瓦式磁性记录(SMR)
SMR是PMR的延伸,可提供更高的面密度。 SMR不会将每个磁道重叠写入,而是将每个新磁道与之前写入磁道的一部分重叠,非常像屋面瓦。通过重叠磁道,写入磁头会变得更薄,从而提高面密度。
通过磁道的叠加,使得磁盘中可以容纳更多的磁道了,从而提高了存储面密度,进而降低了磁盘单位存储容量的成本。
性能对比
但是使用SMR叠瓦式磁盘技术的磁盘没有使用PMR技术的磁盘性能好,为什么呢?这里来分析下。
叠瓦式通过磁道的叠加增加了磁道的密度,读磁头因为小是不影响的,但是因为写磁头比较宽,在写入数据的时候会出现下面两种情况:
- 第一次写入数据的时候,会写入相同的数据到叠加的两条磁道中,后面的磁道需要写入的时候,就需要把自己磁道中的内容擦除,然后写入;
- 修改数据,如果需要修改中间磁道中的数据,会影响到后一条磁道的数据,只有先将后一条磁道数据取出来暂时放入缓存中,等数据修改完成,再将缓存的信息重新写入磁道中。
所以这样看下来,叠瓦式硬盘相比垂直式硬盘性能差不少。
叠瓦式硬盘主要的表现是数据写入性能,尤其是频繁擦写硬盘的数据,或者碎片化文件写入时候,会出现速度慢,还有可能出现突发性的掉速,严重的突发性掉速就会造成系统死机或者游戏卡死的问题。此外,叠瓦式硬盘由于改变了磁道的分布方式,因为叠瓦式擦除+覆写数据的操作需要磁头写入两次数据,需要先擦掉然后再写入,这样一来无疑是增加了硬盘的负载,让硬盘在工作的时候噪音变大,其寿命也会受到一定影响。
所以大家之后选硬盘的时候,需要注意这一点,选PMR技术的机械硬盘性能肯定是更好的。
2. 固态硬盘
固态硬盘(Solid State Drive),简称SSD(固盘),是用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)以及缓存单元组成。区别于机械硬盘由磁盘、磁头等机械部件构成,整个固态硬盘结构无机械装置,全部是由电子芯片及电路板组成。
2.1 基本概念
一般固态硬盘由三大块主控芯片、闪存颗粒、缓存单元构成。
主控芯片
又称主控晶片,主控制器芯片。类似电脑中 cpu 一样,该模块也是固态硬盘的核心器件。作用主要有下面几个:
- 负责协调整个SSD的程序运作、数据调度包括平衡闪存颗粒的平均损耗等,直接决定了一块固态硬盘的性能高低;
- 当数据由接口传输至SSD时,要经由主控芯片中转至闪存颗粒进行存储;
- 主控芯片的一个重要功能就是在需要的时候通过启动固件算法,执行错误校正码、坏块管理、垃圾回收算法等等重要任务。
闪存颗粒
闪存是一种电可擦除可编程只读存储器(Electrically Erasable ProgrammableRead Only Memory,EEPROM),具有非易失、读写速度快、抗震、低功耗、体积小等特性,目前己广泛应用于嵌入式系统、航空航天、消费电子等领域。
闪存存储器主要分为NOR型和NAND型两种:
- NOR型闪存有独立的地址线和数据线,它支持按位进行访问,具有高可靠性且随机读取速度较快,但NOR闪存的擦除和写操作速度较慢、容量小、价格昂贵,主要用于存储程序代码并在内存中直接运行。NOR闪存在手机上得到了广泛的应用。
- NAND闪存相对于NOR型闪存拥有更大的容量,适合进行数据存储。
闪存颗粒负责数据的存储,在固态硬盘里面,闪存颗粒则替代了机械磁盘成为了存储单元。一般使用非易失性存储器作为闪存颗粒(在断电情况下仍能保持所存储的数据信息),在固态硬盘中,NAND闪存因其具有非易失性存储的特性,即断电后仍能保存数据,被大范围运用。
根据NAND闪存中电子单元密度的差异,可以分为SLC(单层次存储单元)、MLC(双层存储单元),TLC(三层存储单元)以及QLC(四层式存储),这四种存储单元在寿命以及造价上有着明显的区别。
- SLC(单层式存储)为单层电子结构,写入数据时电压变化区间小,寿命长,读写次数在10万次以上;造价高,多用于企业级高端产品;
- MLC(多层式存储)使用高低电压构建的双层电子结构,寿命长,价格中等,多用于民用高端产品,读写次数在5 000次左右,相比SLC写入速度和次数减少了,控制芯片采取磨损均衡算法以满足长时间使用的要求;
- TLC(三层式存储)是MLC闪存延伸存储密度最高(达3 bit/cell),容量是MLC的1.5倍,造价成本低,使命寿命也低,读写次数在1 000~2 000次左右。TLC是当下主流厂商首选闪存颗粒。
- QLC(四层式存储)存储密度最高(达4 bit/cell),容量是MLC的2倍,造价成本最低,使命寿命也是最低,读写次数仅为100-300次左右。目前绝大部分定位低端的固态硬盘都采用的这个颗粒类型。
缓存单元
缓存芯片主要是进行常用文件的随机性读写,以及碎片文件的快速读写。
由于固态硬盘内部的磨损机制,就导致固态硬盘在读写小文件和常用文件时,会不断进行数据的整块的写入缓存,然而导出到闪存颗粒,这个过程需要大量缓存维系。特别是在进行大数量级的碎片文件的读写进程,高缓存的作用更是明显。
这也解释了为什么没有缓存芯片的固态硬盘在用了一段时间后,开始掉速。
2.2 工作原理
Nand Flash
表示的是 Flash 颗粒,SSD 控制器通过若干个主控通道并行操作这些 Flash 颗粒,就像 raid0 一样,这样可以提高数据写入的并行性及效率。每一个 Flash 颗粒又进一步细分为多个 block (块),每一个 block 又包含多个 page,在 SSD 内部,SSD 控制器和 Flash 之间的最小访问单元粒度是 page。一般一个 page 的大小为4 k,一个 block 包括16个 page。在写入数据的时候,像 raid0 的工作机制一样,同时并行地将数据写入到每个 Flash 颗粒的 block 中可用的 page 上,当一个 block 写满之后会接着写下一个 block。
闪存最基础的结构:浮栅晶体管
固态硬盘存储数据的基本单元叫浮栅晶体管,基本结构有:存储电子的浮栅层,控制极G、衬底P、源极D与漏极S。
我们将浮栅层中的电子数量高于一定值计为0,低于一定值计为1。
写入数据
写入数据时,需要在控制极G施加一个高压,这样电子就可以穿过隧穿层,进入浮栅层,因为有绝缘层的存在,电子不能再向前移动了,就被囚禁在了浮栅层。
这样,当我们写完数据撤去电压,电子就被囚禁在了浮栅层,因为隧穿层本质上也相当于绝缘体,所以电子就被保存在了浮栅层,这样我们的数据就被写入进去了。
但是这些电子,还是会存在越狱的情况,如果里面所有的电子都越狱了,也就意味着我们保存的数据丢失了。作为固态硬盘的存储单元的NAND flash不通电时间长了会导致数据丢失。
读取数据
如果浮栅层中没有数据,我们给控制级一个低压,由于电压低,电子只能被吸引到靠近隧穿层的位置,却无法穿过隧穿层,因而源极漏极可以导通,形成电流。
如果检测到电流,就说明里面没有电子,本次读取数据记为1。
当浮栅层中存在电子时(存储数据为0),我们还给控制极一个低压,由于浮栅层里面的电子对这些电子有排斥作用,所以电子无法被吸引到靠近隧穿层的位置,源极漏极不会导通,不会形成电流。
如果无法检测到电流,那么说明浮栅层储存一定量电子,则读取数据为0。
这样通过浮栅层是否有电子,我们就能读出两种数据。大量的浮栅晶体管堆叠在一块就可以存储大量的0和1,这样就可以满足我们的存储和读取的要求了。