1)什么是文件?
2)单个文件的逻辑结构和物理结果之间是否存在制约关系?
本节内容较为抽象,本节要注意区分文件的逻辑结构和物理结构。
一、文件系统基础
1.文件的基本概念(一切皆文件)
文件(File)是以硬盘位载体的存储在计算机上的信息集合,文件可以是文本文档、图片、程序等。
在系统运行时,计算机以进程为基本单位进行资源的调度和分配。而在用户进行的输入,输出中,则以文本为基本单位。
1.文件的定义
文件的结构:
1)数据项:分为基本数据项(用来描述一个对象的某种属性的一个值,是数据中最小逻辑单位)和组合数据项(由多个数据项组成)
2)记录:是一组相关的数据项集合,描述一个对象在某方面的属性
3)文件:分为有结构文件(若干个相似的记录组成)和无结构文件(被视为一个字符流)
文件可以是数组、字符或二进制代码。
2.文件的属性
1)名称:文件名唯一
2)类型:被支持不同类型的文件系统所使用
3)创建者:文件创建者的ID
4)所有者:文件当前所有者的ID
5)位置:指向设备和设备上文件的指针
6)大小:文件当前大小(字节,字或块表示)
7)保护:对文件进行保护的访问控制信息
8)创建时间、最后一次修改时间和最后一次存取时间:文件创建、上次修改和上次访问的相关信息,用于保护和跟踪文件的使用
操作系统提供文件控制块来维护文件元数据。
2.文件控制块和索引节点
1.文件控制块(FCB):用来存放控制文件需要的各种信息的数据结构。
文件与FCB一一对应,FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。每当创建一个新的文件,系统就要为它建立一个FCB,用来记录文件的各种属性。
FCB包含:
1)基本信息:文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。
2)存取控制信息:文件主的存取权限、核准用户的存取权限以及一般用户的存取权限。
3)使用信息:文件建立时间、上次修改时间等。
2.索引节点
在文件从磁盘调入内存时,采用文件名和文件描述信息分离的方法,使文件描述信息单独形成一个称为索引节点的数据结构(i节点)。在文件目录中的每个目录项仅由文件名和相应的索引节点号(指针)构成。
1)磁盘索引节点
存放在磁盘中
2)内存索引节点
存放在内存中,比磁盘索引节点多索引节点号,状态,访问计数,逻辑设备号,链接指针。
FCB或索引节点相当于图书馆中图书的索书号。
3.文件操作
1.文件的基本操作
1)创建文件
2)删除文件
3)读文件
4)写文件
2.文件的打开与关闭
文件打开的过程:
系统检索到指定文件的目录项后,将该目录项从外存复制到内存中的打开文件表的一个标目中,并将该表目录的索引号返回给用户,当用户再次对该文件发出操作请求时,可以通过索引号打开文件表中查找到文件信息,节省大量的检索和开销。
文件关闭的过程:
采用两级表:整个系统表(包含与进程无关的信息)和每个进程表(进程对文件的使用信息)。
每个文件都会关联一个open 打开计数器,来记录多少进程打开了该文件。当文件不再使用,利用操作系统调用close关闭它,会删除单个进程的打开文件表中的相应条目,打开计数器也会递减。
文件名不必是打开文件表的一部分,只要文件未关闭,所有文件操作都是通过文件描述符(索引号)来进行的。
注意:只要完成了文件打开open()系统调用,后面在使用read()、write()、Lseek()、close()等文件操作的操作系统调用,就不再使用文件名,而是使用文件描述符(索引号)。
每个文件打开都具有:
1)文件指针
2)文件打开计数
3)文件磁盘位置
4)访问权限
4.文件保护
1.访问类型
对文件保护可以从限制对文件的访问类型出发:
1)读
2)写
3)执行
4)添加
5)删除
6)列表删除
保护只可以在底层提供,如具有读权限的用户就用有复制和打印权限。
2.访问控制
为每个文件和目录增加一个访问控制列表。来规定每个用户名及其所允许的访问类型。
访问控制列表分为:拥有者、组、其他。
口令和密码是另外两种访问控制方式。
口令:用户在建立一个文件时提供一个口令,系统为其建立FCB时附上口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应的口令。这种方法时间和空间的开销不多,缺点是口令直接存在系统内部,不够安全。
密码:用户对文件进行加密,文件被访问时要使用密钥,并没有控制用户对文件的访问类型。
5.文件的逻辑结构
文件的逻辑结构是指从用户的角度出发所看到的文件组织形式。
文件的物理结构(存储结构)是指文件存储在外存上的存储组织形式,是用户看不到的。
按逻辑结构分:
1.无结果文件
最简单的文件组织形式,有字符流构成,又称流式文件,以字节为单位。
对它的访问是通过读写指针来指出下一个要访问的字节的。在系统中允许的大量源程序、可执行文件、库函数等就是无结果文件。由于无结构文件没有结构,所以访问只能通过穷举搜索的方式。
2.有结构文件
根据记录长度是否相等分为:
1)定长记录
文件中所有记录长度都是相等的,各项数据都在记录中的相同位置,具有相同的长度。检索记录的速度快,方便用户对文件进行处理,广泛用于数据处理中。
2)变长记录
文件中记录的长度不一定相同,记录中所包含的数据项数目不同,也可能是数据项本身的长度不定,检索记录只能顺序查找,速度慢。
有结构文件按记录的组织形式可以分为:
1)顺序文件
文件中的记录一个接一个地顺序排列,记录可以是定长记录或变长记录。
1.串结构:各记录之间的顺序与关键字无关,通常是按存入的先后时间进行排列,检索时必须从头开始顺序依次查找,比较费时。
2.顺序结构:按所有记录关键字顺序排列,对于定长记录的顺序文件,检索时可以采用折半查找,效率高。
顺序文件的效率是所有逻辑文件中最高的,在经常需要查找、修改、增加或删除单个记录的场合,顺序文件的性能最差。
2)索引文件
变长记录的顺序文件只能顺序查找,效率低,那么可以建立一张索引表,为主文件的每个记录在索引表中分别设置一个索引表项,包含指向记录的指针和记录长度,索引表按关键字排序,因此本身也是一个定长记录的顺序文件,加快记录的检索速度。
3)索引顺序文件
将顺序文件分为若干组,为文件建立一张索引表,为每组中的第一个记录建立一个索引项,其中包含该记录的关键字和指向该记录的指针。
索引文件和索引顺序文件都提高了查找速度,但都因为配置了索引表增加了存储空间。
4)直接文件或散列文件(Hash)
通过键值或散列函数转换的键值直接决定记录的物理地址。就是哈希查找。
6.文件的物理结构
类似于内存分页,磁盘中的存储单元也被分为一个个的块,叫磁盘块,其大小通常与内存的页面大小相同。内存与磁盘简单数据交换(磁盘I/O)都是以块为单位进行的。
1.连续分配
要求每个文件在磁盘上占有一组连续的块,磁盘地址定义了磁盘上的一个线性排序,这种排序使进程访问磁盘时需要的寻道数和寻道时间最小。
2.链接分配
采用一种离散分配的方式。
链式分配的优点是:1.消除了磁盘外部碎片,提高了磁盘利用率。
2.便于动态地为文件分配盘块,无需知道文件大小。
3.文件的插入删除很方便。
1)隐式链接
目录项中含有文件第一块的指针(盘块号)和最后一块的指针。每个文件对应一个磁盘块的链表,磁盘块分布在磁盘的任何地方。处了文件的最后一个盘块外,每个盘块都存有指向下一个文件的指针,这些指针对用户是透明的。
缺点:1.只支持顺序访问,只能从第一块开始,随机访问效率很低。
2.稳定性问题,文件盘块中任何一个指针出现问题,都会导致文件内容丢失。
3.指向下一个盘块的指针也要占存储空间。
2)显式链接
将用于链接文件各物理块的指针,显示地存放在内存的一张链接表中,该表在整个磁盘中只设置一张,叫文件分配表(FAT)。每个表项中存放指向下一个盘块的指针。文件目录中只需要记录该文件的起始块号,后序块号可以通过FAT找到。
FAT的表项与全部磁盘块一一对应,-1 -2都表示磁盘块空闲。
优点:1.支持顺序访问,也直接访问。
2.FAT在系统启动时就被读入内存,检索记录是在内存中进行的,因而不仅显著提高了检索速度,而且明显减少了访问磁盘的次数。
缺点:FAT需要占一定的内存空间。
3.索引分配
1)单级索引分配方式
2)多级索引分配方式
3)混合索引分配方式
1)直接地址
2)一次间接地址
3)多次间接地址
1)什么是文件?
文件是以计算机硬盘为载体的存储在计算机上的信息集合,它的形式多样。
2)单个文件的逻辑结构和物理结果之间是否存在制约关系?