《操作系统导论》学习笔记(十):文件系统(持久化)

文件系统

文件:具有符号名,由字节序列构成的数据项集合

  • 普通文件:包含用户的信息,一般为 ASCII 或二进制文件。
  • 目录文件:管理文件系统的系统文件。
  • 特殊文件:字符设备文件(I/O设备)、块设备文件(磁盘)。

在这里插入图片描述
文件系统:操作系统中管理持久性数据的子系统,提供数据存储和访问功能。
在这里插入图片描述

  • 用户要查看文件 F 中的内容,对操作系统发出指令,从而经过第一层的用户调用接口。
  • 操作系统得到命令后,需要查找目录以查找文件 F 的文件控制块 FCB,从而经过第二层文件目录系统。
  • 通过目录找到文件 FCB 后,查看文件 FCB 上的权限信息,验证当前用户是否拥有文件访问权限,从而进过第三层存取控制模块。
  • 用户通过验证后,操作系统将根据文件的逻辑结构将逻辑记录转换为相应逻辑地址,从而经过第四层逻辑文件系统与文件信息缓冲区
  • 操作系统在物理文件系统中将逻辑地址转换为物理地址

用户调用接口

在这里插入图片描述

文件目录系统

文件控制块(FCB):描述和控制文件属性的数据结构,文件控制块和文件一一对应。常用属性包括文件名、文件大小、物理位置、控制权限、逻辑结构和物理结构等。
在这里插入图片描述

文件目录:文件控制块的有序集合,一个文件控制块就是一个目录项。
目录文件:文件目录以文件的形式存放在磁盘上。

文件目录的逻辑结构可分为单级目录结构、两级目录结构和多级目录结构。

  • 单级目录结构:整个文件系统只建立一张目录表,每个文件对应一个目录项。
    在这里插入图片描述
  • 两级目录结构:目录分成 主文件目录(MFD)用户文件目录(UFD),主文件目录记录用户名及其用户文件目录的存储位置,用户文件目录记录文件的位置。
    在这里插入图片描述
  • 多级目录结构:两级目录结构层次关系的推广,从根目录出发的路径称为 绝对路径,从当前目录出发的路径称为 相对路径,目录名与数据文件名使用 / 链接。
    在这里插入图片描述

逻辑文件系统

逻辑结构 是从用户观点看到的文件组织形式。

  • 流式文件:文件是有逻辑意义、 无结构的一串字符的集合。流式文件没有结构,因而只能按字节穷举寻找文件。
  • 记录式文件:文件由若干个记录组成,可以按记录进行读、写、查找等操作。记录式文件的组织形式可以分为顺序文件、索引文件、散列文件等。
    在这里插入图片描述

存取控制模块

为了防止未经核准的用户修改文件,文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题,必须建立相应的保护机制。

存取控制力模块包括用户身份验证和访问控制:

  • 口令保护:用户建立一个文件时提供一个口令,系统为文件建立 FCB 时附上相应口令,用户请求访问时必须提供相应口令。
  • 加密保护:用户对文件进行加密,文件被访问时需要密钥,安全性更高
  • 访问控制:最常用的方法是根据用户身份进行控制,系统为每个文件和目录增加一个访问控制列表,审查用户的身份、审查操作的合法性
    在这里插入图片描述

物理文件系统

磁盘是文件存储的物理介质,可划分为大小相等的物理块,独立存储传输信息。
在这里插入图片描述
物理结构 是文件在磁盘上的存储组织形式,可分为非空闲块的物理结构和空闲块的物理结构。

非空闲块的物理结构包括连续结构、链式结构和索引结构。

  • 连续结构:文件信息放在若干连续的物理块中。磁盘寻道次数和时间最少,随机存取速度快,但不利于文件动态扩充,只适合长度固定的文件。
    在这里插入图片描述
  • 链接结构:文件信息存放在若干不连续的物理块中,物理块之间通过指针连接。提高磁盘利用率,有利于动态扩充,但磁盘寻道次数和时间增多,只能顺序存取。
    在这里插入图片描述
  • 索引结构:文件信息存放在若干不连续物理块中,系统为系统为每个文件建立一个索引表,每个索引表条目对应一个物理块。保持链接结构的优点,能够随机存取,但磁盘寻道次数和时间增多,索引表占据空间。
    在这里插入图片描述
    空闲块的物理结构包括空闲表法、空闲链接法和空闲块链表。
  • 位图法:利用二进制的一位表示磁盘中一个盘块的使用情况,每个物理块对应一位,分配物理块为0 ,否则为1。
  • 空闲块表是将所有空闲块记录在一个表,表项包括起始块号、块数;空闲块链表是把所有空闲块链成一个链。

