一、机械硬盘的原理
概括来说,硬盘的工作原理是利用特定的磁粒子的极性来记录数据。磁头在读取数据时,将磁力子的不同极性转换成不同的电脉冲信号,再利用数据转换器将这些原始信号变成电脑可以使用的数据,写的操作正好与此相反。另外,硬盘中还有一个存储缓冲区,这是为了协调硬盘与主机在数据处理速度上的差异而设计的。
在硬盘盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干个同心圆就被划分成磁道(Track),每个磁道又被划分为若干个扇区.(Sector),数据就按扇区存放在硬盘上。在每一面上都相应地有一个读/写磁头(Head),所以不同磁头的所有相同位置的磁道就构成了所谓的柱面(Cylinder)。传统的硬盘读/写都是以柱面、磁头、扇区为寻址方式的(CHS 寻址)。
硬盘驱动器加电正常工作后,利用控制电路中的单片机初始化模块进行初始化工作,此时磁头置于盘片中心位置,初始化完成后主轴电机将启动并以高速旋转,装载磁头的小车机构移动,将浮动磁头置于盘片表面的 00 道,处于等待指令的启动状态。
当接口电路接收到电脑系统传来的指令信号,通过前置放大控制电路,驱动音圈电机发出磁信号,根据感应阻值变化的磁头对盘片数据信息进行正确定位,并将接收后的数据信息解码,通过放大控制电路传输到接口电路,反馈给主机系统完成指令操作。结束操作的硬盘处于断电状态,在反力矩弹簧的作用下浮动磁头驻留到盘面中心。
硬盘的 0 柱面 0磁头1扇区为主引导记录,它主要由三部分组成:主引导记录、硬盘分区表和结束标志。
- 主引导记录
主引导记录占据 446 个字节,用于检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序。它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。
- 硬盘分区表
硬盘分区表占据主引导扇区的 64 个字节(偏移 01BEH~偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据 16个字节。例如,如果某一分区在硬盘分区表的信息如下:
80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
可以看到,最前面的“80”是一个分区的激活标志,表示系统可引导【1】:“01 01 00”表示分区开始的磁头号为1,开始的扇区号为 1,开始的柱面号为0:“OB”表示分区的系统类型是 FAT32,其他比较常用的有04(FAT16)、07(NTFS):“FE BF FC”表示分区结束的磁头号为254,分区结束的扇区号为 63、分区结束的柱面号为 764:“3F 00 00 00”表示首扇区的相对扇区号为 63:“7E 86 BB 00”表示总扇区数为12289662。
硬盘分区表每个字节的定义见下表。
- 结束标志字
结束标志字为 AA55,存储时低位在前,高位在后,即看上去是 55AA(偏移 1FEH~偏移 1FFH),最后两个字节是检验主引导记录是否有效的标志。
- 转速
当硬盘运行时,磁头沿着盘片的半径方向运动,盘片以每分钟上千转的速度旋转,磁头就可以在盘片的指定位置上进行数据的读写操作。因此,机械硬盘的转速指的是内部电机主轴的旋转速度,衡量转速的单位为RPM(Revolutions Per Minute,即转/分),硬盘转速越快,访问数据的时间就越短,硬盘内部的传输速率就越快。转速高的缺点主要有,声音较大、寿命较短、热量较高。
一般来说7200转比5400转硬盘肯定在不同程度提高了电脑的性能,硬盘工作时运行的速度越快,耗功方面则会越大,散热也会比较低转速的要高出不少。同配置笔记本,7200转的硬盘的温度要比5400转的要高,读写速度也比较快。7200转硬盘相比5400转硬盘,在传输速率上可以更好的满足用户的需求。
一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。按照同样的计算方法,一个5400(转/每分钟)的硬盘,平均旋转延迟时间为60×1000÷5400÷2=5.56毫秒。二者相比,7200转理论上比5400转快15%,但是实际速度只比后者提高了不到百分之十,离很多人预想的三分之一相距甚远。
5400转的机械硬盘连续读写速度一般为100MB-150MB每秒,7200转的机械硬盘连续读写速度一般为150MB-200MB每秒,注意这里是大写的B,也就是字节。一般硬盘速度和内存速度都是以字节为单位,因为一般数据存储都是用字节计算的。
一般目前常用的机械硬盘7200转差不多是最高的了,要是想要再快的速度就用固态硬盘吧。
二、磁盘调度算法
磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:
- 先来先服务算法(FCFS)
- 最短寻道时间优先算法(SSTF)
- 扫描算法(SCAN)
- 循环扫描算法(C-SCAN)
这个比内存算法简单一些,我们一个一个说就好啦~
- 先来先服务算法
FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中考虑一些更为复杂的调度算法。
算法思想:按访问请求到达的先后次序服务。
优点:简单,公平。
缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。
例子:
假设磁盘访问序列:98,183,37,122,14,124,65,67。读写头起始位置:53。求:磁头服务序列和磁头移动总距离(道数)。
由题意和先来先服务算法的思想,得到下图所示的磁头移动轨迹。由此:
磁头服务序列为:98,183,37,122,14,124,65,67
磁头移动总距离=(98-53)+(183-98)+|37-183|+(122-37)+|14-122|+(124-14)+|65-124|+(67-65)=640(磁道)
- 最短寻找时间优先算法
SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比FCFS算法更好的性能。这种算法会产生“饥饿”现象。
算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
优点:改善了磁盘平均服务时间。
缺点:造成某些访问请求长期等待得不到服务。
例子:对上例的磁盘访问序列,可得磁头移动的轨迹如下图。
- 扫描算法(又称电梯算法)
SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。
算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。如下图所示:
扫描算法(电梯算法)的磁头移动轨迹
优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向。
- 循环扫描算法
在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。
釆用SCAN算法和C-SCAN算法时磁头总是严格地遵循从盘面的一端到另一端,显然,在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的SCAN算法和C-SCAN算法称为LOOK和C-LOOK调度。这是因为它们在朝一个给定方向移动前会查看是否有请求。注意,若无特别说明,也可以默认SCAN算法和C-SCAN算法为LOOK和C-LOOK调度。 - 调度算法对比
优点 | 缺点 | |
---|---|---|
FCFS | 公平、简单 | 平均寻道距离大、仅应用在次盘I/O较少的场合 |
SSTF | 性能比FCFS好 | 不能保证平均寻道时间最短,可能出现“饥饿”现象 |
SCAN | 寻道性能较好,可避免“饥饿”现象 | 不利于原理磁头一端的访问请求 |
C-SCAN | 消除了对两端磁道请求的不公平 |
- 调度时间
一次磁盘读写操作的时间由寻找(寻道)时间、延迟时间和传输时间决定:
1、寻找时间Ts:活动头磁盘在读写信息前,将磁头移动到指定磁道所需要的时间。这个时间除跨越n条磁道的时间外,还包括启动磁臂的时间s,即:Ts = m * n + s。式中,m是与磁盘驱动器速度有关的常数,约为0.2ms,磁臂的启动时间约为2ms。
2、延迟时间Tr:磁头定位到某一磁道的扇区(块号)所需要的时间,设磁盘的旋转速度为r,则:Tr = 1 / (2 * r)。对于硬盘,典型的旋转速度为5400r/m,相当于一周11.1ms,则Tr为5.55ms;对于软盘,其旋转速度在300~600r/m之间,则Tr为50~100ms。
3、传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间,这个时间取决于每次所读/写的字节数b和磁盘的旋转速度:Tt = b / (r * N)。式中,r为磁盘每秒钟的转数;N为一个磁道上的字节数。
在磁盘存取时间的计算中,寻道时间与磁盘调度算法相关,下面将会介绍分析几种算法,而延迟时间和传输时间都与磁盘旋转速度相关,且为线性相关,所以在硬件上,转速是磁盘性能的一个非常重要的参数。
总平均存取时间Ta可以表示为:Ta = Ts + Tr + Tt。
虽然这里给出了总平均存取时间的公式,但是这个平均值是没有太大实际意义的,因为在实际的磁盘I/O操作中,存取时间与磁盘调度算法密切相关。调度算法直接决定寻找时间,从而决定了总的存取时间。
三、固态硬盘的原理
如果想知道的话可以看这两篇文章。
https://blog.csdn.net/LingLing1301/article/details/123614713
https://blog.csdn.net/LingLing1301/article/details/123614713
四、文件系统——概述
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
文件的系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的种类。
磁盘或分区和它所包括的文件系统的不同是很重要的。少数程序(包括最有理由的产生文件系统的程序)直接对磁盘或分区的原始扇区进行操作;这可能破坏一个存在的文件系统。大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。
一个分区或磁盘在作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。
文件系统的功能包括:管理和调度文件的存储空间,提供文件的逻辑结构、物理结构和存储方法;实现文件从标识到实际地址的映射,实现文件的控制操作和存取操作,实现文件信息的共享并提供可靠的文件保密和保护措施,提供文件的安全措施。
文件的逻辑结构是依照文件的内容的逻辑关系组织文件结构。文件的逻辑结构可以分为流式文件和记录式文件。
流式文件:文件中的数据是一串字符流,没有结构。
记录文件:由若干逻辑记录组成,每条记录又由相同的数据项组成,数据项的长度可以是确定的,也可以是不确定的。
主要缺陷:数据关联差,数据不一致,冗余性。
五、文件系统如何存储数据(抽象)
操作系统的基本文件类型有普通文件、目录文件、设备文件和链接文件。
- 普通文件:最常见的文件。
- 目录文件:目录文件中保存着该目录下其他文件的inode号和文件名等信息,目录文件中的每个目录项都是指向某个文件inode号的链接,删除文件名就等于删除与之对应的链接。
- 设备文件:操作系统把各种设备也抽象成文件,便于管理,如鼠标,键盘等。
- 链接文件:多个文件名指向同一索引节点(inode index)是存在的,这时就会出现链接文件。
文件操作分为以下几种:创建文件,删除文件,读文件,写文件等。
- 创建文件:在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项,目录项中应该记录新文件的文件名及其在外存的地址等属性。
- 删除文件:当已不再需要某文件时,可将其从文件系统中删除,在删除时,系统应先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
- 读文件:读文件时,须在相应系统调用中给出文件名和应读入的内存目标地址。此时,系统要查找目录,找到指定目录项,从中得到被读文件在外存中的位置。在目录项中,还有一个指针用于对文件进行读/写。
- 写文件:写文件时,须在相应系统调用中给出文件名和其在内存源地址。此时,系统要查找目录,找到指定目录项,从再利用目录中的写指针进行写操作。
文件系统对文件进行操作的过程:
1、先进入目录,目录中有相应的目录项。
2、目录项中有对应的文件名和inode号,根据文件名找到对应的inode号。
3、再根据inode号读取到文件的inode,分析是否符合inode中记录的权限。
4、如果符合权限,则可以读取到相应的data blocks。
文件包括属性和内容两部分(当然,还包括文件名,不过文件名实质是其所属目录文件的内容,目录文件也有inode号)。其中属性信息放置于inode区(即元数据区)中,实际内容放置于data block区中,另外,还有一个superblock(超级块)会记录整个文件系统的整体信息。
文件系统如何存储数据
文件包括属性和内容两部分(当然,还包括文件名,不过文件名实质是其所属目录文件的内容,目录文件也有inode号)。其中属性信息放置于inode区(即元数据区)中,实际内容放置于data block区中,另外,还有一个superblock(超级块)会记录整个文件系统的整体信息。
inode
inode存放文件的属性信息(如文件类型、大小、权限等)和文件内容所在的block编号。inode是文件惟一标识,系统根据文件名先找到inode,并首先分析是否符合inode中记录的权限,符合后根据block编号找到数据块读取内容。
block(块)
block存放文件实际内容。每个block大小有1K,2K及4K三种,其大小也是在磁盘(或分区)格式化时就确定了。每个block内只能存放一个文件的内容。若文件内容大小大于单个block,则该文件会占用多个block;若占不满一个block,这个block中的剩余空间也将浪费。因此block大小的选取也很重要,若经常存储小文件,而block较大无疑会浪费很多空间;但block较小的话,大型文件会占用较多的block数,这样inode中也会记录更多的block编号,由此会降低系统读写性能。所以block大小的选取应根据实际情况权衡。
superblock
superblock存放此文件系统的整体信息,包括inode/block大小、inode/block总量、使用量、剩余量、文件系统格式等。一个文件系统仅有一个superblock,位于组0中,这个块很重要,因此通常还有一个备份位于其它组中,其大小一般为1K。
六、总结
这一章讲了机械硬盘的原理和调度算法,文件系统基础知识。