文件系统接口
前言
操作系统最难懂的部分已经过去了,接下来是存储管理部分。 这一章好理解大致是因为我们能和所用的PC文件系统联系起来,根本就不生疏。
一、文件概念
文件是记录在外存相关信息的具有名称的集合,从用户看,文件是逻辑外存的最小分配单元。即数据除非在文件中,否则不能写到外存。
通常,文件表示程序和数据。数据文件可以是数字、字符、字符数字或二进制。文件可以是自由形式,如文本文件,也可以具有严格的形式。通常,文件由位、字节、行货记录组成,其具体意义是由文件创建者和使用者来定义的。因此,文件袋概念极为广泛。
1. 文件属性
- 名称
- 标识符: 标识文件系统内文件的唯一标签,通常为数字;对人而言这是不可读的文件名称
- 类型
- 位置
- 大小
- 保护: 决定谁能读、写、执行等的访问控制信息
- 时间、日期和用户标识: 文件创建、上次修改和上次访问的信息。这些数据用于保护、安全和使用跟踪。
- 等等
2. 文件操作
- 创建文件
- 写文件
- 读文件
- 在文件内重定位
- 删除文件
- 截断文件
- 等等
每个打开的文件具有的属性:
- 文件指针: 对于没有将文件偏移量作为系统调用read()和write()参数的系统,系统必须跟踪上次读写位置以作为当前文件位置指针。这种指针对打开文件的某个进程来说是惟一的,因此必须与磁盘文件属性分开保存。
- 文件打开计数器: 表示文件被几个进程打开。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件。文件打开计数器跟踪打开和关闭的数量,在最后关闭时计数器为0,才可以删除该条目。
- 文件磁盘位置
- 访问权限
3. 文件类型
文件类型的作用
- 便于让操作系统知道是否支持识别当前操作类型。
- 通过文件类型确定哪种程序可以操作当前文件。
- 确定文件的内部组成结构。
二、访问方法
1. 顺序访问
基于文件的磁带模型,文件信息按顺序,一个记录一个记录的处理,不仅适用于顺序访问设备,也使用与随机访问设备。例如编辑器和编译器。大量的文件操作是读和写。读操作读取下一文件部分,并自动向前移动文件指针,以跟踪I/O位置。类似地,写操作会像文件尾部增加内容,相应的文件指针移动到新增数据之后。
2. 直接访问
基于文件的磁盘模型,这是因为磁盘允许对任意文件块的随机读和写。对直接访问,文件可作为块或记录的编号序列。因此,可先读取块14,再读块53,最后再写块7.对于直接访问文件,读写顺序是没有限制的。
- 直接访问文件可立即访问大量信息,所以极为有用。数据库通常使用这种类型的文件。
- 由用户向操作系统所提供的块号通常为相对块号。相对块号是相对于文件开始的索引。因此,文件的第一块的号码是0,下一块为1,依次类推。而第一块的真正的绝对磁盘地址可能为14703,下一块为3098等。
3. 其它方式访问
其它访问方式通常基于索引。这些访问通常涉及创建文件索引。索引包括各块的指针。
三、目录结构
1. 存储结构
2. 目录概述
文件系统实现对文件的“按名存取”。
文件系统需要建立这样一种数据结构,以实现文件名与文件物理位置之间的映射关系,体现这种对应关系的数据结构称为文件目录。目录的每个叶节点保证通过文件名检索到,又包含这个文件物理位置的信息。
目录可看做符号表,它能将文件名称转换成目录条目
** 目录相关操作:**
- 搜索文件
- 创建文件
- 删除文件
- 遍历目录
- 重命名文件
- 跟踪文件系统: 管理文件,包括备份和释放磁盘空间。
3. 单层目录结构
优点: 结构简单,便于支持。
缺点: 命名重复问题、用户分组问题、不同用户间文件共享问题。
4. 双层目录结构
优点: 命名问题解决、搜索高效。
缺点: 不同用户间文件共享问题(有的系统简单地不允许本地用户文件被其他用户访问)。
5. 树状结构目录
将目录结构扩展为任意高度的树,不再按照用户区分不同子目录,所以可以通过路径访问到其他用户下的文件。
绝对路径: 从根开始给出路径上的目录直到目录文件。
相对路径: 从当前目录开始定义路径。
优点: 易于管理,搜索高效。
缺点: 多用户对同一文件的共享问题。
6. 无环图目录
运行目录含有共享子目录和文件,共享文件不用于文件的复制,对于一个共享文件,只存在一个真正的文件。当多用户在一个组工作时,只需要把共享文件目录设为每个用户目录下的子目录就可完成分组共享。
优点: 实现了文件共享
缺点:
- 同一文件有多个绝对路径,遍历时重复计数。
- 删除共享文件是,会留下悬空指针。
解决:
- 提出符号链接: 又称软链接概念,即指向共享目录的指针,用绝对路径名实现,通过路径名定位真正的文件获得解析,与共享文件唯一的绝对路径区别。即它存的不是真正的文件节点,而是指向真正文件节点的指针。即指向指针的指针。
- 引入链接概念后,当实际文件被删除后,链接保留,当用户访问链接访问文件时再告知用户链接失效。Windows,Unix都采用这种方式。
7. 通用图目录
当目录中允许环存在时,存在重复遍历问题和删除时因为自身引用,导致引用计数无法为0而永远无法被删除的问题。
解决方案:
- 在无限循环的遍历中设置最大遍历次数,如果超出则自动跳出。
- 遍历两遍,第一遍标记所有可以访问到的空间,第二遍将没有访问到的空间加入空闲空间链表。
四、文件系统安装
文件系统在被进程使用前必须安装。具体地说,目录结构可以建立在多个卷上,这些卷必须被安装以使它们在文件系统命名空间中使用。通常,安装点为空目录。
下图中,三角形表示目录子树。图啊表示一个已有文件系统,图b表示一个未安装的驻留在硬盘上的文件系统。这时,只有图a的文件可以被访问。图c表示把图b上的卷安装到/users后的文件系统的情况**(即安装后会隐藏原来/users下的文件目录)**。此时只能访问图c所示目录。当卸载安装的文件系统后,文件系统又恢复到图a所示的情况。
图a:已有文件系统
图b:未安装的卷
图c:安装点
五、保护
文件拥有者规定文件的访问权限。
以Unix为例:
- Unix通过对Read、Write、Execute三种基本操作,对owner,group,public三组用户进行授权。
- 利用9位二进制表示,1表示允许,0表示拒绝。
- 例:111 110 001 表示拥有者可读、写、执行,同组用户可读、写,公共用户可执行。