文件系统实现

磁盘分区:把一个物理磁盘的存储空间划分为几个相互独立的部分,称为分区
块或簇: 一 个或多个(2 的幂)连续的扇区,可寻址的数据块
文件卷:磁盘上的逻辑分区,由一个或多个物理块( 簇)组成,可以是 整个磁盘部分磁盘跨盘(RAID)
在这里插入图片描述

  • 引导区:包含从该卷引导操作系统所需的信息,每个分区一个,通常为第一个扇区
  • 分区信息:包含该分区的块数和大小 、空闲块数量和指针、空闲 FCB 数量和指针
  • 目录文件:包含根目录文件和其他目录文件
  • 用户文件:空闲区文件和非空闲区文件

1. FAT文件系统

在这里插入图片描述
FAT12、FAT16和FAT32的数字表示文件分配表的位数,FAT文件系统的簇大小分为1、2、4、8、16、32或64扇区

  • 引导区:保存文件系统的数据记录,分为主引导记录 MBR 和分区引导记录 DBR,主引导记录包含引导代码、分区表项和扇区结束标志
  • 文件分配表FAT:表项大小为 2 字节,描述簇的分配状态、标注下一簇的簇号等,分配状态未使用、坏簇、系统保留、被文件占用(下一簇簇号)、最后一簇(0xFFFF),文件分配表FAT同时管理空闲块和非空闲块,承担管理分区信息的作用
  • 根目录:目录项大小为 32 字节,记录文件系统的所有目录文件的位置,访问一个文件分为两步骤
    在这里插入图片描述
  • 目录检索:用户给出文件名 → 按文件名查找到目录项/FCB
  • 文件寻址:根据 目录项/FCB 中文件物理地址等信息,计算出文件中任意记录或字符在存储介质上的地址

2. Unix文件系统

在这里插入图片描述
超级数据块包含了 i节点表 和 空闲区管理 等重要的文件系统信息,inode维护文件到物理块的映射关系,空闲块的管理是通过成组链接法来实现的,三者作用相当于文件分配表FAT

FCB分解法加快目录检索,即把FCB=符号目录顶+基本目录项两部分,符号目录顶包含文件名和文件号,基本目录项包含文件号和其他信息。
在这里插入图片描述
Unix的基本目录项是 inode,符号目录顶称为目录项,每个文件由一个目录项、一个inode和若干磁盘块构成。每次检索时,系统只需要检索目录项,然后按照目录项的文件号(inode指针)查询 inode,如此循环直至找到目标文件。
在这里插入图片描述
目录是存在磁盘上的,所以检索目录的时候需要访问此案,速度很慢,而FCB分解法将FCB的一部分数据分解出去,存放在另一个数据结构当中,而在目录中仅留下文件的基本信息和指向该数据结构的指针,有效缩减目录的体积,减少目录所占的磁盘块数,检索目录时读取磁盘的次数页减少。

例题:在实现文件系统时,为加快文件目录的检索速度,可利用 ”FCB分解法“。假设目录文件存放在磁盘上,每个磁盘 512B,FCB 占 64B,符号目录项占 10B,基本目录项占 56B

(1) 假设某一目录文件有254个FCB,分别给出采用分解法前和分解法后,查找文件的某一个FCB的平均访问磁盘次数。

:分解前,目录的磁盘块数为 64*254/512=31.75,即 32 块
所找的目录项在第1, 2, 3 … , 32 块所需的磁盘访问次数分别为 1, 2, 3 … , 32 次,
所以平均访问磁盘次数=(1+2+3+…+32)/32=16.5 次

分解法后,目录的磁盘块数为 10*254/512=4.96,即 5 块
因为 FCB 分解法将 FCB 的部分内容放在目录外,所以检索完目录后还需读取一次磁盘找齐 FCB 的所有内容
所找的目录项在第第1, 2, 3, 4, 5块所需的磁盘访问次数分别为 2, 3, 4, 5, 6 次,
所以平均访问磁盘次数=(2+3+4+5+6)/5=4 次

(2) 若目录文件分解前占用 n 个盘块,分解后改用 m 个盘块存放文件名和文件号,请给出访问磁盘次数减少的条件。

