目录
1.1文件的基本概念
1.2文件控制块和索引结点
1.3文件的操作
1.4文件保护
1.5文件的逻辑结构
1.5.1无结构文件(流式文件)
1.5.2有结构文件(记录式文件)
1.5.2.1顺序文件
1.5.2.2索引文件
1.5.2.3索引顺序文件
1.5.2.4直接文件或散列文件(Hash File)
1.6文件的物理结构
1.6.1连续分配
1.6.2链接分配
1.6.2.1隐式链接
1.6.2.2显式链接
1.6.3索引分配
1.6.3.1大文件索引块的三种处理方案
1.6.4混合索引分配
文件管理功能是专门管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。
文件是指具有文件名的若干相关元素的集合。元素通常是记录,而记录又是一组有意义的数据项的集合。文件可以是文本文档、图片、程序等。文件通常具有点+三个字母的文件扩展名,用于指示文件类型。在用户进行的输入、输出中,则以文件为基本单位。
可见,基于文件系统的概念,可以把数据组成分为数据项、记录和文件三级。
除了文件数据,操作系统还会保存与文件相关的信息,如所有者、创建时间等,这些附加信息称为文件属性或文件元数据。
文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现用户“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。一个文件具有一个FCB。
一个文件目录也被视为一个文件,称为目录文件。
FCB(File Control Block)主要包含以下信息:
在检索目录的过程中,只需用文件名,当找到一个目录项(其中的文件名与要查找的文件名匹配)时,才需从该目录项中读出该文件的物理地址。
因此有的系统(如UNIX)便采用了文件名和文件描述信息分开的方法,使文件描述信息单独形成一个称为索引结点的数据结构,简称 i 结点(inode)。这种方法可以减少查找文件的平均启动磁盘次数,节省系统开销。
在文件目录中的每个目录项仅由文件名和指向该文件所对应的索引结点的指针构成。
存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。相比之下内存索引结点中需要增加一些信息,如:文件是否被修改、此时有几个进程正在访问该文件等。
打开文件表的索引号也称“文件描述符”,“文件句柄”(对应UNIX和Windows)
注:访问控制表(Access Control List)是对访问矩阵按列(对象)划分而建立的。
所谓“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的。
无结构文件内部的数据就是一系列二进制流或字符流。 无结构文件将数据按顺序组织成记录并积累保存,它是有序相关信息项的集合,以字节 (Byte)为单位。 由于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式。 但字符流的无结构文件管理简单,用户可以方便地对其进行操作。 所以,那些对基本信息单位操作不多的文件较适于釆用字符流的无结构方式,如源程序文件、目标代码文件等。
由一组相似的记录组成,每条记录由若干个数据项组成。如:数据库表文件。通常由其中一个数据项作为主关键字可以唯一标识一个记录。根据各条记录的长度(占用存储空间)是否相等,又可分为定长记录和可变长记录两种。
有结构文件按记录的组织形式可以分为:顺序文件、索引文件、索引顺序文件、直接文件或散列文件(Hash File)。
顺序文件类似于数据结构中的线性结构(线性表),在物理上可以链式存储和顺序存储。
串结构:关键字排列无序,即无序线性表。顺序结构:关键字顺序排列,即有序线性表。
链式存储、顺序存储与定长记录、可变长记录与串结构、顺序结构。这三类限制理论上有八种组合。
重点关注:
注:考试中默认顺序文件是指顺序存储的顺序文件。
索引文件主要是为了应对可变长记录不能随机存取。索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
索引表本身是定长记录的顺序文件。因此可以随机存取。可将关键字作为索引号内容,若按关键字顺序排列(顺序结构),还可支持折半查找。
索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
争议:
- 其思想和分块查找(索引顺序查找)是类似的。
- 但分块查找的索引表必须是组内无序,组间有序,原因可能是分块查找用索引表的相邻关键字来划分出组内关键字范围。而这里索引顺序文件给出的关键字本身可以映射一种范围因而无需块间有序。
- 索引顺序文件的索引表中同一个组中的关键字可以无序,但组与组之间的关键字必须有序。解释:就算是以姓名首字母来作为关键字检索,其底层硬件也是0/1二进制码,必须是有序的才方便划分组内关键字范围。
王道书上描述的是第二种,王道视频课如上图所述的是第一种。实际上遇见此类问题时不能在这里被坑了即可。
为进一步提高检索速度,可以为顺序文件建立多级索引表。
给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。
小结:顺序文件适用顺序查找;顺序存储、顺序结构的定长顺序文件适用折半查找;索引顺序文件适用分块查找;直接文件(散列文件)适用散列(哈希)查找。
连续分配方式要求每个文件在磁盘上占有一组连续的块。
缺点:文件长度不宜动态增加,删除和插入记录麻烦;会产生外部碎片。
优点:作业访问磁盘时需要的寻道数和寻道时间最小。
链接分配是一种采用离散分配的方式。它消除了磁盘的外部碎片,对文件的插入、删除和修改操作也十分方便。
只支持顺序访问,不支持随机访问。
可以将几个盘块组成簇(cluster),按簇而不按块来分配,这样做增加了内部碎片,减少了磁盘访问时间。
把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表(FAT,file allocation table)
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似页表)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
注意:显式链接分配中一个磁盘对应一个文件分配表FAT,索引分配中一个文件对应一个索引表。两者都不需要访问磁盘。
原理同分页管理方式中页表太长这一问题。
是多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)