磁盘存储

磁盘存储本文分一下几块 磁盘简介 磁盘调度 文件存储 存储的数据结构 常见磁盘类型 磁盘问题 磁盘简介 如上图所示 是一个活动头盘的示意图 当磁盘驱动器执行读 写功能时 盘片装在一个主轴上 并绕主轴高速旋转 当磁道在读 写头 又叫磁头

大家好,我是讯享网,很高兴认识大家。

本文分一下几块:磁盘简介,磁盘调度,文件存储,存储的数据结构,常见磁盘类型,磁盘问题。

磁盘简介


讯享网   

如上图所示,是一个活动头盘的示意图,当磁盘驱动器执行读/写功能时。盘片装在一个主轴上,并绕主轴高速旋转,当磁道在读/写头(又叫磁头)下通过时,就可以进行数据的读 /写了。以下介绍一个相关概念。

固定头盘:固定头盘的每一个磁道上都有独立的磁头,它是固定不动的,专门负责这一磁道上数据的读/写。

活动头盘: (如上图)的磁头是可移动的。每一个盘面上只有一个磁头(磁头是双向的,因此正反盘面都能读写)。它可以从该面的一个磁道移动到另一个磁道。所有磁头都装在同一个动臂上,因此不同盘面上的所有磁头都是同时移动的(行动整齐划一)

磁道当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。

磁道密度:盘片同心圆半径区域,每英寸所含的磁道数。

扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。
柱面:硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。

坏扇区:在硬盘中无法被正常访问或不能被正确读写的扇区都称为Badsector。一个扇区能存储512Bytes的数据,如果在某个扇区中有任何一个字节不能被正确读写,则这个扇区为Badsector。除了存储512Bytes外,每个扇区还有数十个Bytes信息,包括标识(ID)、校验值和其它信息。这些信息任何一个字节出错都会导致该扇区变“Bad”。

