第六章
教学时数:8学时
文件系统
教学目的与要求:本章的学习目的是使学生掌握文件系统的基本概念和实现过程。要求掌握文件的逻辑结构、物理组织及对不同类型文件的存取方法,掌握文件目录,外存空间管理及文件共享方式,了解文件系统的概念、文件的使用、文件系统的层次模型。
教学重点:文件系统的基本概念,文件的逻辑和物理结构。教学难点:各种目录结构下文件操作的过程。
6.1文件和文件系统
6.1.1文件、记录和数据项文件是数据的一种组织形式,而文件管理系统是指文件和对文件进行操纵和管理的软件集合。基于文件系统的概念,可以把数据的组成分为数据项、记录和文件三级。1、数据项数据项可分成以下两种类型:(1)基本数据项这是用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,即原子数据,又称为数据元素或字段。它的命名往往与其属性一致。例如,用于描述一个学生的基本数据项有:学号、姓名、年龄、所在班级等。(2)组合数据项它是由若干个基本数据项组成的,简称组项。例如,经理便是个组项,它由正经理和副经理两个基本项组成。又如,工资也是个组项,它可由基本工资、工龄工资和奖励工资等基本项所组成。基本数据项除了数据名外,还应有数据类型。因为基本项仅是描述某个对象的属性,根据属性的不同,需要用不同的数据类型来描述。例如,在描述学生的学号时,应使用整数;描述学生的姓名则应使用字符串(含汉字);描述性别时,可用逻辑变量或汉字。可见,由数据项的名字和类型两者共同定义了一个数据项的“型”。而表征一个实体在数据项上的数据则称为“值”。例如,学号/30211、姓名/王有年、性别/男等。2、记录记录是一组相关数据项的集合,用语描述一个对象某方面的属性。为了能唯一地标识一个记录,必须在记录的各个数据项中,确定出一个项或几个项,把它们的集合称为关键字(key)。关键字是能唯一标识一个记录的数据项。3、文件文件是具有文件名的一组相关信息的集合,可分为有结构文件和无结构文件两种。在有结构的文件中,文件由若干个相关记录组成,而无结构文件则被看成是一个字符流。文件在文件系统中是一个最大的数据单位,它描述了一个对象集。4、文件的属性(1)文件类型。可以从不同的角度来规定文件的类型。(2)文件长度。指文件的当前长度,长度的单位可以是字节、字或块,也可能是最大允许的长度;(3)文件的物理位置。用语指示文件在哪一个设备上及在该设备的哪个位置;(4)文件的存取控制。规定那些用户能够读、哪些用户能够读/写、或者执行;(5)文件的建立时间。指最后一次的修改时间等。图6-1示出了文件、记录和数据项之间的层次关系。图6-1文件、记录和数据项之间的层次关系6.1.2文件类型和文件系统模型1、文件类型为了方便系统和用户了解文件的类型,在OS中都把文件类型作为扩展名而缀在文件名的后面,在文件名和扩展名之间用“.”号分开。下面是常用的几种文件分类方法。(1)按用途分类①系统文件。它是指由系统软件构成的文件。大多数的系统文件只允许用户调用而不允许用户去读,更不允许修改;有的系统文件不直接对用户开放。②用户文件。由用户的源代码、可执行文件或数据等所构成的文件,用户将这些文件委托给系统保管。③库文件。这是由标准子例程及常用的例程等所构成的文件。允许用户调用,但不允许修改。(2)按文件中的数据形式分类①源文件。这是指由源程序和数据构成的文件。②目标文件。它是指把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所形成的文件。它属于二进制文件,通常目标文件使用的后缀名“.obj”。③可执行文件。这是指把编译后所产生的目标代码,再由链接程序链接后所形成的文件。(3)按存取控制属性分类①只执行文件。只允许被核准的用户调用执行,即不允许读,更不允许写。②只读文件。只允许文件主及被核准的用户去读,但不允许写。③读写文件。允许文件主和被核准的用户去读文件和写文件。2、文件系统模型(1)对象及属性说明①文件。在文件系统中有着各种不同类型的文件,它们都作为文件管理的直接对象。②目录。为了方便用户对文件的检索和存取,在文件系统中必须培植目录。在目录中除包含文件名外,还包括对文件树型的说明。对目录的组织管理,是方便用户和提高文件存取速度的关键。③磁盘(磁带)存储空间。文件和目录必定占据存储空间,对着部分空间的有效管理,不仅能提高外存的利用律,而且能加速对文件的存取。(2)对对象操纵和管理的软件集合这是文件管理系统的核心部分。文件系统的功能大多是在这一层实现的,其中包括:对文件存储空间的管理、对文件目录的管理、用于将文件的逻辑地址转换为物理地址的机制、对文件读和写的管理,以及对文件的共享与保护等功能。(3)文件系统的接口为方便用户使用文件系统,文件系统通常向用户提供两种类型的接口:①命令接口。这是指作为用户与文件系统交互的接口。用户可通过键盘终端键入命令,取得文件系统的服务。②程序接口。这是指作为用户程序与文件系统的接口。用户程序可通过系统调用来取得文件系统的服务。6.1.3文件操作1、最基本的文件操作(1)创建文件。在创建一个新文件时,系统首先要为新文件分配必要的外存空间。并在文件系统的目录中,为之建立一个目录项。目录项中应记录新文件的文件名及其在外存的地址等属性。(2)删除文件:当已不再需要某文件时,可将它从文件系统中删除。在删除时,系统应先从目录中找到要删除的文件的目录项,然后回收该文件所占的存储空间。(3)读文件:在读一个文件时,须在系统调用中给出文件名和文件被读入的内存目标地址,此时,系统同样要查找目录,找到指定文件的目录项,从而得到读文件在外存的位置。在目录项中,还有一指针用于对文件的读写。(4)写文件:在写一个文件时,须在系统调用中给出文件名和文件在内存的源地址,此时,系统同样要查找目录,找到指定文件的目录项,再利用目录中的写指针进行写。(5)截断文件:如果一个文件的内容已经陈旧而需要全部更新文件的内容时,一种方法是将此文件删除,再重新创建一个新文件。但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,也就是将原有文件的长度设置为0,或放弃原有的文件的内容。(6)设置文件的读/写位置:前述的文件读写操作,都只提供了文件的顺序存取手段,即每次时从文件的始端读或写。设置文件读写位置的操作,用于设置文件的读写指针的位置,以便每次读写文件时,不是从其始端而是从所设置的位置开始进行。也正是这样,才能改变顺序存取为随机存取。2、文件的“打开”和“关闭”操作所谓“打开”,是指系统将指名文件的属性(包括该文件在外存上的物理位置)从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(或称为索引)返回给用户。以后,当用户再要求对该文件进行相应的操作时,便可利用系统所返回的索引号向系统提出操作请求。系统这时便可直接利用该索引号到打开文件表中去查找,从而避免了对该文件的再次检索。这样不仅节省了大量的检索开销,也显著地提高了对文件的操作速度。如果用户已不再需要对该文件实施相应的操作时,可利用“关闭”(close)系统调用来关闭此文件,OS将会把该文件从打开文件表中的表目上删除掉。3、其它文件操作为了方便用户使用文件,通常,OS都提供了数条有关文件操作的系统调用,可将这些调用分成若干类:最常用的一类是有关对文件属性进行操作的,即允许用户直接设置和获得文件的属性,如改变已存文件的文件名、改变文件的拥有者(文件主)、改变对文件的访问权,以及查询文件的状态(包括文件类型、大小和拥有者以及对文件的访问权等);另一类是有关目录的,如创建一个目录,删除一个目录,改变当前目录和工作目录等;此外,还有用于实现文件共享的系统调用和用于对文件系统进行操作的系统调用等。6.2文件的逻辑结构
对于任何一个文件,都存在着以下两种形式的结构:(1)文件的逻辑结构(FileLogicalStructure)。从用户观点出发所观察到的文件组成形式,是用户可以直接处理的数据及其结构,独立于文件的物理特性,又称文件组织。(2)文件的物理结构,又称为文件的存储结构,是指文件在外存上的存储组织形式。6.2.1文件逻辑结构的类型文件的逻辑结构可分为以下两大类:1、有结构文件这是指由一个以上的记录构成的文件,又称为记录式文件。根据记录的长度又可分为定长和不定长两类。(1)定长记录:指文件中所有记录的长度都是相同的。(2)变长记录:指文件中各记录的长度不相同。根据用户和系统管理上的需要,可采用多种方式来组织这些记录,形成下述的几种文件:(1)顺序文件。(2)索引文件。(3)索引顺序文件。2、无结构文件如果说大量的数据结构和数据库,是采用有结构的文件形式的话,则大量的源程序、可执行文件、库函数等,所采用的就是无结构的文件形式,即流式文件。其长度以字节为单位。对流式文件的访问,则是采用读写指针来指出下一个要访问的字符。可以把流式文件看作是记录式文件的一个特例。在UNIX系统中,所有的文件都被看作是流式文件;即使是有结构文件,也被视为流式文件;系统不对文件进行格式处理。6.2.2顺序文件1、逻辑记录的排序文件是记录的集合,文件中记录可以是任意顺序的,因此,她、它可以按照各种不同的顺序排列。一般有2种情况:(1)串结构:记录顺序与关键字无关,通常由时间来确定,即按存入时间的先后次序排列记录。(2)顺序结构:指文件中的所有记录按关键字(词)排列。可以按关键词的长短从小到大排序,也可以从大到小排序;或按其英文字母顺序排序。2、对顺序文件的读/写操作对于定长记录的顺序文件:若已知当前记录的逻辑地址,很容易确定下一记录的逻辑地址。在读一个文件时,可设置一个读指针Rptr(见图6-3),使它指向下一个记录的首地址,每当读完一个记录时,便执行:Rptr:=Rptr+L操作,使之指向下一个记录的首地址,其中,L为记录的长度。写操作类似,可设置一个读指针Wptr。对于变长记录的顺序文件:在顺序读写时的情况相似,但应分别为他们设置一个读或写指针,在每次读或写完一个记录时,须将读或写指针加Li,Li是刚读或写完的记录的长度。图6-3定长和变长记录文件3、顺序文件的优缺点(1)优点①适合于对大批量记录的存取操作,此时,对顺序文件的存取效率是所有文件中存取效率最高的。②只有顺序文件才能存储在磁带上,并能有效地工作。(2)缺点①在交互场合,若用户要求查找或修改单个记录,顺序文件的查找效率低。②增加或删除记录比较困难。为此,可为顺序文件配置一个运行记录文件(LogFile)或称为事务文件(TransactionFile)。用来存放欲删除、修改、增加的记录。规定每隔一定时间将运行记录文件与原开的主文件加以合并,并产生一个按关键字排序的新文件。6.2.3索引文件对于定长记录文件,如果要查找第i个记录,可直接根据下式计算来获得第i个记录相对于第一个记录首址的地址:Ai=i×L然而,对于可变长度记录的文件,要查找第i个记录时,须首先计算出该记录的首地址。为此,须顺序地查找每个记录,从中获得相应记录的长度Li,然后才能按下式计算出第i个记录的首址。假定在每个记录前用一个字节指明该记录的长度,则定长记录可方便的实现顺序存取和直接存取,而对于变长记录较难实现直接存取,为此,可为变长记录文件建立一张索引表,对主文件中的每个记录,在索引表中设置一个表项,用于记录该记录的长度L及指向该记录的指针。