综述
系统中用到的大量程序和数据,平时总是以文件的形式存放在外存中,需要时调入内存
如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这是用户不能够胜任也不愿意承担的管理文件的工作
于是在OS中又增加了文件管理功能,构成一个文件系统,负责管理在外存上的文件,把文件的存取、共享和保护等手段提供给用户,方便了用户,保证了文件的安全,提高了系统资源的利用率
文件系统的功能:提供高效、快速、方便的信息存储和访问功能
学习目标与重点
理解文件和文件系统的概念
理解文件的逻辑结构
理解目录管理
理解文件的共享
教学重点:逻辑结构和目录管理、文件的共享
教学难点:逻辑结构
文件和文件系统
文件、记录和数据项
文件类型和文件系统模型
文件操作
文件、记录和数据项
数据项
数据项是最低级的数据组织形式,可分为以下两种类型:
基本数据项
用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑单位,又称为字段或数据元素
组合数据项
由若干个基本数据项组成,简称组项
工资是个组项,由基本工资、工龄工资和奖励工资等基本项组成
例如:用于描述学生的基本数据项:学号、姓名、年龄等
记录
是一组相关数据项的集合,用于描述一个对象在某方面的属性
在诸多记录中,为了能唯一的标识一个记录,必须在一个记录的各个数据项中,确定出一个或几个数据项,把它们的集合称为关键字。也即说关键字是唯一能标识一个记录的数据项。通常,只需用一个数据项作为关键字
文件
在文件系统中是一个最大的数据单位
是指记录在外存上的具有文件名的一组相关信息的集合。可分为
有结构文件:由若干个相关记录组成
无结构文件:被看成一个字符流。
文件属性
文件必须要有文件名和属性。
文件属性包括:文件类型、文件长度、文件的物理位置、文件的建立日期以及用户对该文件的存取权限等
文件、记录和数据项间的层次关系
文件类型和文件系统模型
文件类型:为了便于管理和控制文件而将文件分为若干种类型。为了方便系统和用户了解文件的类型,许多OS都把文件类型作为扩展名而缀在文件名的后面,文件名和扩展名之间用”.”号隔开。
文件系统模型:文件系统模型分为三个层次,最底层是对象及其属性;中间层是对对象进行操纵和管理的软件集合;最高层是文件系统提供给用户的接口。
文件类型
按用途分类
系统文件:由系统软件构成的文件
用户文件:用户的源代码、目标文件、可执行文件或数据
库文件:由标准子例程和常用的例程构成
按数据形式分类
源文件:由源程序和数据构成的文件
目标文件:源程序经过编译后但没链接的目标代码构成的文件
可执行文件:编辑后的目标代码经链接后形成的文件
按存取控制属性
只读文件
读写文件
只执行文件
按文件的物理结构分类
顺序文件
链接文件
索引文件
按文件的逻辑结构分类
有结构文件(记录式文件)
无结构文件(流式文件)
按组织形式和处理方式分类
普通文件:由ASCII码或二进制码组成的字符文件
目录文件:由文件目录组成,用来管理和实现文件系统功能的系统文件
特殊文件:特指系统中的各类I/O设备
文件系统模型
对象及其属性
文件管理系统管理的对象有:
文件:它作为文件管理的直接对象。
目录:为了方便用户对文件的存取和检索,在文件系统中必须配置目录。对目录的组织和管理是方便用户和提高对文件存取速度的关键。
磁盘(磁带)存储空间:文件和目录必定占用存储空间,对这部分空间的有效管理,不仅能提高外存的利用率,而且能提高对文件的存取速度。
对对象操纵和管理的软件集合
这是文件管理系统的核心部分
文件系统的功能大多是在这一层实现的,其中包括:
对文件存储空间的管理
对文件目录的管理
用于将文件的逻辑地址转换为物理地址的机制
对文件读和写的管理
对文件的共享与保护等功能
文件系统的接口
为方便用户使用文件系统,文件系统通常向用户提供两种类型的接口:
命令接口。这是指作为用户与文件系统交互的接口。 用户可通过键盘终端键入命令,取得文件系统的服务。
程序接口(系统调用接口)。这是指作为用户程序与文件系统的接口。 用户程序可通过系统调用来取得文件系统的服务。
文件操作
用户通过文件系统所提供的系统调用实施对文件的操作。最基本的操作有:
对文件的操作
最基本的文件操作:创建、删除、读、写、截断、设置文件的读写位置(将顺序存取改为随机存取)
文件的打开、关闭操作
其它的文件操作:文件属性类操作、目录类操作
7.2 文件的逻辑结构
文件逻辑结构的类型
顺序文件
索引文件
索引顺序文件
直接文件和哈希文件
文件的结构
通常文件是由一系列的记录组成的。文件系统设计的关键要素,是将这些记录构成一个文件的方法,以及将一个文件存储到外存上的方法
对于任何一个文件都存在着以下两种形式的结构:
文件的逻辑结构。从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织。
文件的物理结构。又称为文件的存储结构,是指文件在外存上的存储组织形式。与存储介质的存储性能和采用的外存分配方式有关。
注:文件的逻辑结构和物理结构都将影响文件的检索速度。
文件逻辑结构的类型
对文件逻辑结构提出的基本要求:
提高检索速度;
便于修改;
降低文件的存储费用。
文件逻辑结构可以分为两大类:
有结构文件,是指由一个以上的记录构成的文件,故又把它称为记录式文件;
无结构文件,这是指由字符流构成的文件,故又称为是流式文件。
有结构的记录式文件
文件构成:由一个以上的记录构成
记录长度:分为定长和变长
按记录的组织方式,可分如下几种:
顺序文件:记录按某种顺序排列形成,通常是定长记录(也可以是变长)
索引文件:针对变长记录,建立索引表,并为每个记录设置一个表项,以加快对记录检索的速度
索引顺序文件:上述两种方式的结合。为文件建立一张索引表,为每组记录的第一个记录设置一个表项
无结构的流式文件
文件构成:由字符流构成。大量的源程序、可执行文件、库函数等,所采用的就是无结构的文件形式,即流式文件。
长度:以字节为单位(通用计算机寻址的最小单位)
访问:对流式文件的访问,则是采用读写指针来指出下一个要访问的字符。
文件逻辑结构的类型
在UNIX系统中,所有的文件都被看作是流式文件;即使是有结构文件,也被视为流式文件;系统不对文件进行格式处理。
可以把流式文件看作是记录式文件的一个特例。
顺序文件
逻辑记录的排序
串结构
各记录之间的顺序与关键字无关
通常由时间来决定
存在问题:查找费时
顺序结构
文件中的所有记录按关键字(词)排列
对顺序文件(Sequential File)的读/写操作
顺序文件的优缺点
优点
结构简单,容易实现
顺序文件的最佳应用场合,是在对诸记录进行批量存取时,即每次要读或写一大批记录
只有顺序文件才能存储在磁带上,并能有效地工作
缺点
如果用户(程序)要求查找或修改单个记录, 顺序文件所表现出来的性能就可能很差
如果想增加或删除一个记录, 都比较困难(需移动大量数据)
创建文件必须给出大小,不利于动态增长
索引文件
对定长记录文件,如果要查找第i个记录, 可直接根据下式计算来获得第i个记录相对于第一个记录首址的地址
Ai = i×L
对于可变长度记录的文件,要查找其第i个记录时,须首先计算出该记录的首地址,为此,须顺序查找每个记录,获得相应记录的长度Li,然后按下式算出该记录的首址
索引本身是一个定长记录的顺序文件,主文件中每个记录在在索引表中占一个表项,可采用快速查找算法,如字典
索引文件的检索步骤:
(1)根据用户提供的关键字,利用折半查找法去检索索引表,从中找到相应的表项;
(2)再利用该表项中给出的指向记录的指针值,去访问所需记录;
(3)而要向索引文件中增加一个记录,便须对索引表进行修改。
优点:检索速度快,主要用于对信息处理的及时性要求较高的场合。
缺点:存储费用高,因为除了主文件外,还需配置一张索引表,且每个记录都有一个索引项。
索引顺序文件
索引顺序文件(Index Sequential File)是最常见的一种逻辑文件组织形式,是顺序文件与索引文件的结合
克服了变长记录文件不便于直接存取的缺点,代价也不太大
将顺序文件中的所有记录分为若干个组,为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立索引项,其中含有该记录的键值及指向该记录的指针
文件检索速度
对顺序文件检索
若记录数据为N,则检索一条记录时,最好的情况是第一条记录即为所求;最坏的情况是最后一条记录为所求;平均检索N/2条记录
对索引顺序文件检索
可采用折半查找等方法,大大提高查找效率!
直接文件和哈希文件
哈希(Hash)文件
利用哈希函数将记录键值转换为相应记录的地址
键值转换(Key to address transformation)
由记录键值到记录物理地址的转换
直接文件
根据给定的记录键值,直接获得指定记录的物理地址
目录管理
对目录管理的要求:
实现“按名存取”:文件系统最基本的功能
提高对目录的检索速度:加快目录检索速度,从而提高文件存取速度
文件共享:一份文件副本供不同用户使用
允许文件重名:允许不同用户对不同文件取相同的名字
文件控制块和索引结点
目录结构
目录查询技术
文件控制块(FCB)
是用于描述和控制文件的数据结构
文件管理程序可借助FCB中的信息对文件施以各种操作
文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项
通常,一个文件目录本身也被看作是一个文件, 称为目录文件
文件控制块FCB中的信息
基本信息类
文件名
文件的物理位置
文件的逻辑结构
文件的物理结构
文件控制信息类
文件拥有者权限
核准用户权限
一般用户权限
使用信息类
文件建立日期
文件修改日期
索引结点
索引结点的引入
文件目录通常放在磁盘上,当文件很多时,占用大量磁盘空间,检索文件过程中,只需使用文件名,而不用其他信息
有的系统采用把文件名与文件描述信息分开,将文件描述信息单独形成一个数据结构,称为索引结点,也称为i结点
在文件目录中的每个目录项,仅包含文件名和指向索引结点的指针
引入索引结点后,使文件的目录项更小,占用磁盘空间少,检索速度加快
索引结点示例
若每个FCB为64B,盘块大小为1KB,则每盘块可存放16个FCB,若某文件系统有640个FCB,需占用40个盘块
若按前述方法只存文件名和索引结点号,每个目录项占16B,每盘块可存64个目录项,640个FCB只占10个盘块,查找目录时间大大缩短
索引结点
每个文件有唯一的磁盘索引结点,存放在磁盘上,它主要包括:
文件主标识符:拥有该文件的个人或小组的标识符
文件类型:包括正规文件、目录文件、或特别文件
文件存取权限:指各类用户对文件的存取权限
文件物理地址:每个索引结点中含有13个地址项
文件长度:指以字节为单位的文件长度
文件连接计数:表明在本文件系统中,所有指向该文件名的指针计数
文件存取时间:指出本文件最近被进程存取的时间,最近被修改的时间及索引结点最近被修改的时间。
内存索引结点,存放在内存中,当文件被打开时,要将磁盘索引结点拷贝到内存的索引结点中,便于以后使用。在内存索引结点中又增加了:
索引结点编号
状态:指示i结点是否上锁或被修改
访问计数:进程访问此i结点数
文件所属文件系统的逻辑设备号
链接指针:设置有分别指向空闲链表和散列队列的指针
目录结构
单级目录结构
整个系统只建立一张目录表,每个文件占一个目录项
目录结构
单级目录优点
简单
能实现按名存取
单级目录缺点
查找速度慢
不允许重名
不便于实现文件共享
单级目录只实现了目录管理的第一项功能,即 “按名存取”
两级目录
为每个用户建立一个单独的用户文件目录UFD(User File Directory),由用户所有文件的FCB组成
在系统中建立主文件目录MFD(Master File Directory),每个用户目录文件在主文件目录中占一个目录项,其目录项中包括用户名和指向该用户目录文件的指针
两级目录的优点
提高了检索目录的速度 。在不同的用户目录中, 可以使用相同的文件名
不同用户还可使用不同的文件名来访问系统中的同一个共享文件
目录结构
多级目录结构
多级目录结构又称为树形目录结构
主目录称为根目录,数据文件称为树叶,其他目录作为树的结点
为提高文件系统的灵活性,允许一个目录文件中的目录项既作为目录文件的FCB,又是数据文件的FCB
根据这个递归定义就形成了一个倒立的树的结构。对于一棵树,它有一个树根(只有一个,根目录),在树根上可以长树叶(一般文件),也可以长树枝(子目录文件);对于每个树技又可以长树枝,也可以长树叶
路径名
在树形目录结构中, 从根目录到任何数据文件, 都只有一条唯一的通路。 在该路径上从树的根(即主目录)开始, 把全部目录文件名与数据文件名,依次地用“/”(或“\”)连接起来, 即构成该数据文件的路径名(path name)
系统中的每一个文件都有唯一的路径名
例:DOS WINDOWS系统中文件路径名
\A\R\T \B\IU\I \D \B\P
例:UNIX系统中文件路径名
/A/R/T /B/IU/I /D /B/P
当前目录
为每个进程设置一个当前目录,又称为工作目录。进程对各文件的访问都相对于当前目录而进行
把从当前目录开始直到数据文件为止所构成的路径名,称为相对路径名(relative path name)
把从树根开始的路径名称为绝对路径名(absolute path name)
增加和删除目录
用户为自己建立UFD,并可再创建子目录。如建新文件,只需在自己的UFD及其子目录中查看有无同名文件,若无便可建立。
删除时又分:
不删除非空目录
当目录(文件)不空时, 不能将其删除,而为了删除一个非空目录,必须先删除目录中的所有文件,使之先成为空目录, 后再予以删除
可删除非空目录
当要删除一目录时,如果在该目录中还包含有文件,则目录中的所有文件和子目录也同时被删除
目录查询技术
线性检索法:也称顺序检索法
目录查询技术
Hash方法
建立一张Hash索引文件目录,系统利用用户提供的文件名并将它变换为文件目录的索引值,再利用该索引值到目录中去查找
如果文件名中使用了通配符,便无法利用Hash方法检索目录,这时系统还是利用线性查找法查找目录
在进行文件名的转换时,有可能把多个不同的文件名转换为相同的Hash值,这时需要有“冲突”处理的方法:
在利用Hash方法索引查找目录时,如果目录表中相应的目录项是空的,则表示系统中并无指定文件
如果目录项中的文件名与指定文件名相匹配, 则表示该目录项正是所要寻找的文件所对应的目录项,故而可从中找到该文件所在的物理地址
如果在目录表的相应目录项中的文件名与指定文件名并不匹配,则发生了“冲突”,此时须将其Hash值再加上一个常数形成新的索引值, 再返回到第一步重新开始查找
文件共享
基于索引结点的共享方式
利用符号链实现文件共享
文件共享形式与目的
定义:系统应允许多个用户共享同一份文件,在系统中只保留一份共享文件的备份
共享形式
被多个用户使用,由存取权限控制
被多个程序使用,但各用自己的读写指针
被多个程序使用,但共享读写指针
多个用户用相同或不同的名字来访问同一文件
目的:节省时间和存储空间,减少了用户工作量;进程间通过文件交换信息
基于索引结点的共享方式
基于索引结点共享
将诸如文件的物理地址和其它文件属性等信息放在索引结点中,在文件目录中只设置文件名及指向相应索引结点的指针,另外在索引结点中增加链接计数count,表示共享的用户数,删除时必须count=0,方可。
利用符号链实现文件共享
为使B能共享C的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,以实现B的目录中与文件F的链接。在新文件中只包含被链接文件F的路径名。这种链接方法称为符号链接(Symbolic Linking)
在利用符号链方式实现文件共享时, 只是文件主才拥有指向其索引结点的指针;而共享该文件的其他用户,则只有该文件的路径名,并不拥有指向其索引结点的指针
可用于计算机网络上共享文件
只要简单地提供一个机器的网络地址以及文件在该机器中的文件路径名,便可链接任何处机器上的文件。
利用符号链实现文件共享
符号链实现文件共享优缺点
优点:方便地链接任一文件(用路径名)
缺点:访问共享文件时开销大(多次读盘,消费盘空间),每一共享文件都要增加一文件名(因路径名各不相同)
小结
文件的逻辑结构
目录管理
文件的共享