磁盘簇:扇区是磁盘最小的物理存储单元,但由于操作系统无法对数目众多的扇区进行寻址,所以操作系统就将相邻的扇区组合在一起,形成一个簇,然后再对簇进行管理。每个簇可以包括2、4、8、16、32或64个扇区。显然,簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。(簇(CLUST)的本意就是“一群”、“一组”,即一组扇区(一个磁道可以分割成若干个大小相等的圆弧,叫扇区)的意思。

磁盘盘片:是将磁粉附着在铝合金(新材料也有用玻璃)圆盘片的表面上,这些磁粉被划分成称为磁道的若干个同心圆,在每个同心圆的磁道上就好像有无数的任意排列的小磁铁,它们分别代表着0和1的状态.当这些小磁铁受到来自磁头的磁力影响时,其排列的方向会随之改变。利用磁头的磁力控制指定的一些小磁铁方向,使每个小磁铁都可以用来储存信息。

位密度:单位长度的位数。

磁盘容量:磁道数*扇区数*扇区内字节数*面数*片数。

磁头:硬盘的磁头是用线圈缠绕在磁芯上制成的,最初的磁头是读写合一的,通过电流变化去感应信号的幅度。对于大多数计算机来说,在与硬盘交换数据的过程中,读操作远远快于写操作,而且读/写是两种不同特性的操作,这样就促使硬盘厂商开发一种读/写分离磁头。

磁盘碎片:其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。 当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。 其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。
磁盘分区:计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。

平均寻道时间:它是指硬盘在接收到系统指令后,磁头从开始移动到移动至数据所在的磁道所花费时间的平均值,它一定程度上体现硬盘读取数据的能力,是影响硬盘内部数据传输率的重要参数,单位为毫秒(ms)。不同品牌、不同型号的产品其平均寻道时间也不一样,但这个时间越低,则产品越好,现今主流的硬盘产品平均寻道时间都在在9ms左右。

平均旋转延迟:首先,读写头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。读写头起始位置与目标位置之间的距离不同,寻道时间也不同,一般为2--30毫秒,平均约为10毫秒。然后,通过盘片的旋转,使得要读取的扇区转到读写头的下方,这段时间称为旋转延迟时间(rotational latency time)。一个7200(转 /每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋 转半圈)。按照同样的计算方法,一个5400(转/每分钟)的硬盘,平均旋转延迟时间为60×1000÷5400÷2=5.56毫秒。

平均存取时间:平均寻道时间与平均旋转延迟时间之和。

 转速:是硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。转速的快慢是标示硬盘档次的重要参数之一,它是决定硬盘内部传输率的关键因素之一,在很大程度上直接影响到硬盘的速度。硬盘的转速越快,硬盘寻找文件的速度也就越快,相对的硬盘的传输速度也就得到了提高。硬盘转速以每分钟多少转来表示,单位表示为RPM,RPM是Revolutions Perminute的缩写,是转/每分钟。

举例:
假设一个有3个盘片的硬盘,共有4个记录面,转速为7200/分钟,盘面有效记录区域的外直径为30CM,内直径为10CM,记录位密度为250位/MM,磁道密度为8道/mm,每个磁道分16扇区,每扇区512字节。
总磁道数:Ct=m*(de-di)/2*磁道密度=4*(30-10)*10/2*8=3200。
非格式化容量:Cuf=总磁道数*内径磁道周长*位密度=3200*3.14*10*10*250/8=29.95M。
格式化容量:Cf=总磁道数×每扇区数×每扇区字节数=4*=25M。
平均数据传输速率:Cg=每磁道扇区数×每扇区字节数×转速/60==960KB/S。

磁盘调度

当有多个进程访问磁盘,应采用一种**的调度算法,以使各进程对磁盘的平均访问时间最小。由于在访问磁盘的时间中,最主要是寻道时间,因此,磁盘调度目标,是使磁盘的平均寻道时间最小。常用的方法有:

1先来先服务(FCFS)。

2最短寻道时间优先(SSTF)。

该算法选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻址时间最短,但这种算法不能保证平均寻址时间最短。

3扫描算法(SCAN) 。

SSTF算饭会导致某些进程“饥饿“,该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向自外向里移动。此方法广泛用于大,中,小型机器和网络中的磁盘调度。

4循环扫描(CSCAN)

CSCAN算法规定磁头单向移动,例如,只是自里向外移动,当磁头移动到最外的磁头并方位后,磁头立即返回到最里的欲访问磁道,即将最小磁道紧接着最大磁道号构成循环,进行循环扫描。

5 N-STep-SCAN算法。

将磁盘请求队列分成若干个长度为N的子队列,按FCFS算法依次处理这些子队列,而每处理一个队列时又是按SCAN算法。

6FSCAN算法。

将磁盘请求队列分成2个子队列,一个是当前所有请求磁盘I/O的进程行程的队列,由磁盘调度按SCAN算法进处理,在扫描期间,将新出现的所有请求磁盘I/O的进程,放入另一个等待处理的请求队列。这样所有的请求都将被推迟到下次扫描时处理。

文件的存储

数据项:最低级的数据组织形式,分为基本数据项,组合数据项。

FCB:

设置原因--为了便于对文件进行控制和管理,在文件系统内部,给每个文件惟一地设置一个文件控制块,这种数据结构通常由下列信息项组成:
文件名——符号文件名,如 files,mydata,ml.c等。
文件类型——指明文件的属性,是普通文件,还是目录文件,特别文件,是系统文件还是用户文件等。
位置——指针,它指向存放该文件的设备和该文件在设备上的位置,如哪台设备的哪些盘块上。
大小——当前文件的大小(以字节、字或块为单位)和允许的最大值。
保护信息——对文件读、写及执行等操作的控制权限标志。
使用计数——表示当前有多少个进程在使用(打开了)该文件。
时间——日期和进程标志,这个信息反映出文件有关创建、最后修改、最后使用等情况,可用于对文件实施保护和监控等。
做什么--核心利用这种结构对文件实施各种管理。例如,按名存取文件时,先要找到对应的控制块,验证权限。仅当存取合法时,才能取得存放文件信息的盘块地址。

文件类型:

按用途分为:系统文件,用户文件,库文件。按文件中数据的形式分为:源文件,目标文件,可执行文件。按存取控制属性分为:只读文件,只写文件,只执行文件。

文件操作:创建,删除,读,写,截断。

文件的逻辑结构:有结构文件(又称记录式文件),无结构文件(又称流式文件)。

有结构文件:

记录的长度分为定长和不定长。存储方式有:顺序文件,索引文件,索引顺序文件。

磁盘存储的数据结构

数据在磁盘上的存储涉及的B树,B+树,B*树等结构体。

B树的概念

B树的类型和节点定义如下图所示:

 

文件查找的具体过程(涉及磁盘IO操作)

为了简单,这里用少量数据构造一棵3叉树的形式,实际应用中的B树结点中关键字很多的。上面的图中比如根结点,其中17表示一个磁盘文件的文件名;小红方块表示这个17文件内容在硬盘中的存储位置;p1表示指向17左子树的指针。

其结构可以简单定义为:

typedef struct {

    /*文件数*/

    int  file_num;

    /*文件名(key)*/

    char * file_name[max_file_num];

    /*指向子节点的指针*/

     BTNode * BTptr[max_file_num+1];

     /*文件在硬盘中的存储位置*/

     FILE_HARD_ADDR offset[max_file_num];

}BTNode;

假如每个盘块可以正好存放一个B树的结点(正好存放2个文件名)。那么一个BTNODE结点就代表一个盘块,而子树指针就是存放另外一个盘块的地址。

下面,咱们来模拟下查找文件29的过程:

  1. 根据根结点指针找到文件目录的根磁盘块1,将其中的信息导入内存。【磁盘 IO 操作 1次】     
小讯
上一篇 2025-03-24 19:48
下一篇 2025-02-07 23:24

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/31776.html