(一)文件及其分类

1.文件

文件(File)是被命名的相关信息的集合体。它通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。例如用户编写的一个源程序、经编译后生成的目标代码程序、初始数据和运行结果等,均可以文件形式保存。所以,文件表示的对象相当广泛。一般地,文件是由二进制代码、字节、行或记录组成的序列,它们由文件创建者或用户定义。

文件中的信息由创建者定义。很多不同类型的信息都可存放在文件中,如源程序、目标程序、可执行程序、数值数据、文本、工资单、图形图像、录音等。根据信息类型,文件具有一定的结构。如文本文件是一行一行(或页)的字符序列;源文件是子程序和函数序列,它们又有自己的构造,如数据说明和后面的执行语句;目标文件是组成模块的字节序列,系统链接程序知道这些模块的作用;而可执行文件是由一系列代码段组成的,装入程序可把它们装入内存,然后运行。

2.文件类型

为便于管理和控制文件,常把文件分成若干类型。由于不同系统对文件的管理方式不同,因而对文件的分类方法也有很大差异。下面是常用的几种文件分类方法。

· 按用途分类

(1)系统文件—— 由操作系统及其他系统程序的信息所组成的文件。这类文件对用户不直接开放,只能通过操作系统提供的系统调用为用户服务。

(2)库文件—— 由标准子程序及常用的应用程序组成的文件。这类文件允许用户使用,但用户不能修改它们。

(3)用户文件—— 由用户创建、管理的文件,如源程序、目标程序、原始数据、计算结果等。这类文件可由创建者(即文件主)或被授权者进行适当的读、写或其他操作。

· 文件中的数据形式分类

(1)源文件—— 从终端或输入设备输入的源程序和数据所构成的文件,它通常由ASCII码或汉字组成。

(2)目标文件—— 源程序经过相应语言的编译程序进行编译后,尚未经过链接处理的目标代码所形成的文件。它属于二进制文件。

(3)可执行文件—— 经过编译、链接之后所形成的可执行目标文件。

· 按存取权限分类

(1)只读文件—— 仅允许对其进行读操作的文件,不允许写操作。

(2)读写文件—— 允许文件主和被授权用户对其进行读或写操作的文件。

(3)可执行文件—— 允许被授权用户执行它,但通常不允许读或写。

· 按保存时间分类

(1)临时文件—— 用户在一次解题过程中建立的“中间文件”,它只保存在磁盘上,当用户退出系统时,它也随之撤消。

(2)永久文件—— 长期保存的有价值的文件,以备用户经常使用。

· 在UNIX/Linux和MS-DOS系统中,按文件的内部构造和处理方式分类

在这些系统中文件类型主要有普通文件、目录文件和特殊文件。

(1)普通文件—— 由表示程序、数据或文本的字符串构成,内部没有固定的结构。这类文件包括一般用户建立的源程序文件、数据文件、目标代码文件,也包括各种系统文件(如操作系统本身的众多代码文件)和库文件(如标准I/O文件和数学函数文件)。

(2)目录文件—— 由下属文件的目录项构成的文件。它类似于人事管理方面的花名册—— 本身不记录个人的档案材料,仅仅列出姓名和档案分类编号。对目录文件可进行读、写等操作。

(3)特殊文件—— 特指各种外部设备。为了便于统一管理,系统把所有I/O设备都作为文件对待,按文件格式提供用户使用,如目录查找、存取权限验证等方面与普通文件相似,而在具体读、写操作上,要针对不同设备的特性进行相应处理。特殊文件分为字符特殊文件块特殊文件。前者是有关输入/输出的设备,如终端、打印机和网络等;后者是存储信息的设备,如硬盘、软盘和磁带等。

普通文件通常分为ASCII文件和二进制文件。ASCII文件由只包含ASCII字符的正文行组成,每个正文行以回车符或换行符终止,各行的长度可以不同。ASCII文件又称文本文件,常用来存储资料、程序源代码和文本数据。文本文件的最大特点是可以直接显示和打印,可用普通文本编辑器进行编辑加工。

二进制文件所包含的每个字节可能有256种值。因此,对于表达信息来说,二进制文件是一种更为有效的方式,但它不能在终端上直接显示出来。大家最熟悉的二进制文件恐怕就是可执行文件。

