半岛·BOB官方网站 磁盘原理和技术详解
根据《大华存储》一书及参考资料编写,附有参考链接
原文链接:://blog.csdn.net/hguisu/article/details/7408047
原文链接:
硬盘存储原理
写入时,磁头线圈通电后,周围产生磁场,使下方的磁性材料磁化。磁场的方向根据电流的方向而不同,可用0和1来区分。(电磁学)
读取时,磁头线圈切割磁场线,产生感应电流。磁性物质的磁场方向不同,所以感应电流的方向也不同。(磁电性)
硬盘结构
盘片是硬盘存储数据的载体,圆形的盘片表面均匀溅射有磁粉,盘片的基板由金属或者玻璃制成。
硬盘的磁头用于读取或者修改盘片上磁性材料的状态半岛·体育网站平台登陆,每个磁面上都有一个磁头。
当磁头停止工作的时候,它接触到磁盘的着陆区,着陆区内不存储任何数据。
磁头读取数据时,盘片的高速旋转产生气流使磁头始终处于飞行状态,在盘片表面距数据区0.2-0.4微米的高度半岛·综合体育官网入口,不会接触盘面,不会造成磨损。
利用精密的齿轮组或电动线圈旋转,使磁头以微米级的精度发生位移,使磁头精确地定位在每一个轨道上。
硬盘的工作原理
盘片上的柱面和磁道
硬盘在逻辑上分为磁道、柱面、扇区。
磁头最初停在盘片的最内圈,此处线速度最小,不存储任何数据,称为启停区或着陆区。启停区以外的区域为数据区。最外圈,即离主轴最远的地方,为“0”磁道。硬盘数据的存储就是从最外圈开始的。磁头通过“0”磁道检测部件找到“0”磁道的位置,完成硬盘的初始定位。
0号磁道存放的是启动操作系统所需的BIOS程序,0号磁道非常重要,可惜很多硬盘就是因为0号磁道损坏而报废的。
磁盘、磁道、柱面和扇区
硬盘的盘片通常由铝合金或玻璃制成。硬盘的每个盘片都有两面,即上盘片和下盘片。每个有效盘片都有一个盘号,盘号从“0”开始,从上到下依次编号。在硬盘系统中,盘号也叫磁头号。一个硬盘的盘组有2到14个盘片,通常是2到3个盘片,所以盘号(磁头号)为0到3或0到5。
磁盘在格式化的时候,被分成许多同心圆,这些同心圆轨道就叫做磁道。磁道从外到内依次从0开始编号。硬盘的每一个盘面有300到1024个磁道。这些同心圆并不是连续地记录数据,而是分成一段段圆弧,每一段圆弧就叫做一个扇区。扇区从“1”开始编号。每个扇区的数据都是以一个单元同时读取或写入的,磁头无法定位在扇区内部。磁道是“看不见的”,只是盘面上一些以特殊形式磁化的磁化区域。
划分磁道和扇区的过程称为低级格式化,通常在出厂时完成。高级格式化又称逻辑格式化,是指按照用户选择的文件系统(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等)在磁盘的特定区域写入特定的数据,以初始化磁盘或磁盘分区并清除原磁盘或磁盘分区中的所有文件。
所有磁盘表面上的相同磁道组成一个柱面,称为磁柱。每个柱面上的磁头都以“0”开始,从上到下进行编号。数据是按柱面读写的,即磁头读写数据时,先从同一柱面的磁头“0”开始,然后依次对同一柱面的不同磁盘表面即磁头进行操作。只有当同一柱面上的所有磁头都读写完毕后,磁头才会移动到下一个柱面,因为磁头的选择只需通过电子开关即可,而柱面的选择则必须通过机械开关。因此,数据是按柱面读写的,而不是按磁盘表面读写的。
硬盘上的柱面数(或每个磁盘的磁道数)取决于每个磁道的宽度(同样,这与磁头的大小有关)和磁道之间的间距大小,后者由定位机制决定。
操作系统以扇区的形式将信息存储在硬盘上。每个扇区包含 512 字节的数据和一些其他信息。扇区主要由两部分组成:存储数据的位置标识符和存储数据的数据段。
该标识符就是扇区头,其中包括三个数字,组成了扇区的三维地址:
磁盘表面号:扇区所在的磁头(磁头或磁盘表面)
柱面号:磁道,决定磁头的径向方向。(柱面)
扇区号:磁道上的位置。也称为块号。它决定了数据在磁盘圈上的位置。(扇区)
扇区的地址又叫CHS地址,磁头通过读取CHS地址来进行定位。CHS寻址方式已经被LBA寻址方式取代。
(CHS与LBA的关系)补充知识,可跳过
CHS(又称3D),CHS模式支持的硬盘容量有限,用8位存储磁头地址BOB半岛·体育在线登录,用10位存储磁柱地址,用6位存储扇区地址。一个扇区一共有512字节。这样,采用CHS寻址的硬盘最大容量为256*1024*63*512B=8064MB
新的寻址方式:LBA(Logical Block Addressing,逻辑块寻址)。在LBA地址中,地址不再代表实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA寻址方式将CHS的三维寻址方式转变为一维的线性寻址,它将硬盘所有物理扇区的C/H/S编号方式,按照一定的规律,转变为线性编号方式。大大提高了系统效率,避免了繁琐的磁头/柱面/扇区寻址方式。在访问硬盘时,硬盘控制器将此逻辑地址转换为实际硬盘的物理地址。
LBA下的扇区编号从0开始。
逻辑扇区号LBA的计算公式为:
LBA(逻辑扇区号)=磁头数×每磁道扇区数×当前磁柱号+每磁道扇区数×当前磁头号+当前扇区号-1
例如:CHS=0/0/1,那么根据公式LBA=255×63×0+63×0+1-1=0,也就是说物理0柱面、0磁头、1扇区就是逻辑0扇区。
也就是说LBA是扇区号,是按照磁道、柱面、磁头依次从小到大依次编号的。
扇区头还包含一个字段,其中包含一个标志,该标志指示扇区是否可以可靠地存储数据,或者是否已发现故障,不应使用该扇区。一些硬盘控制器还在扇区头中记录指针,当原始扇区发生错误时,这些指针会将磁盘引导到替换扇区或磁道。最后,扇区头以循环冗余校验 (CRC) 值结尾,该值允许控制器验证扇区头的读数以确保准确性。
扇区的第二个主要部分是存储数据的数据部分,该部分可分为数据和保护数据的纠错码 (ECC)。在初始准备期间,计算机会用 512 个虚拟信息字节(存储实际数据的位置)和与这些虚拟信息字节相对应的 ECC 编号填充此部分。
扇区编号:采用交叉因子N:1来解决磁头与磁盘转速的矛盾
完成磁盘访问请求的流程:
1)首先要找到柱面,磁头需要移动,对准相应的磁道,这个过程叫做寻道,所消耗的时间叫做寻道时间。
2)然后目标扇区旋转到磁头下面,即盘片旋转把目标扇区旋转到磁头下面,这个过程所消耗的时间称为旋转时间。
磁盘访问请求(读/写)的完成过程包括三个动作:
1)寻道(时间):磁头移动到指定磁道
2)旋转延迟(时间):等待指定扇区在磁头下旋转
3)数据传输(时间):磁盘和内存之间实际的数据传输
所以读取磁盘上扇区数据(一个数据块)所需的时间为:Ti/o=tseek+tla+ n *twm,其中:tseek为寻道时间,tla为旋转时间,twm为传输时间。
磁盘读写原理
读写顺序:系统在磁盘上存储文件时,是按照柱面、磁头、扇区的方式进行,即先写入第一个磁道(即第一个磁盘表面的第一个磁道)的第一个磁头下的所有扇区,然后是同一柱面的下一个磁头,依此类推。当一个柱面写满后,再前进到下一个柱面,直到文件内容全部写入磁盘。(从上到下,然后从外到内。数据是按柱面读写的,而不是按磁盘表面读写的)
系统读取数据也是按照同样的顺序进行的。读取数据时,先告知磁盘控制器要读取扇区的柱面号、磁头号和扇区号(物理地址的三个组成部分)。磁盘控制器直接将磁头部件移到相应的柱面,选择相应的磁头,等待所需的扇区移动到磁头下面。当扇区到达后,磁盘控制器读取每个扇区的头部,将这些头部中的地址信息与预期的磁头和柱面号进行比较(即寻道),找到所需的扇区号。当磁盘控制器找到扇区头部后,根据自己的任务是写入还是读取该扇区,决定是切换写入电路还是读取数据和尾部记录。找到扇区后,磁盘控制器必须对该扇区的信息进行后处理,然后才能继续寻找下一个扇区。如果是读取数据,控制器就计算此数据的ECC码,然后将ECC码与记录的ECC码进行比较。如果是写入数据,控制器就计算此数据的ECC码,并与数据一起存储。当控制器对该扇区中的数据执行必要的处理时,磁盘继续旋转。
局部性原理与磁盘预读
由于存储介质的特性,磁盘访问比主存慢得多,加上机械运动消耗,磁盘访问速度往往只有主存的百分之几。因此,为了提高效率,应该尽量减少磁盘 I/O。为了达到这个目的,磁盘往往不是严格按需读取,而是每次都预读,哪怕只需要一个字节,磁盘也会从这个位置开始,按顺序向后读一定长度的数据到内存中。这样做的理论基础就是计算机科学中著名的局部性原理:
由于顺序磁盘读取的效率很高(不需要寻道时间,只需要很少的旋转时间),所以预读对于本地程序来说可以提高I/O效率。预读的长度一般是页的整数倍。页是计算机管理内存的逻辑块。硬件和操作系统往往把主存和磁盘存储区域划分成连续大小相等的块,每个存储块称为一个页(在很多操作系统中,页大小通常为4k)。主存与磁盘以页为单位进行数据交换。当程序要读取的数据不在主存中时,就会引发缺页异常,此时系统会向磁盘发出读信号,磁盘会找到数据的起始位置并向后连续读取一页或几页并加载到内存中,然后异常返回,程序继续运行。
磁盘碎片
俗话说,一图胜千言。我们先用一张ACSII代码图来解释一下为什么会出现磁盘碎片。
上面的 ASCII 图像表示磁盘文件系统。由于目前上面没有数据文件,因此我将其表示为 0。
图中左上方共有26个字母az,用于定位每个数据字节的具体位置,如第1行第1列的为aa,第26行第26列的为zz。
我们创建一个新文件,当然我们的文件系统现在发生了变化
如图所示:“目录”(TOC)占据前四行,TOC存储了系统中各个文件的位置。
在上图中,TOC中包含了一个名为hello.txt的文件,它的具体内容是“Hello, world”,它在系统中的位置是从ae到le。
接下来创建一个新文件
如图所示,我们新创建的文件bye.txt就在第一个文件hello.txt的旁边。
事实上,这是最理想的系统结构。如果你把你的文件像上图那样挨着挨着、紧紧地靠在一起,那么读取它们就会非常容易和快速。这是因为硬盘中移动最慢的部分(相对而言)是传动臂。位移越少,读取文件数据的时间就越快。然而,这正是问题所在。现在我想在“Hello, World”后面加几个感叹号来表达我的强烈感受。现在的问题是:在这样的系统上,文件所在的行里没有地方让我放这些感叹号,因为 bye.txt 占用了剩余的空间。
有两种选择,但都不完美。
1. 我们从原始位置删除该文件,创建一个新文件并向其中写入“Hello, World!!”——这无意中延长了文件系统的读写时间。
2.将文件拆散,即在其他空白处写上感叹号,表示“分开头部和主体”——这个主意不错,快捷,方便,但是也意味着读取下一个新文件的时间大大减慢。
如果你对以上内容还不了解,
这里说的第二种方法,就像我们Windows系统的存储方式一样,各个文件都是挨着的,但是如果其中一个文件需要更改,就意味着后面的数据会被放到磁盘上其他空闲的地方,如果这个文件被删除,就会在系统中留下空白的空间,久而久之,我们的文件系统就会变得碎片化,碎片就是这样产生的。
SCSI接口协议小型计算机系统接口完成磁盘访问过程的抽象和虚拟化,屏蔽了磁盘内部结构和逻辑
我要评论