第六章 文件系统

一、文件和和文件系统

1.1 文件、记录、数据项

数据项:

  • 基本数据项:属性的集合
  • 组合数据项:由若干个基本数据项组合而成

记录:

一组相关数据项的集合,用于描述一个对象在某方面的属性。

文件: 具有文件名的一组相关数据的集合

  • 有结构文件:若干条记录
  • 无结构文件:字节流

文件的属性:

  • 类型
  • 长度
  • 物理位置
  • 建立时间

1.2 文件类型与文件系统模型

文件类型非常简单,这里不做赘述。

文件系统模型:
在这里插入图片描述
对象:

  • 文件
  • 目录
  • 磁盘存储空间

操作和管理:

  • 对文件存储空间管理
  • 目录管理
  • 文件的地址转换
  • 文件读写
  • 文件共享与保护

接口:

  • 命令行
  • 图形界面

1.3 文件操作

为什么要打开关闭文件?

Answer:打开文件是指将文件的属性拷贝到内存当中,当用户对该文件进行操作时,就无需再从外存访问,节省了文件检索时间,同时提高了对文件的操作速度。

二、文件的逻辑结构

无结构物件: 字节流文件

顺序文件: 按照一定顺序排在一起,可定长与变长。

索引文件: 提供一张索引表。

索引顺序文件: 一组一组地形成索引,每个索引按照顺序排列

哈希文件: 通过映射计算

三、外存分配方式

3.1 连续分配

在这里插入图片描述
优点: 读取连续,方便

缺点: 造成碎片,还要知道文件的长度

3.2 连接分配

3.2.1 隐式链接

在这里插入图片描述
优点: 可以避免小碎片、有利于文件的插入删除、文件动态扩充

缺点: 查找困难,而且指针容易出错,访问第n个数据块,得照前面n-1个数据块

3.2.2 显式链接

为所有文件创建一个FAT表:
在这里插入图片描述
缺点:

  • 不能高效地直接存取,对一个较大的文件进行存取时,必须先找到许多空闲地块号
  • FAT需要占据较大的内存空间
3.2.3 索引链接

单极索引分配:
在这里插入图片描述
只适合于文件比较大的时候,文件比较小时,本来就只需要一个盘块,但是索引表就又占了一个

多级索引分配:

当文件过大时,索引表的大小大于一个盘块,那么就要多级索引。
在这里插入图片描述

混合索引方式:
在这里插入图片描述

四、目录管理

目录管理要求:

  • 实现按名存取
  • 提高对目录的检索速度
  • 文件共享
  • 允许文件重名

4.1 文件控制块与索引节点

文件控制块:
在这里插入图片描述

  • 基本信息:文件名、物理位置、逻辑结构、物理结构
  • 存取控制信息类
  • 使用信息类

索引节点的引入:

因为查找目录只和文件名有关系,与FCB中的数据是没有关系的,因此创建一个如下的索引表:
在这里插入图片描述
有两类索引节点:磁盘索引节点、内存索引节点

4.2 目录结构

单极目录:

  • 查找速度慢
  • 不允许重名
  • 不允许共享

两级目录:

  • 提高了检索速度
  • 不同用户目录下,可以采用相同的用户名
  • 可以实现文件的共享

多级目录:

在上一级的扩充

增加与删除目录:

  • 得先把目录中的文件删除干净
  • 可以将目录与文件一起删除

4.3 目录查询方法

  • 线性,一级一级查询
  • 哈希映射

五、文件存储空间的管理

与文件的物理结构不同,前者是考虑文件是什么存的,后者其实是考虑如何分配的。

其实这个对于进程/文件的物理结构与分配方式是一一对应的,连续分配对应整个存,离散分配对应将文件切分成块。

6.3是管文件如何给分配外存的,本节是讲如何利用剩下的外存的。

5.1 空闲表与空闲链表

空闲表:
在这里插入图片描述

空闲链表:

将空闲盘块链接起来

5.2 位示图法

在这里插入图片描述
横行代表一块盘区中的盘块号。

5.3 成组链接法

在这里插入图片描述

  • 对于空闲盘块号栈来说:
    • S.free代表有多少个空闲盘块
    • S.free下面代表下一个盘块,其都是整数
    • 然后是下一个盘块所记录的对应的那100空闲盘块号
  • 对于整百的空闲盘块来说,与上述一致
  • 对于非正百的空闲盘块来说,就是简单的空闲盘块

分配:

先从栈顶拿出空闲盘块,然后修改栈顶指针,修改S.free

如果读取完了这100块,那么将本块所指的一下组读到空闲盘块号栈中

是不是每一组的盘块号是不是一定要连续?

Answer:可以不需要连续,因为是通过索引分组的,而且在回收的时候,可能先回收了301、402,那么把它俩个盘块就放到一组了。

六、文件共享与保护

6.1 索引节点共享

在这里插入图片描述
要记录共享的个数与文件的拥有者

6.2 符号链实现文件共享

类似于快捷方式。仅用有文件的路径名,不拥有索引节点指针。

6.3 磁盘容错

6.3.1 SFT-I
  • 双份目录、双份文件分配表,做个备份。
  • 热修复重定向/写后读校验:把坏的那一部分读写重定向;写后读一下,看看写的是否成功
6.3.2 SFT-II
  • 磁盘镜像:把磁盘备份
  • 磁盘双工:通道、磁盘控制器都备份

七、数据一致性控制

7.1 事务

就是对数据的一系列操作,就拿commit为例。如果涉及到对表的增删改,那么如果不commit,就说明本次事务没有结束,如果在非正常情况下退出的话,是无效操作。同时可以回滚。

7.2 重复数据的数据一致性问题

7.2.1 重复文件的一致性

当有重复文件的时候,修改了这个文件的索引,那么其他索引都要修改。

7.2.2链接数一致性检查

在共享文件过程中,对count的检查。就是先从根目录开始查找,遇到该共享索引节点就+1,最后判断两个数是否相等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值