第四章 文件管理

文件管理

1.文件的相关概念及分类

长期存储信息有三个基本要求

  • 能够存储大量信息
  • 使用信息的进程终止时,信息仍旧存在
  • 必须能够使多个进程并发访问有关信息

文件的概念

文件是以计算机硬盘为载体的存储在计算机上的信息集合。文件是进程创建的信息逻辑单元。

  • 组成形式
    • 数据项:数据项是文件最低级的数据组成形式,主要可分为基本数据项(用来描述一个对象的某种属性的一个值)、组合数据项(由多个基本对象组成)。
    • 记录:记录是一组相关的数据项之和。
    • 文件: 文件是创建者所对的一组相关信息的集合。

文件的分类

  • 普通文件

    • ASCII文件
    • 二进制文件
  • 目标文件

  • 特殊文件

    • 字符

2.文件的逻辑结构、物理结构及存取方法

文件的逻辑结构

此部分根据上课的PPT所写,跟网上的资料可能存在不一致的情况。

image-20221123143200782

无结构

字节序列,无结构文件又叫做流式文件,将数据桉顺序组织、记录、积累保存,以字节(byte)为单位,是有序信息项的集合。因为没有结构,只能通过穷举搜索的方式查找,查找非常低效率。

有结构
  • 记录序列,文件记录一个接一个的顺序排列,通常是定长的。文件记录一个接一个的顺序排列,通常是定长的。

  • ,可以想象电脑中的中的文件结构。文件在这种结构中由一颗记录树构成,每个记录不必具有相同的长度,记录的固定位置上有一个键字段。这棵树按键字段进行排序,从而可以对特定键进行快速查找

文件的物理结构

文件的物理结构又称为文件的存储结构,它是指文件在外存上的存储组织形式,与存储介质的存储性能有关。常用的物理结构有连续文件结构串联文件结构索引文件结构三种。

连续文件结构(索引分配方式)

它是最简单的物理文件结构,它把一个在逻辑上连续的文件信息依次存放到物理块中。如图所示,表示存放该文件的第一个块序号为10,它的长度为4,表示该文件从序号为10的块开始存储在连续的4个物理块中。

顺序

串联文件结构(链接分配方式)

串联文件结构用离散分配,即非连续的物理块来存放文件信息。这些非连续的物理块之间没有顺序关系,其中每一个物理块设有一个指针,指向其后续物理块,从而使得存放同一文件的物理块链接成一个串联队列。

如图所示,文件说明信息表示存放文件第一个的物理块号为20,该文件拥有一个指向文件首块的指针,文件首块的数据区保存文件真正的数据,指针区则指向存放该文件的下一个物理块,以此类推,采用的是类似于链表的结构表示一个存放位置不连续的文件。

链接

索引文件结构(索引分配方式)

索引文件要求系统为每个文件建立一张索引表,表中每一个栏目指出文件信息所在的逻辑块号和与之对应的物理块号。

如图所示,索引分配方式将每个文件的所有盘块号都集中存放在一个索引表(逻辑块与物理块的映射表)中,这是个磁盘块地址数组,根据逻辑块号找到对应的物理块号,根据物理块号到磁盘找具体的数据块即可。
索引

文件的存取方法

顺序存取
  • 从头顺序读取文件的全部字节或记录
  • 不能跳过某一些内容,不能不按顺序读取。可以返回起点,必要时可多次读取该文件
  • 存储介质是磁盘的情况下,顺序文件很方便
随机存取
  • 可以任意顺序读取字节或记录
  • 对数据库系统是必要的
  • 指示从何处开始读取文件的两种方法
    • 每次读操作都给出开始读文件的位置
    • 用一个特殊的seek操作设置当前位置

3.文件的目录结构以及目录管理

文件系统通常提供目录文件夹用于记录文件的位置。很多系统中,目录本身也是文件。

与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息,包括属性、 位置和所有权等,这些信息主要是由操作系统进行管理。为实现目录管理,操作系统中引入了文件控制块的数据结构。

文件控制块

文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。

FCB主要包含以下信息:

  • 基本信息,如文件名、文件的物理位置,文件的逻辑结构,文件的物理结构等。
  • 存取控制信息,如文件的存取权限等。
  • 使用信息,如文件的建立时间、修改时间等

索引节点

在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读取该文件的物理地址。也就是说,检索目录时,文件的其他描述信息不会用到,也不需要调入内存。因此有的系统(如UNIX)采用了文件名和文件描述信息分开的方法,文件描述信息单独形成一个成为索引结点的数据结构,简称为i结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的结点的指针构成

目录结构

