《操作系统概念精要》之磁盘篇

2019-11-14  本文已影响0人  小pb

磁盘

现代计算机系统最常用的外部大量存储就是磁盘或者硬盘。

磁盘结构.png

磁盘的大致结构为图上所示。他包括一系列的盘片(platter),在盘片的两面都涂着磁质材料。通过在盘片上进行磁性记录可以保存信息。

读写磁头(read-write head)在一个盘片“飞行”从而可以读写数据。磁头是悬挂在磁臂(arm)上的,磁臂将所有磁头作为一个整体和进行一起移动。

每一个磁盘的盘片(platter)上逻辑的可以分为磁道(track)。磁道又可以分为扇区(sector)。同一磁道上的柱面形成了柱面(cylinder)。每个磁盘驱动器有数千个同心柱面,每个柱面又有数百个扇区。

一般判断一个磁盘的好坏是通过传输速率定位时间
传输速率:在驱动器和计算机之间数据传输的速率。
定位时间又分为寻道时间(移动磁臂到所有的柱面所需时间)和 旋转延时(旋转磁臂到所要的扇区所需要的时间)。

磁盘驱动器通过I/O总线的一组电缆连到计算机。在使用中有多种可用的总线,这就对应了多种 I/O接口。其中包括 硬盘接口技术(ATA)串行接口(SATA),外部串行(eSATA),通用 串口总线(USB)。

数据传输的总线由 控制器来进行。在计算机的那一头的叫做主机控制器, 在I/O驱动器的这一头为磁盘控制器

I/O操作在执行的时候,计算机会下达一个命令到主机控制器,接着主机控制器通过消息将该命令下达给 磁盘控制器, 磁盘控制器开始操作磁盘驱动器工作, 磁头和磁臂开始工作。磁盘控制器通常具有内置缓存,他会把数据传输到缓存上,而到主机的传输,则由内置缓存和主机控制器进行

SSD

SSD 具有与传统硬盘相同的特性,容量大,但是它会更可靠,他们有移动部件;而且更快,没有寻道时间和延迟。

磁盘连接

计算机访问磁盘有两种方式。一种方式是通过I/O端口,称为主机连接存储, 另外一种是分布式系统的远程主机(称为网络连接存储)。
主机连接存储:主机连接通过本地的端口来访问存储。这些端口使用多种技术。典型的台式机采用I/O 总线,一般SATA的接口更为常用。
网络连接存储:网络连接存储(NAS)设备是一种专用的存储结构,可以通过数据网络来进行远程访问。客户机通过远程过程调用(RPC)来访问连接存储。 RPC通过TCP或者UDP协议进行访问。

网络连接存储.png

存储区域网络

网络连接存储有一个缺点: 存储I/O操作消耗太多的网络带宽。从而增加网络的延迟。这在大型C/S 的模式下非常严重。
存储区域网络(SAN)为专用网络,它是在网络协议上使用了一种新的存储协议。


存储区域网络.png

它的优势是在于灵活。多个主机和多个存储阵列(storage array)之间可以连接到同一个SAN上,存储可以动态分配到主机。 也就是说当主机的磁盘不够时,他可以通过配置SAN 来进行动态的磁盘分配。

磁盘调度

每当进程需要进程磁盘访问的时候,他就向操作系统发出一个系统调用。每个请求需要一些信息:

对于处于请求队列的所有I/O请求,操作系统在进行选取的时候,应该需要一种调度算法来保证I/O设备的效率最大化。那么如何来评估这个效率呢
对于磁盘驱动器(就是开始那张图的全部零件加起来的装置)是根据两个量来进行评估的。访问速度磁盘带宽
根据上面的图再来回顾下两个概念:
寻道时间:移动磁臂到所有的柱面所需时间。
旋转延时:旋转磁臂到所要的扇区所需要的时间。
磁盘带宽:传输自己的总数除以所需要的总时间。

磁盘结构.png

在考虑三个因素的情况下,下面有不同的调度算法。

FCFS(先来先服务)

和进程的CPU调度和 内存调度一样,先到的先服务。实现起来比较见到,直接通过一个FIFO的队列实现即可。

FCFS磁盘调度.png

最短寻道时间优先(SSTF)

