文件系统
1.1文件和文件系统
1.1.1文件
自底向上的文件结构组成:
- 数据项。数据项是文件系统中最低级的数据组织形式,可以分为以下两种类型:基本数据项和组合数据项
- 记录。记录是一个具有特定意义的信息单位,它有由该记录在文件中的逻辑位置(相对位置)和记录名所对应的一组键、属性及其属性值所组成。
- 文件、文件是由创建者所定义的一组相关信息的集合。可分为有结构文件和无结构文件两种。在有结构文件中,文件由一组相似记录组成
文件有一定的属性,这根据系统的不同而不同,但是通茶好难过都包括如下属性。
- 名称。用户为文件制定的名称,便于用户按名存取文件。
- 标识符。标识文件系统内文件的唯一标签,通常为数字,用户无法直接使用该标识符
- 文件类型。支持不同类型文件的系统需要这种信息
- 位置。执行存储设备和设备文件位置的指针
- 大小。当前文件大小(用字节、字、块表示),也可包含文件允许的最大值、
- 保护。对文件进行保护的访问控制信息。
- 时间、日期和用户标识。文件创建、上次修改、和上次访问的相关信息,用户保护、安全和跟踪文件使用。
有些较新的文件西戎还支持扩展文件属性,包括文件的字符编码和安全功能等属性。
文件系统层次结构
1.2文件的逻辑结构
文件的逻辑结构是用户可见的结构,逻辑文件从结构上分为两种形式
- 无结构的流式文件,是指对文件信息不再划分单位,它是一次一串字符流构成的文件
- 有结构的记录式文件,是用户把文件内的信息按逻辑上独立含义换分信息单位每个单位称为一个逻辑记录
文件的逻辑结构应该遵循下述原则
- 当用户对文件信息进行修改操作时,逻辑结构应该尽量减少对已经存储好的文件信息的变动
- 当用户需要对文件信息进行读取操作时,逻辑结构应该使文件系统在尽可能短的时间内查找到需要查找的记录或者基本信息单位。
- 尽可能减少文件信息的存储空间的占用
1.2.1堆结构文件
- 堆结构是最简单的文件组织形式,文件中的记录可以长短不一,每条记录可以拥有不同的属性。这些记录的组织方式是按照生成的先后顺序排列而成。也就是说,记录的排列顺序由与记录内容是无关的
- 堆结构的文件有利于记录的追加,能够较好地用于穷举查找,但是如果需要按照关键字查找某条记录时,只能搜索文件的全部内容,效率很低,因此这种组织方式对于大部分文件都是很不适用的
1.2.2顺序结构的文件
顺序结构是一种最常见的文件组织形式。记录在文件中按照某个规则进行排序,通常按照某个关键字排序。如果需要频繁地对文件中的记录进行查找、增加或者删除操作则可以采用这样的结构来组织文件。
1.2.3散列结构的文件
如果考虑到搜索时间的复杂度,采用散列结构来组织文件是一种较好的方法。散列文件使用散列函数将记录的关键字经过计算转化为记录的逻辑号(也可以理解为记录的编号)
1.2.323文件的读写方式
-
顺序读写
顺序读写是按照文件的逻辑地址顺序存储。针对不同性质的文件,我们可以采用不同的实现方法
对于无结构的流式文件,每读取文件中的一个字符,文件内部指针便向后移动指向下一个字符。文件指针不能回溯。
对于记录型文件,固定长度的记录实现起来是要比较简单的。在读写记录时总是读完上一条记录,才能接着读写逻辑号紧邻的下一条记录。
顺序读写主要用于磁带文件,但也适用于 -
直接读写(随机读写法)
在现代文件系统中更多的应用程序需要以任意次序直接读写文件中的某个记录。
为了实现直接存取,一个文件可以看做由顺序编号的逻辑块(也可以理解为记录)组成的,这些块常常划为等长,作为定位和存取的一个最小单位,于是用户可以请求读块22然后写块48在读块9等等。这种方法中,文件指针可以定位到指定逻辑块中,无需一块一块地移动指针。 -
索引读写
这种方法是建立在可以直接读写基础上的。可以为文件创建一个索引表索引表可以包含两项:键值和逻辑号。当需要按照键值查找文件记录时首先搜索索引,找到该键值对应的逻辑块号,然后读出需要的记录信息
1.3文件的物理与组织
1.3.1连续文件
将一个文件中逻辑上连续的信息存放到存储介质依次相邻的物理块上便形成顺序结构这类文件叫连续文件又称为顺序文件
优点:
1)连续文件既支持顺序读写也支持随机读写
2)大量顺序读写效率高(连续文件读写使得磁头移动距离少)
缺陷:
1)建立文件前需要能预先确定文件长度。通常而言输出文件的大小难以事前预估,无法使用连续文件的物理结构模式
2)修改、插入、追加文件记录有困难(禁止用户程序,重新分配更多的存储空间,寻找扩展区)
3)会造成少量外部碎片(整理和合并操作)
1.3.2链接文件
一个文件的信息存放在若干不连续的物理块中,各块之间通过指针链接,前一个物理块中有一个指针域,指向下一个物理块,最后的物理块指针域存放符号“^",表示无后继块。这样的文件称为链接文件。
隐式链接文件
优势:利用不连续的空闲物理块,无外部碎片问题。有利于文件的插入和删除,有利于文件的动态扩充
缺点:不支持随机访问指针会占用额外的存储空间,可靠性较低如果某个物理块的指针丢失或被损害,则余下的文件内容无法被存取、
显式链接文件
把用于链接文件各物理块的指针,显示地存放在内存的一张链接表中,此表就是文件访问表(FAT),分配给文件的所有盘块号的都存入该表中。
索引文件
一个文件的信息存放在若干不连续的物理块中,系统会为每个文件建立一个专用数据结构索引表,表中每一栏目指出文件信息所在的逻辑块号和与之对应的物理块号。索引表的物理地址则由文件说明信息项给出。
优点:没有外部碎片问题,能满足文件动态增长的要求
缺点:索引表本身也会占用部分存储空间
1.4目录管理
文件控制块
文件控制块(FCB) 是操作系统为管理文件而设置的一组具有固定格式的数据结构,存放了管理我呢间所需的所有属性信息(文件属性或者元数据)
文件目录定义
为了便于对文件进行管理,计算机系统需要建立文件名和文件物理位置之间的映射关系,文件目录就是专门管理这种映射关系
文件目录管理的基本功能包括:
实现按名存取
快速检索文件目录
实现文件共享
允许文件重命名
目录结构
单级目录结构
优点是简单且能实现按名存取,但却存在以下一些缺点
查找费时
重命名问题
不利于文件共享
两级目录结构
**
以下优点:
有利于文件管理、共享和保护
适用于多用户系统,不同的用户可以命名相同文件名的文件,,一定程度上解决了命名冲突的问题
多级目录结构
优点:实现文件分类存储,方便文件管理查找。解决了一级,二级目录结构中的重命名问题
1.5空闲空间的管理
位示图
这种方法是在外存上建立一张位示图(bitmap),记录文件在磁盘上的空间使用情况。每一位仅对应磁盘上的一个物理块,利用二进制的一位表示磁盘中一个盘块的使用情况,取值0表示该物理块是空闲的,取值1表示物理块已分配
位示图的优点:可以比较容易找到一组连续的空闲块,该图适用所有类型的物理结构文件
空闲块列表
系统为外存上所有空闲区域建立一个空闲块列表,其中空闲块列表的每一个表项对应一个由多个空闲块构成的空闲区,它包括空闲块个数和第一个空闲块号等。
空闲链表法
- 空闲快链
将磁盘上的所有空闲块串成一条链。在每个空闲块上除隐含有用于指示下一个空闲块的指针外,还应应指明空间块大小信息(有的节点是单个空间块,有的节点是多个相邻空闲块合并形成的空间区)
- 成组链接法
1.6文件的存取控制
1.6.1文件的保护
文件系统应该提供给文件特定的访问权限
- 读:从文件中读
- 写:向文件中写
- 执行:将文件装入内存并执行、
- 添加:将新信息添加到文件结尾部分
- 删除:删除文件,释放空间
- 列表清单:列出文件名和文件属性
此外还可以对文件重命名、复制、编辑等加以控制。这些高层的功能可以通过系统程序调用低层系统调用来实现。保护可以只在底层提供
文件需要进行合理的保护。可以通过以下方法实现:口令保护,加密保护,存储控制矩阵,存取控制表
-
口令保护
用户在建立一个文件时提供一个口令,系统为其建议FCB时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时,必须提供相应口令。 -
加密保护
用户对文件进行加密。用户在将文件写入到存储设备时对文件进行编码加密,在需要读取文件时,对其进行解码解密。
口令和密码都是为了防止文件被他人存取或窃取 -
存储控制矩阵
-
存取控制表
1.7文件系统的其他功能
- 创建文件
- 读文件
- 写问阿金
- 文件内部重定位
- 删除文件
- 截断文件
以上几个基本操作可以组合起来实现其他更为复杂的文件操作,比如实现文件拷贝,获得文件的长度信息,允许用户设置文件属性等功能
文件打开过程
虚拟文件系统
虚拟文件系统(VirtualFileSystem VFS)隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离开来,为所有设备提供了统一的接口,可以支持多达数十种不同的文件系统。