:分解法前平均访问磁盘次数=(1+2+3+…+n)/n=(n+1)/2次
分解法后平均访问磁盘次数=(2+3+4+…+(m+1))/m=(m+3)/2次
显然 (m+3)/2<(n+1)/2,即 m<n-2

磁盘访问优化

在这里插入图片描述
一次访盘请求:

  • 寻道:磁头移动定位到指定磁道
  • 旋转延迟:等待指定扇区从磁头下旋转经过
  • 数据传输:数据在磁盘与内存之间实际传输

一次访盘时间=寻道时间 T n T_n Tn +旋转延迟时间 T r T_r Tr+传输时间 T t T_t Tt

  • 寻道时间 T n T_n Tn =启动磁臂时间 2 m s 2ms 2ms+磁头移动单条磁道时间 0.2 m s 0.2ms 0.2ms * 磁道数 n n n
  • 旋转延迟时间 T r T_r Tr = 1 / ( 磁 盘 旋 转 速 度 r × 2 ) 1/(磁盘旋转速度 r×2) 1/(r×2)
  • 数据传输时间 T t T_t Tt = 传 输 的 字 节 数 b / ( 磁 盘 旋 转 速 度 r × 一 个 磁 道 的 字 节 数 N ) 传输的字节数 b / (磁盘旋转速度r×一个磁道的字节数 N) b/(r×N)

1. 磁盘调度(寻道时间)

假设磁盘访问序列:98 ,183 ,37 ,122 ,14 ,124 ,65 ,67,读写头起始位置:53,要求计算磁头服务序列和磁头移动总距离。

先来先服务(FCFS):按访问请求到达的先后次序服务
在这里插入图片描述
磁盘访问序列:98,183,37,122,14,124,65,67,磁头移动总距离是 640 磁道

最短寻道时间优先(SSTF):优先选择距当前磁头最近的访问请求进行服务
在这里插入图片描述
磁盘访问序列:98,183,37,122,14,124, 65,67,磁头移动总距离是 236 磁道

扫描算法(SCAN):当 设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复
在这里插入图片描述
磁盘访问序列:98,183,37,122,14,124, 65,67,磁头移动总距离是 218 磁道

2. 信息的优化分布(旋转延迟)

记录在磁道上的排列方式也会影响输入输出操作的时间

处理程序要求顺序处理8 个记录;磁盘旋转一周为 20 ms/r;花5毫秒对一个记录进行处理
在这里插入图片描述
解:读取一个扇区需要时间: 20 / 8 = 2.5 m s 20/8=2.5ms 20/8=2.5ms,处理一个记录需要 5 m s 5ms 5ms
按顺序处理8个记录,磁盘1每个记录的处理间隔 7 ∗ 2.5 m s = 17.5 m s 7*2.5ms = 17.5ms 72.5ms=17.5ms,前7个记录处理时间为 17.5 m s ∗ 7 = 122.5 m s 17.5ms*7=122.5ms 17.5ms7=122.5ms,最后一个记录为 2.5 + 5 = 7.5 m s 2.5+5=7.5ms 2.5+5=7.5ms,所以总处理时间为 130 m s 130ms 130ms

按磁盘处理8个记录,磁盘2每个记录的处理间隔 5 ∗ 2.5 m s = 12.5 m s 5*2.5ms =12.5ms 52.5ms=12.5ms,前7个记录处理时间为 12.5 m s ∗ 7 = 87.5 m s 12.5ms*7=87.5ms 12.5ms7=87.5ms,最后一个记录为 2.5 + 5 = 7.5 m s 2.5+5=7.5ms 2.5+5=7.5ms,所以总处理时间为 95 m s 95ms 95ms

3. 合理分配磁盘空间(寻道时间)

分配磁盘块时,把有可能顺序存取的块分配在同一柱面上,从而减少磁盘臂的移动次数和距离
在这里插入图片描述

减少磁盘访问

块高速缓冲区:利用程序执行的时间局部性,在内存中为磁盘块设置一个缓冲区,保存磁盘中某些块的副本。访问内存块时,先查询块高速缓存,再查询磁盘

提前读取:利用程序执行的空间局部性,每次访问磁盘,多读取一些磁盘块

参考文献

《操作系统原理》陈向群
C语言文件操作

猜你喜欢

转载自blog.csdn.net/K_Xin/article/details/108133312