4、文件管理 磁盘

FCB (file control block)文件控制块 对于操作系统而言,当任何一个文件存储在本地后,会为了方便后续读取管理,而为每个文件建立专门的用以收集必要属性信息的数据结构,

文件的物理结构 (文件分配方式)

文件数据应该怎 样存放在外存中?

文件的物理结构(文件分配方式)

  • 连续分配
  • 链接分配
    • 隐式链接
    • 显式链接
  • 索引分配

文件块、磁盘块

类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理 块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同。内存与磁盘之间的数据交换(即 读/写操作、磁盘I/O)都是以 “块”为单位进行的。即每次读 入一块,或每次写出一块

连续分配

连续分配方式要求每个文件在磁盘上占有一组连续的块。

若此时文件A要拓展,但后面紧接着的一段已经满了,再往后一段才有空闲磁盘。 因此只能将文件A全部“迁 移”到最后的空闲区域。 结论:物理上采用连续分 配的文件不方便拓展。

优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快

缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片

链接分配

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种

显式链接

把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表(FAT,File Allocation Table)

假设某个新创建的文件“aaa”依次存放在磁盘块2→5→0→1

假设某个新创建的文件“bbb”依次存放在磁盘块4→23→3

注意:一个磁盘仅设置一张FAT。开机时,将FAT读入内存,并常驻内存。FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。

用户给出要访问的逻辑块号 i,操作系统找到该文件对应的目录项 (FCB)… 从目录项中找到起始块号,若i>0,则查询内存中的文件分配表FAT, 往后找到 i 号逻辑块对应的物理块号。逻辑块号转换成物理块号的过 程不需要读磁盘操作。

结论:采用链式分配(显式链接)方式的文件,支持顺序访问,也支 持随机访问(想访问 i 号逻辑块时,并不需要依次访问之前的 0 ~ i-1 号逻辑块),由于块号转换的过程不需要访问磁盘,因此相比于隐式 链接来说,访问速度快很多。 显然,显式链接也不会产生外部碎片,也可以很方便地对文件进行拓 展。

索引分配

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文 件的各个逻辑块对应的物理块

(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间 的映射关系)。

索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。

索引表

若每个磁盘块1KB,一个索 引表项4B,则一个磁盘块只 能存放 256 个索引项

如果一个文件的大小超过了256 块,那么一个磁盘块是装不下 文件的整张索引表的,如何解 决这个问题?

①链接方案 ②多层索引 ③混合索引

①链接方案

如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。

②多层索引

建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据 文件大小的要求再建立第三层、第四层索引块。

③混合索引:

多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接 指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)

文件系统例题

存放在某个磁盘上的文件系统,对于采用混合索引分配方式,其FCB中共有13项地址项,第0~9个地址项为直接地址,第10个地址项为一次间接地址,第11个地址项为二次间接地址,第12个地址项为三次间接地址。如果每个盘块的大小为512字节,盘块号需要3个字节来描述,则每个盘块最多存放170个盘块地址:
(1) 该文件系统允许的最大长度是多少?
(2) 将文件的字节偏移量5000、15000、150000转换为物理块号和块内偏移量。
(3) 假设某文件的索引结点已在内存中,但其他信息均在外存,为了访问该文件中某个位置的内容,最多需要几次访问磁盘?

(1) 文件的最大长度为:10+170+1702+1703=4942080块=2471040KB

(2)

  • 5000/512得商9,余数为392。即逻辑块号为9,块内偏移为392。故可直接从该文件的FCB的第9个地址处得到物理盘块号,块内偏移为392。
  • 15000/512得商为29,余数为152。即逻辑块号为29,块内偏移为152。由于10≤29<10+170,而29-10=19,故可从FCB的第10个地址项,即一次间址项中得到一次间址块;并从一次间址块的19项中获得对应的物理盘块号,块内偏移为152。
  • 150000/512得商为292,余数为496。即逻辑块号为292,块内偏移为496。由于10+170≤292,故可从FCB的第11个地址项,即二次间址项中获得第1个一次间址块;并从该一次间址块的112项中获得对应的物理盘块号,块内偏移为496。

(3) 由于文件的索引结点已在内存,为了访问文件中的某个位置的内容,最少需要1次访问磁盘(即通过直接地址直接读文件盘块),最多需要4次访问磁盘(第一次是读三次间址块,第二次读二次间址块,第三次读一次间址块,第四次是读文件盘块)

文件例题

1、Unix文件系统采用 流式文件

2、文件系统采用两级索引分配方式,如果每个磁盘块的大小为1KB,每个盘块号占4B,则该系统中,单个文件的最大长度是( )

设备盘块的大小为1KB,每个盘块号占4B,则一个索引块可含 1KB/4B=2^8B个盘块号

于是两级索引最多可以包含2^8 * 2^8 = 2^16 B 盘块号,因此允许的最大文件长度为1KB* 2^16 =64MB

例1

有一个计算机系统利用下图所示的位示图(行号、列号都从0开始编号)来管理空闲盘块。

如果盘块从1开始编号,每个盘块的大小为1KB。

(1)现要从文件分配两盘块,试具体说明分配过程。

(2)若要释放磁盘的第300块,应如何处理?

(1)分配过程
线形检索(肉眼扫描)得:i1=2,j1=2; i2=3,j2=6。

​ 计算空闲盘块号:

​ b1=i1×16+j1+1=2×16+2+1=35

