九、磁盘组织与管理
文章目录
- 九、磁盘组织与管理
-
- 1.组成
- 2.磁盘性能指标
- 3.磁盘物理地址
- 4.磁盘工作过程
- 5.分类
- 6.平均存取时间
- 7.磁盘调度算法(-减少寻道时间)
-
- 7.1先来先服务(FCFS)
- 7.2最短寻道时间优先(SSTF)
- 7.3扫描算法(SCAN)
- [7.4 LOOK调度算法](#7.4 LOOK调度算法)
- 7.5循环扫描算法(C-SCAN)
- [7.6 C-LOOK算法](#7.6 C-LOOK算法)
- 8.-减少延迟时间
- 9.磁盘管理
- 10.虚拟文件系统VFS
- 11.文件系统挂载(安装)
详见 计算机组成原理 - 3.存储系统 - 7.磁盘存储器(机械)
计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。
所谓"磁表面存储",是指把某些磁性材料薄薄地涂在金属铝或塑料表面上作为载磁体来存储信息。磁盘存储器、磁带存储器和磁鼓存储器均属于磁表面存储器。
- 磁表面存储器的优点:
①存储容量太,位价格低;
②记录介质可以重复使用;
③记录信息可以长期保存而不丢失,甚至可以脱机存档;
④非破坏性读出,读出时不需要再生。
- 磁表面存储器的缺点:
①存取速度慢;
②机械结构复杂;
③对工作环境要求较高。
1.组成
硬盘存储器由磁盘驱动器,磁盘控制器和盘片组成。
- 磁盘驱动器:核心部件是磁头组件和盘片组件,温彻斯特盘是一种可移动头固定盘片的硬盘存储器。
- 磁盘控制器:是硬盘存储器和主机的接口(I/O控制器),主流的标准有IDE(ATA)、SCSI、SATA等。
- 盘片:磁盘存储区域
一块硬盘含有若干个记录面,每个记录面 划分为若干条磁道 ,而每条磁道又划分为若干个扇区 ,扇区(也称块)是磁盘读写的最小单位,也就是说磁盘按块存取。
- 盘片
- 磁道
- 簇(几个扇区组合)
- 扇区(读写最小单位)
- 磁道
【2017年408真题】为了改善磁盘的效率,操作系统把多个相邻的扇区 组合成簇 ,这个时候,对文件的存储空间分配一簇为单位。所以文件所占的空间只能是簇的整数倍。
一个盘片的正面反面都可以涂上磁性材质:
2.磁盘性能指标
2.1磁盘的容量
一个磁盘所能存储的字节总数称为磁盘容量。磁盘容量有非格式化容量和格式化容量之分。
- 非格式化容量:从物理上来看,磁盘可以记录的二进制bit位的上限。是指磁记录表面可以利用的磁化单元总数。
- 格式化容量:是指按照某种特定的记录格式所能存储信息的总量。进行格式化之后会预留下某些空间,等到使用的某些扇区坏了,那么备份的扇区就会出来顶替坏掉的扇区。
格式化容量 < 非格式化容量
2.2记录密度
记录密度是指盘片单位面积上记录的二进制的信息量,通常以道密度、位密度和面密度表示。
-
道密度:是沿磁盘半径方向单位长度上的磁道数;
如:60道/cm:就是1cm上60个磁道。
-
位密度:是磁道单位长度上能记录的二进制代码位数;
如:600bit/cm:就是在这个磁道上,1cm可以存储600bit二进制位。
【注意】虽然在扇区看起来,里层的更短,但是存储的数据量一样大,所以越内侧的磁道位密度越大。
-
面密度:是位密度和道密度的乘积。
2.3平均存取时间
平均存取时间 =
寻道时间(寻找时间,磁头移动到目的磁道)+
旋转延迟时间(磁头定位到所在扇区)+
传输时间(传输数据所花费的时间)。
【注意】
- 有的题目还会要求加上磁盘控制器延迟的时间。
- 如果题目没有给出旋转延迟时间,那么就用磁盘转半圈的时间替代。
2.4数据传输率
磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
因为每次都可以读入一整条的磁道的数据。
假设磁盘转数为 r(转/秒),每条磁道容量为 N 个字节,则数据传输率为:
D r = r N D_r = rN Dr=rN
3.磁盘物理地址
磁盘的物理地址:可用**(柱面号,盘面号,扇区号)**来定位任意一个"磁盘块"。
在"文件的物理结构"小节中,我们经常提到文件数据存放在外存中的几号块,这个块号就可以转换成(柱面号,盘面号,扇区号)的地址形式。
当主机向磁盘控制器发送寻址信息,磁盘的地址一般如图所示:
驱动器号 | 柱面(磁道)号 | 盘面号 | 扇区号 |
---|---|---|---|
一台电脑可能有多个硬盘 | 一个盘面中内圈、外圈的第几圈 | 第几个盘面 | 一个盘面内的扇形区域 |
移动磁头臂(寻道) | 激活某个磁头 | 通过旋转将特定扇区划过磁头下方 |
- 为什么磁盘的物理地址是(柱面号,盘面号,扇区号)而不是(盘面号,柱面号,扇区号)。柱面号在盘面之前?
答:读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构,一开始就可以把所有的磁头移到对应的磁道上,可以减少磁头移动消耗的时间。
例题:
若系统中有4个驱动器,每个驱动器带一个磁盘,每个磁盘256个磁道、16个盘面,每个盘面划分为16个扇区,则每个扇区地址要18位二进制代码:
驱动器号 (2bit)
柱面(磁道)号 (8bit)
盘面号 (4bit)
扇区号 (4bit)
4.磁盘工作过程
硬盘的主要操作是寻址,读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。
可根据该地址读取一个"块":
- 根据"柱面号"移动磁臂,让磁头指向指定柱面;
- 激活指定盘面对应的磁头;
- 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写。
【注意】硬盘属于机械式部件,其读写操作是串行 的,每次读写1bit,且读写不能同时进行(不可能在同一时刻既读又写,也不可能在同一时刻读两组数据或写两组数据)。
5.分类
- 按照磁头是否可以移动 分类:
- 活动头磁盘
- 固定头磁盘
- 按照磁头是否可以移动 分类:
- 活动头磁盘
- 固定头磁盘
6.平均存取时间
一次磁盘读/写操作需要的时间。
平均存取时间 =
寻道时间(寻找时间,磁头移动到目的磁道)+
旋转延迟时间(磁头定位到所在扇区)+
传输时间(传输数据所花费的时间)。
【注意】
- 有的题目还会要求加上磁盘控制器延迟的时间。
- 如果题目没有给出旋转延迟时间,那么就用磁盘转半圈的时间替代。
6.1寻道时间
寻找时间(寻道时间)T~s~:在读/写数据前,将磁头移动到指定磁道所花的时间。
①启动磁头臂是需要时间的。设耗时为s;
②移动磁头 也是需要时间的。设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。则:
寻道时间 T s = s + m ∗ n 寻道时间T_s = s + m*n 寻道时间Ts=s+m∗n
6.2延迟时间
延迟时间T~R~:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
设磁盘转速为r(单位:转/秒,或转/分),则平均所需的延迟时间:
延迟时间 T R = 1 2 r 延迟时间T_R=\frac 1 {2r} 延迟时间TR=2r1
1 r \cfrac 1 r r1 就是转一圈需要的时间。找到目标扇区平均需要转半圈 ,因此再乘以 1 2 \cfrac 1 2 21。
6.3传输时间
传输时间T~t~:从磁盘读出或向磁盘写入数据所经历的时间。
设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。则:
传输时间 T t = 1 r ∗ b N = b r N 传输时间T_t=\cfrac 1r * \cfrac bN = \cfrac b{rN} 传输时间Tt=r1∗Nb=rNb
每个磁道要可存N字节的数据,因此b字节的数据需要b/N个磁道才能存储。
而读/写一个磁道所需的时间刚好又是转一圈所需要的时间1/r。
7.磁盘调度算法(-减少寻道时间)
延迟时间和传输时间都与磁盘转速r相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间。
但是操作系统的磁盘调度算法会直接影响寻道时间。
7.1先来先服务(FCFS)
first come first server
根据进程请求访问磁盘的先后顺序进行调度。
优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去。
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
7.2最短寻道时间优先(SSTF)
Shortest Seek Time First
SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。
【助记】其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优。
优点:性能较好,平均寻道时间短。
缺点 :可能产生"饥饿"现象。
7.3扫描算法(SCAN)
SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。
这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。
优点 :性能较好,平均寻道时间较短,不会产生饥饿现象。
缺点:
- 只有到达最边上 的磁道时才能改变磁头移动方向。
事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。
- SCAN算法对于各个位置磁道的响应频率不平均。
如:假设此时磁头正在往右移动,且刚处理过90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应184号磁道的请求了。
7.4 LOOK调度算法
LOOK调度算法解决了扫描(SCAN)算法的第一个缺点。
扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,很多时候并不需要移动到最边上就可以回头进行扫描了。
LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。
【助记】边移动边观察,因此叫LOOK。
7.5循环扫描算法(C-SCAN)
循环扫描(C-SCAN)算法解决了扫描(SCAN)算法的第二个缺点。
SCAN算法对于各个位置磁道的响应频率不平均。
而C-SCAN算法规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。
优点:比起SCAN来,对于各个位置磁道的响应频率很平均。
缺点 :和SCAN一样,只有到达最边上 的磁道时才能改变磁头移动方向。
7.6 C-LOOK算法
C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK算法就是为了解决这个问题。
C-LOOK算法规定:如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返陆,并且磁头只需要返回到有磁道访问请求的位置即可。
8.-减少延迟时间
假设要连续读取橙色区域的2、3、4扇区:
磁头读取一块的内容(也就是一个扇区的内容)后,需要一小段时间处理,而盘片又在不停地旋转。因此,如果2、3号扇区相邻着排列,则读完2号扇区后无法连续不断地读入3号扇区,因为2扇区进行处理的过程中,磁头已经划过磁头,必须等盘片继续旋转,3号扇区再次划过磁头,才能完成扇区读入。
总结 :磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的"延迟时间"。
8.1交替编号
若采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。
磁道:如果怕错过,那我们就迟点相遇。
8.2错位命名
原本的磁盘上下对应的是一样的,0号扇区下面也还是0号扇区。但是因为上一个盘面的磁头工作完之后,启动下一个盘面的磁头也需要时间,所以把不同的盘面扇区错开,如下图4号扇区对应0号扇区。
9.磁盘管理
9.1磁盘初始化
- 物理格式化 ,即低级格式化:
划分扇区,检测坏扇区,并用备用扇区替换坏扇区。
一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)。
- 逻辑格式化 ,即高级格式化:
磁盘分区 (分卷Volume),创建文件系统,完成各分区的文件系统初始化注。
逻辑格式化后,灰色部分就有实际数据了,白色部分还没有数据。
- 超级块:6.5成组链接法
- 空闲空间管理(如:位示图):6.4位示图法
- i 结点:3.3索引结点
计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行**初始化程序(自举程序)**完成的。这部分初始化程序放在ROM,ROM中的数据在出厂时就写了,并且以后不能再修改,所以不适合写入全部的自举程序。
所以,现在的ROM中只存放很小的"自举装入程序"。
完整的自举程序 放在磁盘的启动块(引导块/启动分区)上,启动块位于磁盘的固定位置。拥有启动分区 的磁盘称为启动磁盘 或系统磁盘(C:盘)。
开机时计算机先运行"自举装入程序",通过执行该程序就可找到引导块,并将完整的"自举程序"读入内存,完成初始化。
计算机开机流程见 操作系统 - 1.操作系统概述 - 7.操作系统的引导
开机过程:
- 执行ROM中的引导(boot)程序(JMP转跳到BIOS);
- BIOS引导CPU将磁盘的**MBR(主引导记录)**放入内存RAM(MBR地址入口);
- 硬件自检 ,构建中断向量表,检查硬件故障;
- MBR中的磁盘引导程序 会根据分区表来寻找C盘的位置,将**PBR(引导快)**放入内存;
- 从根目录中找到启动管理器,进行操作系统初始化。
9.2坏块的管理
坏了、无法正常使用的扇区就是"坏块"。
这属于硬件故障,操作系统是无法修复的。应该将坏块标记出来,以免错误地使用到它。
-
对于简单的磁盘,
可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如:在FAT表上标明。(【注意】在这种方式中,坏块对操作系统不透明)。
-
对于复杂的磁盘,
磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。
在磁盘出厂前进行低级格式化(物理格式化)时就将坏块链进行初始化。
会保留一些"备用扇区 ",用于替换坏块 。这种方案称为扇区备用。且这种处理方式中,坏块对操作系统透明。
【注意】这里的透明是看不见的意思。在计算机中,从某个角度看不到的特性称该特性是透明的。这个意义上的"透明"与社会生活中的透明含义恰好相反。
例如计算机组织对程序员是透明的,就是说计算机组织对程序员来说是看不到的,也不需要看到的。
详细:【详解】计算机术语"透明"是什么意思?"对...是透明的"怎样理解?
9.3系统调用后的磁盘管理
10.虚拟文件系统VFS
为了实现VFS,Linux主要抽象了4种对象类型:
超级块(superblock)对象
索引节点对象
目录项(inode)对象
文件(file)对象
普通文件系统中,不同文件系统的接口函数不一样,所以用户在使用时比较麻烦:
所以引出虚拟文件系统。
虚拟文件系统(VFS) 的特点:
-
向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异。
-
VFS要求下层的文件系统必须实现某些规定的函数 功能。
如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求。
-
每打开一个文件,VFS就在主存中新建一个vnode(v结点) ,用统一的数据结构表示文件,无论该文件存储在哪个文件系统。
【注意】vnode只存在于主存中;而inode(目录索引结点)既会被调入主存,也会在外存中存储。
11.文件系统挂载(安装)
文件系统挂载(mounting),即文件系统安装/装载――如何将一个文件系统挂载到操作系统中?
文件系统挂载要做的事:
- 在VFS中注册新挂载的文件系统。内存中的**挂载表(mount table)**包含每个文件系统的相关信息,包括文件系统类型、容量大小等。
- 新挂载的文件系统,要向VFS提供一个函数地址列表。
- 将新文件系统加到挂载点(mount point),也就是将新文件系统挂载在某个父目录下。