在理解一个文件系统的需求前,我们首先来考虑在目录这个层次上所需要执行的操作,这有助于后面文件系统的整体理解。

  • 搜索:当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。
  • 创建文件:当创建一个新文件时,需要在目录中增加一个目录项。
  • 删除文件:当删除一个文件时,需要在目录中删除相应的目录项。
  • 显示目录:用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。
  • 修改目录:某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。

操作时,考虑以下几种目录结构:

单级目录结构

在整个文件系统中只建立一张目录表。

image-20221204125349158上图表示:

  • 含有四个文件
  • 属于三名用户

当访问一个文件时,先按文件名在该目录中查找到相应的FCB,经合法性检查执行后执行相应的操作。当建立一个新文件时,必须先检索所有目录项以确保没有“重名”的情况,然后在该目录中增设一项,把FCB的全部信息保存在该项中。当删除一个文件时,先从该目录中找到该文件的目录项,回收该文件所占用的存储空间,然后再清楚该目录项。

两级目录结构

单级目录很容易造成文件名称的混淆,可以考虑采用两级方案,将文件目录分成主文件目录(Master File Directory,MFD)和用户目录(User File Directory,UFD)两级

image-20221204132016861

主文件目录项记录用户名及相应用户文件目录所在的存储位置。用户文件目录项记录该用户文件的FCB信息。当某用户欲对其文件进行访问时,只需要搜索该用户对用的UFD,这既解决了不同用户文件的“重名”问题,也在一定程度上保证了文件的安全。

多级目录结构(树形目录结构)

将两级目录结构的层次关系加以推广,就形成了多级目录结构,即树形目录结构。

用户要访问某个文件时用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件的通路上的所有目录名誉数据文件名用分割符链接起来而成。从根目录出发的路径称绝对路径。当层次较多时,每次从根目录查询浪费时间,于是加入了当前目录,进程对个文件的访问都是相对于当前目录进行的,当用户要访问某个文件时,使用相对路径标识文件,相对路径由从当前目录出发到所找文件通路上的所有目录名誉数据文件名用分隔符链接而成、

文件目录管理

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

4.实现文件共享的方法

文件共享是可以提高文件的利用率,避免存储空间的浪费,并能实现用户用自己的文件名去访问共享文件。

有共享文件的文件系统如下:

image-20221204151857341

共享文件如果动态变化如何处理

  • 硬链接(共享索引节点)
  • 软链接(符号链接)

硬链接(共享索引节点)

image-20221204220848558

(a)连接之前的状况

(b)创建连接之后

(c)当所有者删除文件后

软链接(符号链接)

(a)系统为共享文件在共享目录下创立新的文件(类型LINK)

(b)新建立LINK文件内容为共享文件的链接,即共享文件路径名

(c)访问共享文件时,先找到LINK文件,根据其中的链接访问该文件

5.文件的实现

连续结构

image-20221205182250539

(a) 为7个文件连续分配空间

(b) 删除文件D和F后磁盘的状态

链表结构

image-20221205182340211

在内存中的链表结构

image-20221205182356152

索引结点结构

image-20221205182408790

6.目录的实现

image-20221205183018912

(a) 简单目录实现:将文件名与文件属性作为一个目录项放在一起。即包含固定大小的目录项,在目录项中有磁盘地址和属性。

(b) 索引目录实现:将文件名与文件属性分开,每个目录项只有文件名和索引节点。

目录实现的问题

  • 可变长文件名问题
  • 文件共享问题
可变长文件名问题

image-20221205183142584

在目录中处理长文件名的两种方法

(a) 在行中

(b) 在堆中

7.文件的磁盘空间管理,成组链接法

磁盘空间管理的意义

文件信息在大部分时间内都是存放在外存储器(主要是磁盘)上的,只在文件创建时放在内存和使用时从外存调入内存。一块磁盘的容量常有几百兆到数千兆字节,如果由用户来分配空间是不可想象的事情。

为了使用户能够直接使用文件名存取所需的信息,而又无须知道信息存放的位置,文件系统除了要建立一个文件目录之外,还应建立一套文件存放空间的管理办法,以便能自动地和动态地分配、管理文件存储空间,同时为用户了解外存使用情况提供信息。

例如,当外存已被文件占满时,用户通过有关命令可查询外存(盘区)空间的使用情况,使用了多少空间,还剩余多少空间。当空闲空间不够时,用户可以删除一些过时的或不必要的文件以腾出空间。

常用来解决空闲空间问题的方法有:位图空闲表法空闲链表法成组链接法

成组链接法

前提假设

假设一个空闲的盘块可以存储另外5个盘块的地址和一个当前盘块可以用来存储盘块地址的变量N,结构如下:

img

成组链接的基本结构

