一、文件系统概述
1.文件
- 计算机对系统中软件资源:无论是程序或数据、系统软件或应用软件都以文件方式来管理。
- 文件是存贮在某种介质上的(如磁盘、磁带等)并具有文件名的一组有序信息的集合。
- 文件名是由字符和数字组成的,例如MS-DOS中文件名由三部分组成,格式如下:[<盘符>] <文件名> [.扩展名]。格式 [ ] 中是可以省略,盘符为存放文件的磁盘驱动器号,如用A:和C:分别 表示软盘和硬盘驱动器;文件名由1∽8个字符组成。扩展名为由“.”开始的1-3个字符组成,如.EXE表示可执行的浮动代码文件,.TXT表示ASCⅡ码文本文件,.LIB表示库文件,.BAT表示批处理文件等。
2.文件系统
- 文件系统是操作系统中以文件方式管理计算机软件资源的软件和被管理的文件和数据结构(如目录和索引表等)的集合。
- 从系统角度来看,文件系统是对文件存储器的存储空间进行组织、分配和回收,负责文件的存储、检索、共享和保护。
- 从用户角度来看,文件系统主要是实现“按名存取”,文件系统的用户只要知道所需文件的文件名,就可存取文件中的信息,而无需知道这些文件究竟存放在什么地方。
文件系统的类型:
- FAT文件系统(MS-DOS文件系统、msdos)
它是MS-DOS操作系统使用的文件系统,它也能由Windows98/NT、linux、SCO UNIX等操作系统访问。文件地址以FAT表结构存放,文件目录32B,文件名为8个基本名加上一个“.”和3个字符扩展名。 - 扩展文件表系统(vfat)
它是Windows98使用的扩展的DOS文件系统,它在MS-DOS文件系统基础上增加了对长文件名(最多到256B)支持。 - NTFS(NT文件系统)
它是Windows NT操作系统使用的文件系统,它具有很强的安全特性和文件系统恢复功能,可以处理巨大的存储媒体,支持多种文件系统。 - ext2(二级扩展文件系统)
它是Linux操作系统使用的高性能磁盘文件系统,它是对Minux操作系统中使用的文件系统扩展(ext)的扩展。它支持256字符的文件名,最大可支持到4TB的文件系统大小。 - HPFS(高性能文件系统、hpfs)
它是OS/2操作系统使用的文件系统。 - S51K/S52K(sysv)
它是AT&T UNIX S V 操作系统使用的1KB/2KB文件系统。 - CD-ROM文件系统(iso9660)
它是符合ISO9660标准的支持CD-ROM的文件系统,它有High sierra CD-ROM和Rock Ridge CD-ROM二种类型。 - UDF通用磁盘格式文件系统
UDF(Universal Disk Format)文件系统是依据光学储存技术协会(Optical Storage Technology Association, OSTA)的通用磁盘格式文件系统规格1.02版所制定的。它提供了对 UDF格式媒体的只读访问(例如DVD光盘)。Windows98提供对UDF文件系统支持。
二、文件的组织
文件的组织是指文件的构造方式,
- 从用户观点出发观察到的文件组织结构称为文件的逻辑结构;
- 而文件在外存上的存储组织形式称为文件的物理结构,又称文件的存储结构。
1、文件的逻辑结构和存取方法
文件的逻辑结构
从用户观点出发观察到的文件组织结构称为文件的逻辑结构,逻辑结构的文件称逻辑文件。
逻辑文件从结构上分成二种形式,
- 一种是无结构的流式文件,流式文件是指对文件内信息不再划分单位,它是依次的一串字符流构成的文件。
- 另一种是有结构的记录式文件。 记录式文件是用户把文件内的信息按逻辑上独立的含义划分信息单位,每个单位称为一个逻辑记录(简称记录)。所有记录通常都是描述一个实体集的,有着相同或不同数目的数据项,记录的长度可分为定长和不定长记录两类。
记录文件有顺序、索引、索引顺序、直接、分区和堆文件几种。
- 堆(The Pile)文件(累积文件)
堆文件是最简单的记录文件,它是串结构的顺序文件。数据按先来后到的次序组织,每个记录所包含的数据项是自我标识的,数据项的长度可以明确指定或使用界定符区分。在堆文件中访问所需要的记录需穷尽搜索,这种文件组织不适合大多数应用。 - 顺序文件(Sequential File)
顺序文件的记录定长,记录中的数据项的类型长度与次序固定,一般还有一个可以唯一标识记录的数据项,称为键(key),记录按键值的约定次序组织。顺序文件常用于批处理应用,对于查询或更新某个记录的请求的处理性能不佳。 - 索引文件(Indexed File)
索引文件对主文件中的记录按需要的数据项(一个或几个)建索引表。这时记录可为不定长的,它为每个记录设置一个表项。索引文件本身是顺序文件组织。 - 索引顺序文件(Indexed Sequential File)
索引顺序文件是基于键的约定次序组织的,为之建立一张索引表,为每个不同键值的记录组的第一个记录设置一个表项,为该组的其它记录设置了溢出区域,在溢出区域内记录按顺序文件方式组织。它是顺序文件和索引文件的结合。索引顺序文件既适用于交互方式应用,也适用于批处理方式应用。 - 直接文件/哈希文件(The Direct/Hashed File)
检索时给出记录编号,通过哈希函数计算出该记录在文件中的相对位置。它可以对记录在直接访问存储设备上的物理地址直接(随机)访问。直接文件常用于需要高速访问文件而且每次访问一条记录的应用中。
文件的存取
用户通过对文件的存取来完成对文件的修改、追加和搜索等操作。常用的存取方法有顺序存取法、随机存取法(直接存取法)和按键存取法三种。
- 顺序存取法是按照文件的逻辑地址顺序存取,在记录式文件中,这反映为按记录的排列顺序来存取,在无结构的字符流文件中,顺序存取反映当前读写指针的变化。
- 随机存取法允许用户根据记录的编号来存取文件的任一记录,或者是根据存取命令把读写指针移到欲读写处来读写。
- 按键存取法是一种用在复杂文件系统,特别是数据库管理系统中的存取方法,文件的存取是根据给定的键或记录名进行的。
UNIX、Linux和Windows等操作系统都采用顺序存取和随机存取两种方法。
2、文件的物理结构
文件在存储介质上的组织方式称为文件的存储结构或称文件的物理结构、物理文件。
外存分配方法有连续分配、链接分配、索引分配,相应物理文件有:顺序文件、链接文件、索引文件。
- 连续分配—顺序文件
把逻辑文件中连续的信息存储到磁盘连续的物理盘块中所形成的文件称为顺序文件。这种文件保证了逻辑文件中逻辑记录(流式文件为逻辑块、页)顺序和存储器中文件占用盘块顺序的一致性。为使系统能查找文件中任一记录,在文件控制块FCB(或在目录)中存放文件第一个记录所存放的盘块号ADRR和文件总的盘块数N。
- 优点是管理简单,顺序存取速度快。
- 缺点是增删记录相当困难,磁盘存储空间的利用率不高,有外零头。所以顺序文件只适用于长度不变的只读文件。
- 链接分配 —链接文件
在将逻辑文件存储到外存上时,不要求为整个文件分配连续的空间,而是可以装入到离散的多个盘块中,只在每个盘块最后一个单元设置链接指针(这称为隐式链接) ,然后用链接指针将这些离散的盘块链接成一个队列,这样形成的物理文件称为链接文件。
管理链接文件只需在文件控制块FCB中设二项,一是存储文件头块信息的盘块号,另一是存储文件尾块信息的盘块号。
- 链接文件的优点是盘存储空间利用率高,文件增删改记录方便。
- 缺点是在随机存取某一个记录前需要化多次盘I/O操作读该记录前的文件信息以取得该记录的盘块号,才能存取该记录。如要读取逻辑块号第3块的信息,就要先进行3次盘I/O操作以读取存放第3块逻辑块信息的盘块号,所以链接文件只适用于顺序存取文件。
- 索引分配 —索引文件
索引文件是实现非连续存储的另一种方法,系统为加快记录的检索过程,为每个文件建立了一张索引表,每个逻辑块在索引表中占有一个表项,登记存放该逻辑块的盘块号。在文件控制块FCB中放置了索引表指针,它指向索引表始址,索引表存放在盘块中。
当索引表很大时,需要用多个盘块。管理有多个盘块的索引表有二种方法:
一种方法是将存放索引表的盘块用链接指针链接起来称为链接索引。链接索引可以顺序地读取索引表各索引表项,但读取后面的索引表项类同链接文件需要化费多次盘I/O操作。
另一种方法是采用多级索引,即为索引表本身建立索引表,从而形成了两级索引,如所形成的两级索引表还不能存放在一个盘块中,则需要为二级索引表建索引表,而形成三级索引。
- 优点:索引文件由于它既适合顺序存取记录又适合按任意次序随意存取记录,也便于增删文件的记录,所以索引结构文件应用范围较广。
- 索引文件的缺点是当文件很大时索引表很庞大,占用了许多盘空间,而在文件很小时,多级索引级别又不变,带来索引块的另头和存取速度减慢。
- UNIX/Linux直接间接混合寻址方式
由于80%以上文件是小文件,为了解决能高速存取小文件和管理大文件的矛盾,UNIX将直接寻址、一级索引、二级索引和三级索引结合起来,形成了混合寻址方式。
3、VFAT表结构
MS-DOS文件系统的文件物理结构采用FAT表结构。该结构为了克服链接文件随机读取任一逻辑块需要化费多次盘I/O操作的不足,将各盘块中的链接指针集中存放在盘的开始部分,构成一张表,称为FAT表。(这称为显式链接)FAT表每一项存放链接指针(下一个簇号),每个FAT表项占12位或16位,称为FAT12或FAT16。对于软盘因为容量小,簇数也少,采用12位FAT表,对于硬盘则采用16位FAT表。
FAT表文件系统原为小硬盘的目录结构而设计,由于簇的数目最多只能用16位表示,即最多只能有64K个簇,要用FAT表管理大的磁盘分区,只能采取增大每簇所包含的扇区数,一般根据磁盘的类型和容量大小来决定簇的大小。
三、文件的目录和管理
1、文件控制块FCB
为了实现“按名存取”,系统必须为每个文件设置用于描述和控制文件的数据结构,它至少要包括文件名和存放文件的盘物理地址,这个数据结构称为文件控制块FCB,文件控制块的有序集合称为文件目录,即一个文件控制块FCB就是一个文件目录项。文件控制块FCB中包含的信息有以下三类:
- 基本信息类
文件名:标识一个文件的符号名,在每个系统中文件必须具有唯一的名字。
文件的物理地址:这由于文件的物理结构不同而不同。对于连续文件就是文件的起始块号和文件总块数;对于MS-DOS是文件的起始簇号和文件总字节数;对于UNIX S V是文件所在设备的设备号、13个地址项、文件长度和文件块数等。 - 存取控制信息类
文件的存取权限,象UNIX用户分成文件主、同组用户和一般用户三类,这三类用户的读写执行(RWX)的权限。 - 使用信息类
文件建立日期、最后一次修改日期、最后一次访问的日期;当前使用的信息:打开文件的进程数,在文件上的等待队列等。文件控制块的信息因OS而不同。
2、多级目录
目录结构的组织关系到文件系统的存取速度,关系到文件共享性和安全性,因此组织好文件的目录是设计文件系统的重要环节。
- 单级目录结构
最简单的目录结构是在整个文件系统中只建立一张目录表,每个文件占一个表目,这称为单级目录。单级目录结构简单,能实现目录管理的基本功能–按名存取,但存在查找速度慢,不允许重名和不便于实现文件共享等缺点,因此它只适用于单用户环境。 - 多级目录结构
为了解决以上问题,在多道程序设计系统中常采用多级目录结构,MS-DOS和UNIX等操作系统都采用多级目录结构。这种目录结构象一棵倒置的有根树,该树根向下,每一个节点是一个目录,最末一个结点是文件,下图为UNIX树形多级目录结构。在多级目录中要访问一个文件时,必须指出文件所在的路径名,路径名从根目录开始到该文件的通路上所有各级目录名拼起来得到,各目录名之间与文件名之间可用分隔符隔开。在MS-DOS中分隔符为“\”,在UNIX中分隔符为“/”。例如下图中访问命令文件man的路径名为/usr/lib/man,这也称为文件全名。
在多级目录中存取一个文件需要用文件全名,这就允许用户在自己的目录中使用与其它用户文件相同的文件名,由于各用户使用不同的目录,虽二者使用了相同的文件名,但它们的文件全名仍不相同,这就解决了重名问题。
采用多级目录结构也提高了检索目录的速度:如采用单级目录则查找一个文件最多需查遍系统所有文件名,平均也要查一半文件名。而多级目录查找一个文件最多只要查遍文件路径上各目录的子目录和文件,例如上图中要查找文件man,只要查遍root目录、usr目录和lib目录所在子目录和文件就可以。
每访问一个文件都要使用从根目录开始搜索直到树叶的数据文件为止,包含各中间子目录的全路径名是相当麻烦的,同时由于一个进程运行时访问的文件大多局限在某个范围,基于这一点,可为每个用户(或每个进程)设置一个“当前目录”,又称“工作目录”。进程对各文件的访问都相对于“工作目录”而设置路径,这称为相对路径名。相应地,从根目录开始的路径名称为绝对路径名(absolute path name)。用相对路径可缩短搜索路径,提高搜索速度。例:文件mbox的绝对路径名为/usr/ast/mbox,如设置一个“当前目录”为/usr,则文件mbox的相对路径名为ast/mbox。