机械硬盘和固态硬盘的工作原理首先了解一下机械硬盘的工作原理1机械硬盘结构复杂上图是一款机械硬盘结构图。机械硬盘的结构基本都是一样的:电路板上的主控制器芯片负责与芯片组之间的通信并且控制硬盘内部的运转;盘片是用磁性材料做成的,固定在硬盘中部的马达上旋转;磁头则沿着盘片的径向移动。磁头读取、写入数据时会在盘片上方移动,移动过程也叫硬盘寻道的过程至于“寻道”,则是和盘片的结构有关。结构图盘片结构盘片上划分为一圈一圈的同心圆环,每个圆环即一个磁道。早期的机械硬盘从圆心出发向四周发散出角间距相等的一系列直线(当然实际上没有直线存在),直线与同心圆线围成的最小区域就是一个扇区(如上图)。这样的划分,在硬盘的容量不大的年代还是简单易行,但是随着硬盘技术的进步,磁道的划分越来越密集,必然导致外圈的扇区物理长度远远大于内圈的扇区,造成浪费。所以现在的硬盘都不用圆心发散的直线来划分扇区了,而是从外圈磁道开始取一定长度作为一个扇区,然后从外向里一个一个编号下去。这个编号就是扇区的地址,我们要确定文件在哪里全靠这个地址。扇区都有固定的大小,一般是512字节,现在的支持先进格式化的硬盘都采用4096字节作为一个扇区了。从以上叙述中,我们已经可以看到,机械硬盘要读出数据,必须要磁头找到对应的磁道和扇区(对于多碟的机械硬盘首先需要确定柱面),这全部依靠磁头的驱动马达来驱动(磁头本身是依靠盘片旋转产生的气流来悬浮的)。马达等等机械装置的反应速度毕竟不快,所以机械硬盘会浪费大量的时间用于寻道操作(每次寻道大约10ms左右)。尤其是对于零碎的小文件读写来说,由于文件所在扇区不连续,需要不断地要进行寻道,这样就产生很悲剧的性能。但是对于持续读写来说,由于不需要进行不断地寻道,所以不存在寻道时间。所以机械硬盘的随机读写能力很差(不超过0.1MB每秒),但是持续读写能力并不差(而且随着单碟容量的提升和磁盘阵列的组建,持续读写速度可以比固态硬盘更快)。到这里你们或许要问:为什么使用固态硬盘的电脑普遍比使用机械硬盘的电脑反应快呢?这是因为,系统分区在日常中进行的读写操作绝大部分都是随机文件读写,这正是机械硬盘的软肋所在,因为机械硬盘在这种情况下花费在寻道这件事上的时间非常多,其他硬件不得不停下来等待。如果你使用机械硬盘作为非系统盘,那么性能和固态硬盘的差别不大——比如一部电影放在SSD和HDD上去播放,这个没什么区别。提高HDD性能的方法之一是组建磁盘阵列。磁盘阵列有多种类型,而且有些阵列是为了保证数据的安全,作为自动备份而组建的,这一类我们暂时不去谈。通常用于提高性能的磁盘阵列是RAID0.比如,使用4块硬盘组建RAID0之后,当有数据从芯片组传输给硬盘,这个数据会被自动划分成4部分,每个硬盘各自存储一部分,这样的话理想状态下RAID0下写入速度翻倍;读取也是类似的原理,每个硬盘各自拿出各自的数据,理想状态下读取速度也是翻倍的。磁盘阵列:RAID0但是RAID0对于机械硬盘随机读写并没有什么明显作用。所以要凭借组建RAID0来提高系统盘的性能,很困难。但是RAID0的原理却也是应用在我们之后要讲到的SSD上的。不得不说的U盘2为什么要说U盘?因为U盘和固态硬盘是类似的结构。这张图是雷克沙16G的U盘拆解图。其实U盘的最重要部件就两个:主控制器芯片,还有NAND闪存颗粒。主控制器芯片负责与芯片组进行通信,并且负责操作NAND颗粒;而NAND颗粒本身就是一个存储器件。你可以将其理解成为很多电容器组合成的装置。固态硬盘的原理3这张图是CrucialM4-CT128M4SSD2固态硬盘拆解之后的电路板。对比上面的雷克沙U盘拆解图,你发现了什么?没错,结构和那个U盘很像,只不过NAND闪存芯片更多而已。附上这个电路板的背面照片。重点是那颗DRAM缓存颗粒。除去这个颗粒之外,其他的结构和U盘完全类似。1、NAND颗粒NAND颗粒之间的关系,类似于RAID0。那么固态硬盘可以看做是“由U盘组成的RAID0”。NAND是半导体存储颗粒的一种(还有其他的种类,比如NOR(NOR的特点是芯片内执行,应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中)但是NOR不用在这些东西上)。至于这个颗粒的物理结构是如何,这个暂时不用深究。我们需要关心的是NAND如何存储和读取数据。简单地说,NAND可以视作是由很多很多个电容器组成的集成电路。NAND分为SLC(SingleLevelCell)、MLC(Multi-LevelCell)、TLC(Trinary-LevelCell)等等(目前只有这三种)。从名字就可以看出区别:SLC是“单层”,MLC是“双层”,TLC是“三层”。事实上可以这样理解:SLC是指分别将电容器的充电状态(有电荷)和放电状态(无电荷)视为0和1;MLC则是电荷全满、电荷2/3、电荷1/3、无电荷这四种状态,定义成00、01、10、11;TLC则是又增加了几个中间值,有000至111这八种定义。那么SLC的一个Cell(一个“电容器”)只能存储1bit,MLC是2bit,TLC则是3bit。同时也很自然地可以明白,SLC可以很清楚地判断一个cell里面到底是0还是1;但是MLC就不太容易判断了,因为不同量的电荷表示不同的数据,电荷稍有流失就会导致出错;TLC出错的几率更大。所以从稳定性而言,SLC最佳,MLC次之,TLC最差。另外这些Cell都是有“惰性”的,连续充电放电若干次之后就无法保存电荷了,造成数据出错。从这个方面而言,SLC也是最耐充放电的,MLC次之,TLC最差。所以SLC使用寿命最长,MLC次之,TLC最差。就充放电速度而言,SLC最简单,速度也最快;结构越复杂速度也越慢,所以MLC次之,TLC最慢。从上一段总结出,无论是速度还是稳定性,SLC都是最佳的选择,MLC次之,TLC最差。但是我们也知道了同样的一个“电容器”,SLC存储的信息只有MLC的1/2,也是TLC的1/4,所以SLC的成本也是最高,而且无法做成容量很大的芯片。目前SLC的NAND产品大多数用于企业级的半导体存储器上,民用以MLC和TLC为多。继续讲NAND。数据在NAND中不能没有组织,否则无论什么设备都不能读出这些数据究竟是什么。类似于机械硬盘的扇区,固态硬盘也有自己最小的文件存储单位,叫做Page。目前的NAND颗粒,Page的大小并不一致,但是也只有两种:4KB或者8KB(1KB=1024字节)。Page相当于一组规律化组合的“电容器”。机械硬盘上的文件必须占用整数个扇区;固态硬盘也是类似,任何文件占用的空间必须是整数个Page。这个与文件系统无关,属于硬件层面。Page上面的一层组织是Block。128个或者256个Page组成一个Block。拿CrucialM4-CT128M4SSD2来说,它的NAND颗粒的一个Page是4KB,128个Page组成一个Block(一组固定的规律性组合的Page),所以一个Block是512KB。上一段已经说过,NAND的最小写入单位是Page,任何文件都必须占用整数个Page。这里的Block也有类似作用:任何的擦除(“电容器”放电)都必须是整数个Block。也就是说你要擦除NAND里面存储的信息,每次最少擦除一个Block,也可以擦除任意整数(当然不能是负数)个Block;但是你想擦除单独某个Page,那么对不起,办不到。一定数量(2的幂次方)的Block构成更高一级的结构Plane,然后一般是两个Plane组成一个Die,这个就是我们看到的一个芯片了。借用一张图来说明NAND的组织结构(图中的这个NAND的Block由256个Page组成,所以一个Block是1024KB):NAND有个特性:你要读取NAND中的信息,那么速度会很快;但是如果你要给NAND写入信息,尤其是NAND原有的信息需要覆盖的时候,速度会非常非常慢。但是无论是读还是写,操作系统本身甚至于电脑本身都是无法控制NAND芯片的。操作NAND芯片需要借助于主控制器芯片。主控芯片也是影响SSD性能的最重要因素之一。根据NAND的物理结构,NAND是通过绝缘层存储数据的。当你要写入数据,需要施加电压并形成一个电场,这样电子就可以通过绝缘体进入到存储单元,此时完成写入数据。如果要删除存储单元(数据),则要再次施加电压让电子穿过绝缘层,从而离开存储单元。所以,NAND闪存在重新写入新数据之前必须要删除原来数据。NANDFLASH的数据储存原理闪存的存储单元为三端器件,与场效应管有相同的名称:源极、漏极和栅极。栅极与硅衬底之间有二氧化硅绝缘层,用来保护浮置栅极中的电荷不会泄漏。采用这种结构,使得存储单元具有了电荷保持能力,就像是装进瓶子里的水,当你倒入水后,水位就一直保持在那里,直到你再次倒入或倒出,所以闪存具有记忆能力。2、主控芯片任何存储设备都有主控制器芯片的,否则主板南桥芯片(或者intel现在使用的单芯片组)无法直接与存储层进行通信。从开篇讲的HHD的结构,到后来讲到的U盘、SSD,主控芯片都是最最重要的部件之一。主控制器芯片大多数都是一个ARM处理器(手机上的就是ARM处理器)主控负责与芯片组之间的通信,接受ATA指令与数据,并负责将数据写入NAND或者从NAND读出。之前谈到NAND颗粒之间的关系类似于RAID0,就是说这里主控读入数据会分散到各个NAND颗粒上去,多个颗粒共同读写,这样的话速度自然就快了。THANKS!