参考视频:王道计算机考研 操作系统_哔哩哔哩_bilibili
参考书籍:左万利《计算机操作系统教程(第4版)》
目录
第四章 文件管理
一、文件与文件系统
1.概念
操作系统是一个资源管理者,负责管理计算机中的软件资源和硬件资源。硬件包括处理机、存储器和设备。软件资源就是计算机所要运行的程序以及运行中所需要的数据。而这些程序和数据就需要长期保存在计算机之中,即以文件的方式保存在外存磁盘上。
操作系统对于软件资源的管理就相当于文件系统的管理。
文件:具有符号名而且在逻辑上具有完整意义的信息项的有序序列。文件的符号名称为文件名。
读(写)指针需要指出当前读取(写入)的位置以及下一个信息项的位置。
文件系统:文件与管理文件的程序集合。
2.文件的分类
3.文件的访问方式
访问的分类:
- 顺序访问方式:从前到后依次地存取文件的各个信息项。
- 随机访问方式:无需存取各个信息项。
顺序访问方式:从文件起始位置开始顺序访问;从文件中间某处开始顺序访问。
随机访问方式:按记录编号随机访问;按关键字(key)随机访问。
二、文件的组织
- 文件的逻辑组织:用户看到的文件组织形式。
- 文件的物理组织:逻辑组织到磁盘的映射。
1.文件的逻辑组织
文件的逻辑组织形式主要有两种:流式与记录式。前者是无结构文件,后者是结构文件。
1.1 流式文件/无结构文件
构成文件的基本单位是字节。如“.txt”格式的文件。
1.2 记录式文件/有结构文件
构成文件的基本单位是记录。每条记录由若干数据项组成。如:数据库表文件。
每条记录有一个数据项作为关键字(作为区分不同记录的标识) 。
按照各记录长度是否相等,又可分为定长记录和可变长记录两种。
(1)每项记录的每一格的长度都固定长(定长):
注:定长可能浪费空间。
(2)“特长”这项数据的长度不确定(可变长):
1.3 顺序文件
顺序文件:文件中的记录逻辑上连续排列,记录可以是定长的,也可以是可变长的。各个记录对应物理上可以顺序存储(图左)或链式存储(图右)。
根据关键字,顺序文件还可分为串结构和顺序结构。
1️⃣物理上采取链式存储
无法实现随机存取,每次都只能从第一个记录开始依次往后查找。
2️⃣物理上采取顺序存储
(1)逻辑上为可变长记录
无法实现随机存取,因为需要给出每个“记录内容”的“记录长度”(占用1字节),所以每次都从头开始查找。
(2)逻辑上为定长记录
可实现随机存取,记录长度为L,则第 i 个记录存放在 L×i 的相对位置上。
3️⃣顺序文件采用串结构:无法快速找到某关键字对应的记录。
4️⃣顺序文件采用顺序结构:可以快速找到关键字对应的记录。
1.4 索引文件
解决可变长记录查找速度慢的问题。
建立一张索引表,每个文件对应一个索引表项,虽然每个记录的长度可能不同,但是每个索引表项长度相同,可以快速找到记录对应的索引表项。
1.5 索引顺序文件
每一个记录对应一个索引表,因此索引表可能会很大,甚至要大于比文件内容本身。这样的话,存储空间的利用率就过低。
解决方法:索引+顺序 ① 将所有的记录进行分组;② 每一组只对应一个索引表项。
记录过多时,可以进一步提高检索效率:建立多级索引表。
2.文件的物理组织(物理结构)
文件的物理组织:逻辑组织到磁盘的映射。
文件:记录(字节)序列 《=====》磁盘:块(block)序列
为了能对一个文件进行正确的存取,操作系统必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块(FCB)”。
2.1 连续分配
连续分配要求每个文件在磁盘上占有一组连续的物理块。
用户给出逻辑块号,操作系统找到文件对应的FCB,记录了文件在外存存放的起始块号和所占块数(长度)。
优点:① 连续分配支持顺序访问和随机访问;② 在移动磁头进行读/写时,速度快。
缺点:① 连续的存储空间不够时,长度变化困难;② 所有空间都不够存放,成为磁盘碎片。
2.2 链接分配
其采取离散分配的方式,文件可存于不连续块中,块间以指针相连。分隐式链接和显示链接两种。
1️⃣隐式链接(默认)
目录中记录了整个文件存放的第一个块和最后一个块号。
除最后一个磁盘块之外,每个磁盘块都会保存指向下一个磁盘块的指针。因此,只有知道上一个物理块才能找到下一个物理块的位置。链式分配只支持顺序访问,不支持随机访问。方便拓展文件。
2️⃣显式链接
把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT)。一个磁盘一张FAT,开机时就读入内存,且常驻内存。因此:
优点:① 支持随机访问;② 地址转换时不需要访问磁盘,访问效率更高。
缺点:文件分配表需要占用一定的存储空间。
2.3 索引分配
系统为每个文件建立一张索引表,记录各个逻辑块对应的物理块(类似页表)。
索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
优点:索引分配支持随机访问,文件拓展也很容易实现。
缺点:索引表占空间;磁盘块长度固定,限制了索引表的长度(可以采用多级索引、混合索引解决)。
若只有一个很小的索引(1KB),那二级索引依然会读取两次磁盘,这就显得很繁琐。混合索引采用直接索引+间接索引的方式更好。
三、文件目录
1.文件控制块(FCB)
文件控制块 (file control block,FCB) 是标志文件存在的数据结构,其中包括系统对文件进行管理所需的全部信息。包含信息:文件名、文件号、文件类型、文件属性等等。
目录项保存文件的管理信息,将所有文件的目录项组织起来就成为文件目录(用于检索目录),实现时需要以文件的形式保存在外存磁盘中,这个文件就称为目录文件(内容为各目录项)。
用户在使用文件时会给出文件名,文件系统欲根据文件名找到指定文件,就需要为系统中的文件创建目录,称为文件目录。文件目录由目录项构成,目录项可以作为文件控制块。
2.目录结构
2.1 单级目录
整个系统只有一个目录,保存所有文件信息。所有目录项组成放到一个文件里,挨个查找。
优势:实现简单,可以“按名存取”。
缺点:① 每一个用户对文件的命名是不能重名的;② 文件无法分类,查找时需要扫描全部文件。
③ 文件保护能力差。
2.2 两级目录
系统上构建两个目录:
- 整个系统只有一个公共目录,称系统目录。
- 每个用户都有一个专有目录,称用户目录。
所有用户目录均登记于系统目录中,每个用户目录下登记着该用户的文件。
优势:不同用户,文件可以重名。(因此,不仅需要给出文件名,还需要给出文件所属的用户)
缺点:还是不能将文件加以分类。(用户文件过多时,查找速度慢)
2.3 多级目录(树形目录)
为克服两级目录的缺点,提出树状结构的多级目录结构。根结点是特殊的目录文件,称为根目录。根目录下有若干个非叶结点,都是目录文件,叶子结点是一般文件或目录文件。
优势:文件可以分很多类存放。
因此,文件名就需要扩展,必须包含从根目录到文件中的所有路径节点,合称为路径名。
3.文件目录的改进
3.1 有向无环图目录结构(王道)
共享计数器记录共享该文件的文件目录数,删除一个目录项便将其减1。
3.2 索引结点(FCB的改进)——对应3.3节的主部
除文件名之外的所有信息都存放在FCB的索引结点(主部)中。
3.3 文件目录的改进(书本)
- 按名查找文件时,文件目录是保存在外存中的,而外存是按照块划分的。
- 每一个物理块能够保存的内容是固定的。
- 当目录项很大时,一个物理块保存不了几个物理信息,就会造成找文件时要跨越很多物理块。在外存中跨越物理块,就是降低了访问速度。
为了方便快速的在文件目录中找到文件,就需要改进文件目录的尺寸,对文件控制块进行划分:
将FCB划分为两个部分:
- 一部分称为FCB次部:文件名、文件号。将此作为目录项,保存到目录文件当中。
- 另一部分为FCB主部:除文件名之外所有信息、连接计数(新加)。
文件号:文件主部保存在外存inode区域,打开时读入内存。在保存主部时会对应一个文件号,保存在文件次部中,也就是说,利用文件名和文件号就能找到文件主部的存放位置。
连接计数:在主部中的连接计数,用于标识该主部和多少次部相对应。用于实现不同的路径访问相同的文件。当连接计数为0时,表示一个空闲未用的FCB主部。
改进的好处:
- 可以提高查找速度。目录项的尺寸变小了(只存储次部),一个物理块里保存的目录项增加了。
- 可以实现文件链接。不同的路径访问相同的文件,可用于连接共享(两个用户共享一个文件)。
inode为主部,i_number 即文件号。
3.4 根目录与当前目录(书本)
根节点对应的目录为根目录(唯一,保存在外存固定位置)。
为提高文件的检索速度,现代文件系统为用户提供一个目前正在使用的工作目录,称为当前目录。
3.5 文件目录的查找(书本)
查找路径:① 从根目录开始查找;② 从当前目录开始查找
查找算法:顺序查找、散列查找、对分查找。
四、文件的共享
1.文件共享的目的(书本)
(1)节省存储空间
有些系统文件是许多用户都要使用的,如果为每一个用户都保存一个副本,显然会浪费外存空间。
(2)进程相互通讯
相互协同的进程通过文件共享可以交换信息。
2.文件共享的方式(王道)
2.1 基于索引结点的共享方式(硬链接)
连接计数count=0时才能将文件(包括索引结点)删除。
2.2 基于符号链的共享方式(软链接)
- User3的索引结点2所指向的文件2,存放的是“文件1的存放路径”。
- 删除文件1,文件2也找不到目标文件。
3.文件共享的模式(书本)
3.1 不同时使用同一文件
比较简单的共享情形,操作系统只需核对使用者对文件的访问权限即可。
3.2 同时使用同一文件
同一时刻有多个进程要求使用同一个文件,分为两种情形:
① 所有进程都不修改所共享的文件。
② 某些进程要求修改被共享的文件。(操作系统必须提供相应的互斥机制)
4.文件共享的实现
4.1 公共目录
设有若干个可以被所有用户访问的公共目录。用户可以将私有文件挂在公共目录中,也可以撤回。
4.2 共享说明
每个文件在创建时可由文件属主规定一个共享说明,如哪些用户不可以使用、哪些用户可以使用以及使用方式等。
4.3 连接
通过连接可以使一个文件具有多个名字,不同用户可以使用不同名称来访问同一文件。
类似上述的硬链接和软链接。
五、文件的保护和保密
- 保护:防止用户对文件进行非授权的访问。
- 保密:防止文件的内容泄露。
- 安全:防止文件被破坏。包括自然因素和人为因素。
1.文件的保护
用户对文件的访问方式由文件主来确定。哪些人可以进行哪些访问方式。
文件保护方法:存取控制矩阵、访问权限说明、分级目录。
1.1 存取控制矩阵(书本)
特点:(优)权限规定细致;(缺)但是过于繁琐,占较多存储空间。
1.2 访问权限说明(王道——访问控制表)
王道——访问控制表
1.3 分级目录(书本)
2.文件的保密
由操作系统来实现:口令、密码。
2.1 设置口令
2.2 密码
优点:对文件内容加密(被截取的文件全是密文或乱码),效果好。
缺点:保存时加密,读取时解密。(速度慢)
3.文件系统的安全(书本)
六、文件系统的实现(书本)
- 要实现文件系统,就需要在内存空间中保存一些表目。
- 而且同时,操作系统还需要保存文件的外存空间。
1.内存所需表目
1.1 系统打开文件表
文件控制块中保存着系统对文件进行管理所需要的一切信息,这些信息作为目录项长期驻留于外存空间。当文件被打开使用时,FCB会被经常访问,若每次访问都要去读写外存,速度将会很慢。为解决这个问题,可在内存中设一个表目,用来保存已打开文件的文件控制块,即系统打开文件表。
① 该表本就是要保存文件控制块的,首先应包含FCB主部。
② 文件号。得到FCB主部在外存的位置。
③ 共享计数。记录使用该文件的进程数。等于0时,为空表目。
④ 修改标志。标志文件的FCB在内存期间是否曾经被修改过。若修改过,则写回外存。
1.2 用户打开文件表
文件可共享,而用户不同(即进程不同),对于文件的打开方式和读写位置也不同。这些信息被记录在另一个表中,称为用户打开文件表。该表一般放在进程的PCB中。因此,每个进程都有一个用户打开文件表。
① 文件描述符。是一个正整数,文件描述符其实就是打开文件表的序号,是隐含的,不记录在表中,当打开文件后其值将返回给进程,之后进程使用描述符便可存取该文件,而不再使用文件名。
② 打开方式。进程对于文件是读操作还是写操作等。
③ 读写指针。确定进程对于文件的访问位置。
④ 系统打开文件表入口。是个指针。进程打开文件的文件主部在系统打开文件表中的位置。
1.3 表间联系
不同用户可共享一个文件,即不同用户的用户打开文件表的不同表目可以指向相同的一个系统打开文件表实现文件的共享。
(注:系统打开文件表为系统最多打开文件的个数;用户打开文件表为一个进程最多打开多少文件。)