顾名思义:当在移动磁头到别处处理请求之前,处理高进当前磁头位置最近的请求。
和CPU调度的最短作业优先(SJF)调度一样,它会导致磁盘请求的饥饿。

最短寻道时间.png

SCAN调度(扫描)

这种调度方法也叫电梯调度,这个也比较好理解, 磁臂从磁盘的一段开始,向另一端移动,在移过每个柱面时,处理请求。当到达磁盘的另一端时,磁头反方向移动,继续处理。


电梯调度.png

C-SCAN(循环扫描)

这个是电梯算法的一个变种,它会把向一个方向进行扫描,直到磁盘的另一端结束,然后立马回到磁盘的另外一端,再次进行扫描。

C-SCAN.png

LOOK 调度

它是C-SCAN的变种,它在扫描的时候并不是扫描整个磁盘,而是在队列中的最小和最大之间。

LOOK调度.png

如何选择调度算法?
SSTF是最常见的,但是对于磁盘负荷较大的系统,SCAN和C-SCAN会更好,因为他不会产生饥饿。当然对于任何调度算法,性能还在余于请求的数量和类型。除此之外,文件的分配方式也会影响磁盘的服务请求。后面来讲文件系统结构和方式。
对于没有没有移动磁头的SSD来说,它通常可以用FCFS的策略。

————————————————————————————

磁盘管理

磁盘格式化

一个新的磁盘是一个空白盘:它只是一个磁性记录材料的盘子。在磁盘上可以存储数据之前,他必须分为扇区,以便磁盘控制器能够读写。这个过程叫做低级格式化或者物理格式化
低级格式化为每个扇区使用特殊的数据结构,填充磁盘。每个扇区的数据结构通常包括头部,数据区域和尾部。头部和尾部包含了一些磁盘控制器的使用信息。如扇区的纠错代码(Error-Correcting, ECC)。当控制器通过正常I/O写入一个扇区的数据时,ECC采用根据区域所有字节而计算的新值来进行更新。在读取一个扇区时,ECC会重新计算。并且与原来的值进行比较。如果存储的和计算的值不一样,表示扇区已经损坏,并且扇区可能已经损坏。

大多数磁盘在制作的时候已经进行了低级格式化。这种格式化也方便磁盘制造商进行测试磁盘,并且初始化逻辑块号到无损磁盘扇区的映射。

引导块

为了开始运行计算机,如打开电源或者重启时,它必须有一个初始化的程序来运行。它初始化系统的所有部分,从CPU寄存器到设备控制器和内存,接着启动操作系统。
对于大多数计算机,自举程序处于只读存储器 (ROM)。它是只读的数据,不会被计算机病毒影响,所以位于ROM的自举程序一般放在固定位置,它的功能就是在通电或者复位的时候,从磁盘上调入完整的** 引导程序**。 这个引导程序存储在磁盘上,通常称为启动块。

windows的磁盘引导.png

windows允许将磁盘分为多个分区,有一个分区是引导分区(boot partition),其中包含了操作系统和设备程序。 一般的windows系统将引导代码存放在磁盘的第一个扇区,它为主引导记录(MBR)
windows的启动过程,通电后,首先加载并允许在系统ROM中的代码,这个代码会指示系统从MBR上加载引导代码。除了引导代码,MBR还包括 一个分区表和一个表示(标示那个分区为引导系统)。

坏块

因为磁盘具有移动部件并且容错差(磁头在磁盘表面上方),容易出现故障。有时候,这种故障时彻底的,需要更换磁盘,并且从备份介质上将其内容恢复到新盘。更为常见的是, 一个或者多个扇区坏掉,而且大多数磁盘出厂时就有坏块。

复杂的磁盘在恢复坏块时,它的控制器维护磁盘内的坏块列表。这个列表在出厂低级格式化时初始化,并且在磁盘使用寿命内更新。低级格式化将一些块放在一边作为备用,操作系统看不到这些块。控制器可以采用备用块来逻辑地代替坏块。这种方案叫做扇区备用
一般的扇区处理:

它的替代方案是:扇区滑动。 假定17号扇区变坏,并且第一个可用备用逻辑扇区在202之后,那么他就会进行滑动,类似于在有序数组的插入一个中间值,所有的扇区都往后移动一个扇区。直到扇区18写入扇区19。然后以后的17就映射到现在的18。

上一篇下一篇

猜你喜欢

热点阅读