文件系统接口
前言
文件是由操作系统所定义和实现的抽象数据类型。它由一系列逻辑记录组成。逻辑记录可以是字节、行(固定或可变长度)或更为复杂的数据项。
操作系统的主要任务是将逻辑文件概念映射到物理存储设备,如磁盘或磁带。由于设备的物理记录大小可能与逻辑记录大小不一样,所以可能有必要将多个逻辑记录合并以存入物理记录。同样,这个任务可以由操作系统自己完成或由应用程序来提供。
一、 文件概念
操作系统提供了信息存储的统一逻辑接口。
操作系统对存储设备的各种属性加以抽象,从而定义了逻辑存储单元(文件),再将文件映射到物理设备上。
文件是记录在外存上的相关信息的具有名称的集合。从用户角度而言,文件是逻辑外存的最小分配单位。通常,文件表示程序(源形式和目标形式)和数据。文件可以是自由形式,也可以具有严格的形式。通常,文件由位、字节、行或记录组成,其具体意义是由文件创建者和使用者定义的。
文件信息是由其创建者定义的
文件根据其类型具有一定结构
(一)文件属性
- 名称:文件符号名称是唯一的,通常为字符串,有些系统区分大小写(如Linux、Unix),有些不区分(DOS、Windows)
- 标志符:标识文件系统内文件的唯一标签,通常为数字;对人而言是不可读的文件名称
- 类型:被支持不同类型的文件系统所使用(由操作系统和程序定义)
- 位置:该信息为指向设备和设备上文件位置的指针
- 大小:文件当前大小(以字节、字、或块来统计),该属性也可包括文件允许的最大容量值
- 保护:决定谁能读、写、执行等的访问控制信息
- 时间、日期和用户标识:文件创建、上次修改和上次访问的相关信息。这些数据用于保护、安全和使用跟踪
- 所有文件的信息都保存在目录结构中,而目录结构也保存在外存上。文件系统的所有内容(目录等)都保存在外存上(因为与文件系统有关的内容必须是非易失性的)
(二)文件操作:文件属于抽象数据类型
- 创建文件:
i. 在文件系统中为文件找到空间
ii. 在目录中为新文件创建一个条目 - 写文件:需要执行系统调用,其指明文件名称和要写入文件的内容。对于给定的文件名称,系统会搜索目录以查找该文件位置。系统必须为该文件维护一个写位置的指针。每当发生写操作时,必须更新写指针
- 读文件:与写文件类似,使用一个系统调用,并指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统要为该文件维护一个读位置的指针。每当发生读操作时,必须更新读指针。一个进程通常只对一个文件读或写,所以当前操作位置可以作为每个进程当前文件位置指针。由于文件读和写操作都使用同一指针,节省了空间也降低了系统复杂度
- 在文件内重定位:也称为文件寻址。搜索目录相应条目,设置文件位置指针为给定值(在文件内重定位不需要包含真正的I/O)
- 删除文件:释放该文件的所有文件空间,并删除相应目录条目
- 截短文件:不改变所有文件属性,而只是将其长度设为0并释放其空间
打开文件表:包含所有打开文件的信息表。当需要一个文件操作时,可通过该表的一个索引指定文件,而不需要搜索。当文件不再使用时,进程可关闭它,操作系统从打开文件表中删除这一条目。注意,系统调用creat和delete操作的是关闭文件而不是打开的文件
包含的信息:
(1)文件指针:对于没有将文件偏移量作为系统调用write()和read()参数的系统,必须跟踪上次读写位置作为当前文件位置指针。这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。
(2)文件打开计数器:跟踪打开和关闭的数量,在最后关闭时计数器为0,此时系统可删除该条目
(3)文件磁盘位置:用于定位磁盘上文件位置的信息保存在内存中以避免每个操作从磁盘中读取该信息
(4)访问权限:每个进程用一个访问模式打开文件,这种信息保存在单个进程打开的文件表中,以便操作系统能允许或拒绝以后的I/O请求
(三)文件类型
- 如果操作系统识别文件类型,那么它就能按合理方式对文件进行操作
- 实现文件类型的常用技术是在文件名称内包含类型。名称可分为两部分:名称和类型
- 文件有一个创建者属性,用来包含创建它的程序名称
- Unix系统采用幻数(保存在文件的开始部分)大致表明文件类型:可执行程序、批处理文件(shell脚本)、postscript文件。但不是所有的文件都有幻数
(四)文件结构(依赖于操作系统和应用程序)
- 每个应用程序必须有自己的代码对输入文件进行合适的解释。但所有的操作系统必须至少支持一种结构,即可执行文件结构,以便能装入和运行程序
(五)内部文件结构
- 所有磁盘I/O是按块(物理记录)来执行的,且所有块都是同样大小。物理记录大小不太可能刚好与所需逻辑记录大小一样长,而且逻辑记录的长度是可变的。对于这种问题的常用解决是先将若干个逻辑记录打包,再放入物理记录。
- 逻辑记录大小、物理块大小和打包技术决定了多少逻辑记录可保存在每个物理块中,打包可由用户应用程序或操作系统来执行
- 无论如何,文件都可当作一系列块的组合,所有基本I/O操作都是按块来进行的
二、 访问方法
(一)顺序访问:
是基于文件的磁带模型,不仅适用于顺序访问设备,也适用于随机访问设备
最简单的访问方式。文件信息按顺序,一个记录接着一个记录地加以处理。编辑器和编译器通常按这种方式访问文件
大量的文件操作是读和写。读操作读取下一文件部分,并自动前移文件指针,以跟踪I/O位置。类似地,写操作会向文件尾部增加内容,相应的文件指针移到新增数据之后(新文件结尾)
(二)直接访问(或相对访问):
是基于文件的磁盘模型(因为磁盘允许对任意文件块进行随机读和写),相当于随机访问,读写顺序没有限制。
文件由固定长度的逻辑记录组成,以允许程序按任意顺序进行快速读和写
对直接访问,文件可作为块或记录的编号序列
直接访问文件可立即访问大量信息,数据库通常使用这种类型的文件
由用户向操作系统所提供的块号通常为相对块号,是相对于文件开始的索引
(三)其他访问方式:
可建立在直接访问方式之上。
这些访问通常涉及创建文件索引。索引包括各块的指针
为了查找文件中的记录,首先搜索索引,再根据指针直接访问文件,以查找所需要的记录
对于大文件,索引本身可能太大以至于不能保存在内存中。解决方法之一是为索引文件再创建索引,初级索引文件包括二级索引文件的指针,而二级索引再包括真正指向数据项的指针
三、 目录结构
- 磁盘可以整体地用作一个文件系统,但有时需要分成多区或片,称为小型磁盘。每个磁盘分区可以创建一个文件系统。可以将存储文件系统的一大块存储空间作为卷,卷可以存放多个操作系统,使系统启动和运行多个操作系统
- 包含文件系统的每个卷还必须包含系统上文件的信息,保存在设备目录(简称目录)或卷表中
- 目录是包含所有文件信息的节点的集合
- 设备目录包含的信息:名称、位置、大小、类型、当前长度、最大长度、最近访问日期、最近更新日期、用户标识号、保护信息等
- 目录可以看作符号表,它能将文件名称转换成目录条目,相关操作有:
(1)搜索文件:能够搜索目录结构以查找特定文件的条目
(2)创建文件:可以创建新文件并加入到目录中
(3)删除文件:当不再需要文件时,可以从目录中删除它
(4)遍历条目:能遍历目录内所有文件以及其目录中每个文件条目的内容
(5)重命名文件:重新命名文件也允许改变该文件在目录结构中的位置
(6)跟踪文件系统:访问每个目录和每个目录的每个文件。定期备份通常将所有文件复制到磁带上(防止系统出错)
(一)单层结构目录:
是最简单的目录结构,便于理解和支持
- 所有文件都包含在同一目录中
- 每个文件必须拥有唯一名称,不可重名
- 文件条目过多时,难以记住所有文件的名称
(二)双层结构目录
- 每个用户都有自己的用户文件目录(UFD),每个UFD有相似的结构,但只列出了单个用户的文件。当一个用户作业开始执行或一个用户注册的时候,就搜索系统的主文件目录MFD,通过用户名找到相应的位置,然后引向该用户的UFD以查找该用户的文件
- 不同用户的文件允许同名
- 不支持分组
- 有效地对用户加以隔离
(三)树状结构目录:
是最常用的目录结构
- 允许用户创建自己的子目录,相应地组织文件
- 系统内每个文件有唯一的路径名
- 路径名的两种方式:
i. 绝对路径:从根开始并在给出路径上的目录名直到所指定的文件
ii.相对路径:从当前目录开始定义路径 - 创建文件与目录通常在当前目录中进行
- 对于树状结构目录系统,用户除了能访问自己的文件外,还能访问其他用户的文件
- 不支持文件在不同目录间的共享
(四)无环图目录:
是树状结构目录方案的扩展,支持文件在不同目录间共享
- 允许目录含有共享子目录和文件
- 同一文件或子目录可出现在两个不同目录中
- 实现共享文件和目录的两种方法:
i. 创建一个称为链接的新目录条目,链接实际上是另一文件或目录的指针,可以通过使用路径名定位真正的文件来获得解析
ii. 简单地在共享目录中重复所有(被)共享文件的信息,因此两个目录条目完全相同 - 可能出现的问题:
i. 不同文件名可能表示同一文件
ii. 删除文件时可能会留下悬挂指针
(五)通用图目录:
只允许上级指向下级,不能反向
如何确保无环?
- 只允许链接发生在文件,而非子目录上
- 垃圾收集方案:自我引用的文件,其引用计数不等于0;垃圾收集涉及遍历整个文件系统,并标记所有可访问的空间。然后,第二次将所有没有标记的部分收集到空闲空间链表上
- 每当建立新链接时,采用相应的算法检测,以避免环的出现。
四、 文件系统安装
文件系统在被系统上的进程使用之前必须安装
安装步骤:
- 操作系统需要知道设备名称和文件系统的安装位置(称为安装点),通常,安装点为空目录
- 操作系统验证设备是否包含一个有效文件系统
- 操作系统在其目录结构中记录如下信息:一个文件系统已安装在给定安装点上
这种方案允许操作系统遍历其目录结构,并根据需要可在文件系统之间进行切换
五、 文件共享
- 期望多用户系统上文件的共享,共享可以通过保护机制来实现
- 远程文件系统:
i. 客户机-服务器模型:包含文件的机器称为服务器,需要访问文件的机器称为客户机
ii. 分布式信息系统:也叫分布式命名服务,文件可以跨网络共享,NFS是一种常见的分布式文件共享方法
iii. 故障模式 - 一致性语义是评估文件系统对文件共享支持的一个重要准则
六、 文件保护
- 访问类型:读、写、执行、追加、删除、列表清单
- 访问控制:根据用户身份进行控制。实现基于身份范文的最为普遍的方法是为每个文件和目录增加一个访问控制列表,以给定每个用户名及其所允许的访问类型
- 三种用户类型:
i. 拥有者:创建文件的用户为拥有者
ii. 组:一组需要共享文件且需要类似访问的用户形成了组或工作组
iii. 其他:系统内的所有其他用户