b2=i2×16+j2+1=3×16+6+1=55

修改位示图:

令map[2,2]=map[3,6]=1,并将对应块35,55分配出去。

(2)释放过程

计算出第300块所对应的二进制行号i和j

​ i=(300-1)/16=18

​ j= (300-1)% 16=11

修改位示图:

​ 令map[18,11]=0。

例2

假定盘块的大小为1KB,硬盘的大小为500MB,采用显示链接分配方式时,其FAT需占用多少存储空间(FAT表项占2.5个字节)?如果文件A占用硬盘的11, 12 , 16, 14四个盘块,试画出文件A中各盘块在FAT表中的链接情况.

解:此时硬盘共有500M/1K=500K个盘块,

FAT表项共有500K* 2.5B=1250KB

很多例题

磁盘

磁盘的记录功能:磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据

每一个圈都是一个磁道,然后又分为多个扇区,不过每个扇区的数据量大小相同;最内侧磁道上的扇区面积最小,因此数据密度最大

盘面、柱面

一个磁盘可能会有两个盘面都记录了数据

一个个圆柱体!

可用(柱面号,盘面号,扇区号)来定 位任意一个“磁盘块”。也就是经常提到文件数据存放在外存中的几号块。

可根据该地址读取一个“块”

①根据“柱面号”移动磁臂,让磁头指 向指定柱面;

②激活指定盘面对应的磁头;

③磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写。

磁盘的分类

  • 固定头磁盘、活动头磁盘
  • 盘片可以更换?可换盘磁盘、固定盘磁盘

一次磁盘读/写操作需要的时间

寻找时间(寻道时间)T1:在读/写数据前,将磁头移动到指 定磁道所花的时间。 ①启动磁头臂是需要时间的。假设耗时为 s; ②移动磁头也是需要时间的。假设磁头匀速移动,每跨越一 个磁道耗时为 m,总共需要跨越 n 条磁道。

则: 寻道时间 T1 = s + m*n

延迟时间T2:通过旋转磁盘,使磁头定位到目标扇区所需要的 时间。设磁盘转速为 r (单位:转/秒,或 转/分,记得转化为转/秒的时候➗60),则 平均所需的延迟时间 T2 = (1/2)*(1/r) = 1/2r【1/r 就是转一圈需要的时间。找到目标 扇区平均需要转半圈,因此再乘以 1/2】

传输时间T3:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速为 r,此次读/写的字节数为 b,每个磁道上的字节数为 N。

则: 传输时间T3= (1/r) * (b/N) = b/(rN)【每个磁道要可存 N 字节的数据,因此 b 字节的数据需要 b/N 个磁道才能存储。而读/写一个磁道所需的时间 刚好又是转一圈所需要的时间 1/r】

磁盘调度算法

  • 先来先服务(FCFS)
  • 最短寻找时间优先(SSTF)
  • 扫描算法(SCAN)
  • 循环扫描算法(c-SCAN)

如何提升性能?

操作系统的磁盘调度算法会直接影响寻道时间T1,延迟时间和传输时间都与磁盘转速相关,且为 线性相关。而转速是硬 件的固有属性,因此操 作系统也无法优化延迟 时间和传输时间。

例子:假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问 55、58、39、18、90、160、 150、38、184 号磁道

先来先服务算法(FCFS)

优点:公平、简单;

缺点:寻道时间长,相当于随机访问模式。如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。

仅适用于请求磁盘I/O的进程数目较少的场合

最短寻找时间优先(SSTF)

优先处理的磁道是与当前磁头最近的磁道。

可以保证每次的寻道时间最短,比FCFS有更好的寻道性能,但是并不能保证总的寻道时间最短,可能饥饿。

(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)

扫描算法(SCAN)

为了防止饥饿, 可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移 动。这就是扫描算法,由于磁头移动的方式很像电梯,因此也叫电梯算法。

假设某磁盘的磁道为 0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向 移动,有多个进程先后陆续地请求访问 55、58、39、18、90、160、150、38、184 号磁道

优点:性能较好,平均寻道时间较短,不会产生饥饿现象

缺点:①只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请 求之后就不需要再往右移动磁头了。 ②SCAN算法对于各个位置磁道的响应频率不平均(如:假设此时磁头正在往右移动,且刚处理过 90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道 的请求之后,很快又可以再次响应 184 号磁道的请求了)

LOOK 调度算法

扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁 道的访问请求之后就不需要再往右移动磁头了。LOOK 调度算法就是为了解决这个问题,如果在磁 头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫 LOOK)

优点:比起 SCAN 算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

循环扫描算法(C-SCAN)

SCAN算法对于各个位置磁道的响应频率不平均,而 C-SCAN 算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请 求。

优点:比起SCAN 来,对于各个位置磁道的响应频率很平均。 缺点:只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求 之后就不需要再往右移动磁头了;并且,磁头返回时其实只需要返回到18号磁道即可,不需要返 回到最边缘的磁道。另外,比起SCAN算法来,平均寻道时间更长。

C-LOOK 调度算法

C-SCAN 算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定 需要返回到最边缘的磁道上。C-LOOK 算法就是为了解决这个问题。如果磁头移动的方向上已经没有 磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。

优点:比起 C-SCAN 算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间 进一步缩短

【若题目中无特别说明, 则SCAN 就是 LOOK, C-SCAN 就是C-LOOK

posted @   Dinesaw  阅读(1351)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示