文件系统基础
概念
文件:以计算机硬盘为载体的存储在计算机上的信息集合
文件的属性
文件具有一定的属性,系统不同,属性也会有所不同,但通第都包括如下属性:名称、标识符、类型、位置、大小、保护、时间、日期和用户标识。
文件的基本操作
操作系统提供系统调用,它对文件进行创建、写、读、重定位、删除和截断等操作。
(1)创建文件
创建文件有两个必要步骡:一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能的信息。
(2)写文件
写文件,执行一个系统调用,指明文件名称和要写入文件的内容。对于给定文件名称,系统搜索目录以查找文件位置。系统为该文件维护一个写位置的指针。
(3)读文件
读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统维护一个读位置的指针。
(4)文件重定位(文件寻址)
按某条件搜索目录,将当前文件位置设为给定值,并且不会读、写文件。
(5)删除文件
先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
(6)截断文件
允许文件所有属性不变,并删除文件内容,即将其长度设为0,并释放其空间。
(7)打开文件
使用Open系统调用打开文件(主要工作:把指定文件的目录项复制到内存指定的区域)
(8)关闭文件
使用Close系统调用关闭文件。
文件逻辑结构
(1)流式文件(无结构文件)
流式文件是最简单的文件组织形式。流式文件将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节为单位。
(2)记录式文件(有结构文件)
1)顺序文件
文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。
ps:可变长记录的顺序文件无法实现随机存取
2)索引文件
3)索引顺序文件
索引顺序文件是顺序和索引两种组织形式的结合。
4)直接文件或散列文件
给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。
文件目录
文件控制块FCB
与进程管理一样,为实现目录管理,操作系统中引入了文件控制块的数据结构。
文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。
FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB 并存放在文件目录中,成为目录项。
FCB主要包含以下信息:
(1)基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等
(2) 存取控制信息,如文件存取权限等
目录结构
- 搜索。当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。
- 创建文件。当创建一个新文件时,需要在目录中增加一个目录项。
- 删除文件。当删除一个文件时,需要在目录中删除相应的目录项。
- 显示目录。用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。
- 修改目录。某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。
1)单级目录结构
在整个文件系统中只建立一张目录表,每个文件占一个目录项
ps:一个系统只有一张目录表,不允许文件重名
2)两级目录结构
将文件目录分成文件目录和用户文件目录两级
ps:不同用户的文件可以重名,但不能对文件进行分类
3)多级目录结构
将两级目录结构层次关系加以推广,就形成了多级目录结构,即树形目录结构
- 绝对路径:从根目录出发的路径
- 相对路径:从当前目录出发的路径
ps:不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享
4)无环图目录结构
引入无环图目录结构是为了实现文件共享
索引节点
除了文件名之外的所有信息都放到索引结点中,每个文件对应一个索引结点。
目录项中只包含文件、索引结点指针,因此每个目录项的长度大幅減少,检索文件时磁盘1/0的次数就少了很多。
文件的物理结构
连续分配
连续分配方式要求每个文件在磁盘上占有一组连续的块
- 优点:支持顺序访问和直接访问(随机访问);在顺序读/写时速度最快
- 缺点:不方便文件扩展;存储空间利用率低;会产生磁盘碎片
物理块号=起始块号+逻辑块号
链接分配
采取离散分配的方式,可以为文件分配离散的磁盘块。
隐式链接
目录中记录了文件存放的起始块号和结束块号。除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针
- 优点:方便文件拓展;无碎片问题;外存利用率高
- 缺点:只支持顺序访问,不支持随机访问,查找效率低;指向下一个盘块的指针也需要耗费少量的存储空间
显式链接
把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT)。
ps:一个磁盘只会建立一张文件分配表(FAT)。开机时文件分配表放入内存,并常驻内存。
从目录项中找到起始块号,若i>=0,则查询内存中的文件分配表FAT,往后找到i号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。
- 优点:方便文件拓展;无碎片问题;外存利用率高;支持顺序访问和随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
- 缺点:文件分配表的需要占用一定的存储空间
ps:开机时,将FAT读入内存,并常驻内存
索引分配
允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
优点:支持直接访问,无外部碎片问题
缺点: 索引块的分配增加了系统存储空间的开销
ps:一个文件对应一张索引表
索引块支持大文件机制
1)链接方案
如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。
2)多层索引
建立多层索引。使第n层索引块指向第n+1层的索引块。
ps:采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作
3)混合索引
三种机制的对比
文件共享
(1) 基于索引结点的共享方式(硬链接)
索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。
- 若count=2,说明此时有两个用户目录项链接到该寨引结点上,或者说是有两个用户在共享此文件
- 若某个用户“删除” 该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count 值减1。
- 若count >0,说明还有别的用户要使用该文件暂时不能把文件数据删除,否则会导致指针悬空。
(2)基于符号链的共享方式(软链接)
为使用户B能共享用户A的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将文件F写入用户B的目录中,以实现用户B的目录与文件F的链接。
文件保护
(1)口令保护
为文件设置一个“口令”,用户想要访问文件时需要提供口令,由系统验证口令是否正确。
实现开销小,但“口令”一般存放在FCB 或索引结点中(也就是存放在系统中)因此不大安全
(2)加密保护
用一个“密码”对文件加密,用户想要访问文件时,需要提供相同的“密码” 才能正确的解密。
安全性高,但加密/解密需要耗费一定的时问(例:异或加密)。
(3)访问控制
用一个访问控制表(ACL)记录各个用户(或各组用户)对文件的访问校限。
对文件的访问类型可以分为:读/写/执行/删除等。
实现灵活,可以实现复杂的文件保护功能。
文件系统
文件系统的层次结构
文件存储空间管理
(1)空闲表法
适用于连续分配方式
(2)空闲链表法
1)空闲盘块链
以盘块为单位组成一条空闲链,分配时从链头依次取出空闲块,回收时将空闲块查到链尾
2)空闲盘区链
以盘区为单位组成一条空闲链,分配时可采用首次适应、最佳适应等策略;回收时注意相邻空闲盘区合并的问题
(3)位示图法
一个二进制位对应一个盘块
(4)成组链接法
UNIX 采用的策略,适合大型文件系统。
具体讲解观看王道考研-操作系统:4.1_6_文件存储空间管理_哔哩哔哩_bilibili