可执行文件与一般文本文件不同,都有内部结构。在UNIX/Linux系统中它有5个区,依次是文件头、正文段、数据段、重定位区和符号表区。文件头结构由幻数(标志可执行文件的特征),正文段长度,数据段长度,BSS段(Block Started by Symbol,存放未初始化的数据)长度,符号表长度,入口单元及各种标志组成。重定位时利用重定位区,而符号表用于调试程序,如图5-1(a)所示。

存档文件是二进制文件的另一示例。在UNIX/Linux系统中,它由编译过、但未链接的库过程(模块)集合组成。每个存档文件的结构是在其目标模块之前有一个文件头,这个文件头由模块名、创建日期、文件拥有者、保护代码和文件长度等项组成。文件头全是二进制数码,如图5-1(b)所示。

文件系统的基本任务(文件系统-文件系统概述)(1)

图5-1 可执行文件和存档文件的内部结构

所有操作系统都必须至少识别一种文件类型—— 它自己的可执行文件。有些操作系统可以识别多种文件类型。一般情况下,对文件进行操作时必须注意其类型,特别是不同操作系统所识别的文件类型是不一致的。

3.文件命名

文件是抽象机制,提供在磁盘上存放信息和以后从中读出的方法。用户不必了解信息如何存放、存放在何处、磁盘如何实际工作等细节。抽象机制最重要的特性就是“按名”管理对象。用户对文件也是“按名存取”的。

很多操作系统支持的文件名都由两部分构成:文件名扩展名。二者间用圆点分开,如prog.c。扩展名也称为后缀,利用扩展名可以区分文件的属性。表5-1给出了常见文件扩展名及其含义。

表5-1 常见文件扩展名及其含义

文件系统的基本任务(文件系统-文件系统概述)(2)

不同系统对文件的命名规则是不同的,但所有操作系统都允许由1~8个字母构成的字符串作为合法的文件名。数字和特殊字符也可出现在文件名中。有些文件系统区分文件名中的大小写字母,如UNIX和Linux系统,而另外的文件系统则不加区分,如MS-DOS。Windows 95/98都采用MS-DOS文件系统,因而继承了它的很多特性,包括文件名构成。Windows NT和Windows 2000支持MS-DOS文件系统,也继承它的特性,当然它也有自己的文件系统。

(二)文件系统的功能

所谓文件系统,就是操作系统中负责操纵和管理文件的一整套机制,它实现文件的共享和保护,方便用户“按名存取”。文件系统为用户提供了存取简便、格式统一、安全可靠的管理各种文件信息的方法。有了文件系统,用户就可以用文件名对文件实施存取和相应管理,而不必去考虑其信息放在磁盘的哪个面、哪个道、哪个扇区上,也不必关心怎样去启动设备进行I/O等实现过程的细节。因而,文件系统提供了用户与外存的界面。

一般说来,文件系统应具备以下功能:

(1)文件管理——能够按照用户要求创建一个新文件、删除一个旧文件,对指定的文件进行打开、关闭、读、写、执行等操作。

(2)目录管理——为每个文件建立一个文件目录项,若干文件的目录项构成一个目录文件。根据用户要求创建或删除目录文件,对用户指定的文件进行检索和权限验证、更改工作目录等。

(3)文件存储空间的管理——由文件系统对文件存储空间进行统一管理,包括对文件存储空间的分配与回收,并为文件的逻辑结构与它在外存(主要是磁盘)上的物理地址之间建立映射关系。

(4)文件的共享和保护——在系统控制下使一个用户可供共享其他用户的文件。另外,为防止对文件的未授权访问或破坏,文件系统应提供可靠的保护和保密措施,如采用口令、存取权限以及文件加密等。为防止意外事故对文件信息的破坏,应有转储和恢复文件的能力。

(5)提供方便的接口——为用户提供统一的文件存取方式,即用户只要用文件名就可对存储介质上的信息进行相应操作,从而实现“按名存取”。操作系统应向用户提供一个使用方便的接口,主要是有关文件操作的系统调用,供用户编程时使用。

看待文件系统有不同的观点,主要是用户观点(即外部使用观点)和系统观点(即内部设计观点)。从用户角度看,文件系统应该做到存取文件方便,信息存储安全可靠,即能实现共享又可做到保密。而从系统角度看,它要实现对存放文件的存储空间的组织、分配、信息的传输,并对已存信息进行检索和保护等。

,