每一个该结构中的盘块存储的都是可用盘块的地址,如下图,盘块25为空闲的盘块,可以用来存储数据,在盘块0中空间0存储的是下一个类似于盘块0结构的盘块1的地址,空间14存储的则是可以用来存储数据的盘块2~盘块5的地址,盘块1中的结构和盘块1中的结构一致,整个结构将所有的可用盘块按照类似的结构全部链接起来。

img

例子

初始状态假设为上图所示,现在系统要申请5个盘块用来存储数据data,其中data可以分为(data_1,data_2,data_3,data_4,data_5)5个部分存储在5个盘块中

存储data_1

首先查盘块0,N=5,说明还有可以用的盘块,直接选择盘块5存储data_1数据段,将数据data_1写入盘块5中,将盘块0中空间4清空。
img

存储data_2到data_4

同理,可以将数据段data_2~data_4一次存入盘块4、盘块3、盘块2中
img

img

img

存储data_5

到此时,盘块0中存储的只有盘块1的地址,盘块1不能用来存储数据,此时应该将盘块1的内容复制到盘块0中来:让盘块1可以用来存储数据:

img

此时将data_5写入盘块1中

img

到此,一个数据的存储过程就结束了,当然实际情况一个盘块可以存储的地址肯定不止5个,这里只是以5个为例子,展示流程。

回收data_5(盘块1)

讲完分配,现在讲讲回收,现在系统需要回收data_5数据段,释放盘块1,将盘块1放入到可用表中,流程如下:

此时,系统观察到盘块0中已经没有空余的空间可以存储盘块1的地址,此时采取的策略是:

将现在盘块0中的内容复制到盘块1中:

img

然后将盘块0的内容更新,空间0存储盘块1的地址,其他空间空闲:

img

回收data_4data_1(盘块2盘块5)

此时盘块中空闲的空间有5-1=4个,现在回收data_4:

将盘块2的地址写入到盘块0的空闲空间1中,然后清空盘块2的内容:

img

其他盘块按照如此逻辑,一次回收:

img

img

img

到此,有关成组链接的具体分配和回收流程就结束了。

8.文件系统的可靠性及其实现

文件系统的可靠性

  • 文件备份
    • 全量、增量;块拷贝、逻辑备份
  • 文件的一致性
    • 块一致性、文件一致性
文件系统备份
备份原因

灾备

数据丢失

备份策略

(全量,增量)

Two strategies can be used for dumping

物理转储(simplicity, great speed, can’t make incremental dumps and restore individual files)

逻辑转储

逻辑转移

image-20221206115850561

待转储的文件系统,方框代表目录,圆圈代表文件。被阴影覆盖的项目表示自上次转储以来修改过。每个目录和文件都被标上其i节点号

逻辑转储算法所使用的位图如下:

image-20221206115911010

文件系统的一致性

image-20221206115941466

文件系统状态

(a) 一致

(b) 块丢失

© 空闲表中有重复块

(d) 重复数据块

9.文件系统性能

  • 高速缓存
  • 块提前读
  • 减少磁盘臂运动

缓冲区高速缓存数据结构

image-20221206120105067

Buffer cache

组成

最近最少使用链表:由3个指针元素组成的数组,保存最近使用的缓冲区**。**

空闲链表:7个大小不同的链表组成的数组,已封装数据。

未使用链表: 单向链表,存放刚释放的未封装数据的缓冲区

image-20221206122901598

Buffer操作函数

1.getblk:获取一个缓冲区用于读写

2.refill_freelist: 释放缓冲

3.grow_buffers:将内存中申请的页面,链入free_list

4.try_to_free_buffers:将缓冲区数据刷新到磁盘,以得到空闲区。

5.alloc_page:从内存申请一个页面

6.get_unused_bufer_head:向系统申请一个空闲缓冲区。

7.bdflush:向设备写数据,后台运行。

8.free_page:释放页面到内存

10.文件的访问控制表及全能表保护机制

文件的访问控制表

(不知道合不合适)

文件访问控制列表(Access Control Lists,ACL)是Linux开的一套新的文件系统权限管理方法。

ACL有两种,一种是存取ACL(access ACLs),针对文件和目录设置访问控制列表。一种是默认ACL(default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,它就会使用该目录的默认ACL。要设置ACL,首先要安装管理工具,它们分别是getfacl和setfacl,在debian中只要安装acl软件包即可。

参考资料

操作系统—文件管理 - 知乎 (zhihu.com)

操作系统中文件的物理分配方式(文件的物理结构) - 水木颛顼 - 博客园 (cnblogs.com)

文件目录结构 - hunterDing - 博客园 (cnblogs.com)

操作系统——成组链接法_LengDanRan的博客-CSDN博客_成组链接法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值