CH6 文件管理文件系统是操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、
更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法。
文件这一术语不但反映了用户概念中的逻辑结构,
而且和存放它的辅助存储器(也称文件存储器)
的存储结构紧密相关。
所以,一个文件必须从逻辑文件和物理文件两个侧面来观察它 。
对于用户来说,可按自己的愿望并遵循文件系统的规则来定义文件信息的逻辑结构,由文件系统提供,按名存取,来实现对用户文件信息的存储和检索 。 可见,使用者在处理他的信息时,只需关心所执行的文件操作及文件的逻辑结构,而不必涉及存储结构 。
但对文件系统本身来说,必须采用特定的数据结构和有效算法,实现文件的逻辑结构到存储结构的映射,实现对文件存储空间和用户信息的管理,提供多种存取方法 。
文件系统面向用户的功能是:
l 文件的按名存取
l 文件目录建立和维护
l 实现从逻辑文件到物理文件的转换
l 文件存储空间的分配和管理
l 提供合适的文件存取方法
l 实现文件的共享,保护和保密
l 提供一组可供用户使用的文件操作为了实现这些功能,操作系统必须考虑文件目录的建立和维护,存储空间的分配和回收,数据的保密和保护,监督用户存取和修改文件的权限,在不同存储介质上信息的表示方式,信息的编址方法,
信息的存储次序,以及怎样检索用户信息等问题 。
6.1文件
6.1.1 文件的概念文件是由文件名字标识的一组相关信息的集合 。
文件名是字母或数字组成的字母数字串,它的格式和长度因系统而异 。
文件可以按各种方法进行分类:
按用途可分成:系统文件,库文件和用户文件;按保护级别可分成:只读文件,读写文件和不保护文件;
按信息流向可分成:输入文件,输出文件和输入输出文件;按存放时限可分成:临时文件,永久文件,档案文件;
按设备类型可分成:磁盘文件,磁带文件,软盘文件 。
可以按文件的逻辑结构或物理结构进行分类 。
操作系统提供文件系统后用户使用方便文件安全可靠实现 文件共享把数据组织成文件形式加以管理和控制是计算机数据管理的重大发展 。
6.1.2 文件的命名文件是一个抽象机制,它提供了一种把文件保存在磁盘上而且便于以后读取的方法,用户不必了解信息存储的方法、
位置以及存储设备实际运作方式等细节,
在这一抽象机制中最重要的是文件命名,
文件命名
6.1.3 文件的类型操作系统一般支持以下几种不同类型的文件:
l 普通文件:即前面所讨论的存储在外存储设备上的数据文件 。
l 目录文件:管理和实现文件系统的系统文件 。
l 块设备文件:用于磁盘,光盘或磁带等块设备的 I/O。
l 字符设备文件:用于终端,打印机等字符设备的 I/O。
6.1.4文件的属性
l 文件的类型属性:如普通文件,目录文件,系统文件,隐式文件,设备文件等 。
l 文件的保护属性:如可读,可写,可执行,可创建,可删除等 。
6.1.5文件的存取从用户使用观点来看,他们关心的是数据的逻辑结构,即记录及其逻辑关系,数据独立于物理环境;从系统实现观点来看,数据则被文件系统按照某种规则排列和存放到物理存储介质上 。
那么,输入的数据如何存储? 处理的数据如何检索? 数据的逻辑结构和数据物理结构之间怎样接口? 谁来完成数据的成组和分解操作? 这些都是存取方法的任务 。 存取方法是操作系统为用户程序提供的使用文件的技术和手段 。
6.1.5.1 顺序存取按记录顺序进行读/写操作的存取方法称顺序存取。
固定长记录的顺序存取可变长记录的顺序文件
6.1.5.2 直接存取很多应用场合要求以任意次序直接读写某个记录可以使用直接存取
6.1.5.3 索引存取第三种类型的存取是基于索引文件的索引存取方法
6.1.6 文件的使用用户通过两类接口与文件系统联系:
第一类是与文件有关的操作命令或作业控制语言中与文件有关的语句,例如,Unix中的 cat,
cd,cp,find,mv,rm,mkdir,rmdir等等,这些构成了必不可少的文件系统人 —— 机接口。
第二类是提供给用户程序使用的文件类系统调用,构成了用户和文件系统的另一个接口,通过这些指令用户能获得文件系统的各种服务。
文件系统提供的基本文件类系统调用有
,
l建立文件
l打开文件
l读 /写文件
l文件控制
l关闭文件
l撤销文件
6.2文件目录文件系统怎样实现文件的,按名存取,?
如何查找文件存储器中的指定文件? 如何有效地管理用户文件和系统文件?
文件目录便是用于这些方面的重要手段 。
文件系统的基本功能之一就是负责文件目录的建立,维护和检索,要求编排的目录便于查找,防止冲突,目录的检索方便迅速 。
文件目录项一般应该包括以下内容:
l有关文件存取控制的信息:如文件名,用户名,授权者存取权限:文件类型和文件属性,
如读写文件,执行文件,只读文件等 。
l有关文件结构的信息:文件的逻辑结构,如记录类型,记录个数,记录长度,成组因子数等 。 文件的物理结构,如记录存放相对位置或文件第一块的物理块号,也可指出文件索引的所在位置 。
l有关文件管理的信息:如文件建立日期,文件最近修改日期,访问日期,文件保留期限,
记帐信息等 。
Unix采用了一种比较特殊的目录项建立方法
Unix把目录中的文件和其它管理信息分开,
后者单独组成定长的一个数据结构,称为索引节点 ( i-node) 。 索引号,记为 i-no。
于是,文件目录项中仅剩下 14个字节的文件名和两个字节的 i-no,
一个物理块可存放 32个目录项,系统把由目录项组成的目录文件和普通文件一样对待,均存放在文件存储器中 。
外存索引节点文件存储设备上的每一个文件,都有一个外存文件控制块 (又称外存索引节点 )inode与之对应,
这些 inode被集中放在文件存储设备上的 inode
区。文件控制块 inode对于文件的作用,犹如进程控制块 proc,user对于每个进程的作用,
集中了这个文件的属性及有关信息,找到了
inode,就获得了它所对应的文件的一切必要信息每一个外存的 inode结构使用 32个字节。,
外存索引节点的部分内容,
ldi-mode文件属性,如文件类型,存取权限 。
ldi-nlike连接该索引节点的目录项数 ( 共享数 ) 。
ldi-uid文件主用户标识 。
ldi-gid文件同组用户标识 。
ldi-size文件大小 ( 以字节计数 )
ldi-add[8]存放文件所在物理块号的索引表 。
ldi-atime文件最近被访问的时间 。
ldi-mtime文件最近被修改的时间 。
ldi-ctime文件最近创建的时间 。
UNIX在系统占用的内存区里开辟了一张表 ——内存索引节点 inode表,(又称活动文件控制块表或活动索引节点表 )
该表共有 100个表目,每个表目称为一个内存索引节点 inode,当需要使用某文件的信息,
而在内存 inode表中找不到其相应的 inode时,
就申请一个内存 inode,把外存 inode的内容拷贝到这个内存 inode中,
把文件目录与索引节点分开,不仅加快了目录检索速度,而且,便于实现文件共享,有利于系统的控制和管理 。
6.2.2一级目录结构一级目录结构,在操作系统中构造一张线性表,与每个文件有关的属性占用一个目录项就成了一级目录结构。
目录项 1
目录项 2
……
目录项 N
文件 1
文件 2
文件 N
一级文件目录结构存在若干缺点:
一是重名问题,它要求文件名和文件之间有一一对应关系,但要在多用户的系统中,由于都使用同一文件目录,一旦文件名用重,就会出现混淆而无法实现 ‘ 按名存取 ’ 。如果人为地限制文件名命名规则,对用户来说又极不方便;
二是难于实现文件共享,如果允许不同用户使用不同文件名来共享同一个文件,这在一级目录中是很难实现的
6.2.3二级目录结构在二级目录中,第一级为主文件目录,
它用于管理所有用户文件目录,它的目录项登记了系统接受的用户的名字及该用户文件目录的地址。
第二级为用户文件目录,它为该用户的每个文件保存一登记栏,其内容与一级目录的目录项相同。
二级目录结构示意图目录项 1
目录项 2
……
文件 1
文件 2
目录项 1
目录项 2
……
文件 3
用户 1
用户 2
…… ……
主文件目录用户 1文件目录用户 2文件目录
6.2.4 树形目录结构每一级目录可以是下一级目录的说明,也可以是文件的说明,从而,形成了层次关系 。 多级目录结构通常采用树形结构,它是一棵倒向的有根的树,树根是根目录;从根向下,每一个树枝是一个子目录;而树叶是文件 。
树型多级目录有许多优点;较好地反映现实世界中具有层次关系的数据集合和较确切地反映系统内部文件的分支结构;不同文件可以重名,只要它们不是同一末端的子目录中,易于规定不同层次或子树中文件的不同存取权限便于文件的保护,
保密和共享等 。
路径名在树形目录结构中,一个文件的全名将包括从根目录开始到文件为止,通路上遇到的所有子目录路径 。 各子目录名之间用正斜线 /( 或反斜线 \) 隔开其中,由子目录名组成的部分又称为路径名 。
Unix操作系统的文件系统也采用树形多级目录结构在根目录之下有,dev设备子目录; bin实用程序子目录; lib库文件子目录; etc基本数据和维护实用程序子目录; tmp临时文件子目录; usr
通用目录 。 在 usr下通常包含有一个已安装的文件系统,包括:小型化的 bin,小型化的 tmp、
小型化的文件库文件 lib包括文件 include及各用户的多种文件 。
Unix操作系统自身 vmUnix也在根目录下 。
6.3文件组织与数据存储
6.3.1 文件的存储卷是存储介质的物理单位 。
对于软盘驱动器,光盘驱动器,磁带驱动器和可撤卸硬盘驱动器等设备而言,由于存储介质与存储设备可以分离,所以,物理卷和物理设备不总是一致的,不能混为一谈 。
一个卷上可以保存一个文件 ( 叫单文件卷 ) 或多个文件 ( 叫多文件卷 ),也可以一个文件保存在多个卷上 ( 叫多卷文件 ) 或多个文件保存在多个卷上 ( 叫多卷多文件 ) 。
块是存储介质上连续信息所组成的一个区域,
也叫做物理记录 。
块是主存储器和辅助存储设备进行信息交换的物理单位,每次总是交换一块或整数块信息 。
决定块的大小要考虑到用户使用方式,数据传输效率和存储设备类型等多种因素 。
不同类型的存储介质,块的长短常常各不相同;
对同一类型的存储介质,块的长短也可以不同 。
有些外围设备由于启停机机械动作的要求或识别不同块的特殊需要,两个相邻块之间必须留有间隙 。 间隙是块之间不记录用户代码信息的区域 。
6.3.2文件的逻辑结构
6.3.2.1 流式文件和记录式文件文件的组织是指文件中信息的配置和构造方式,通常应该从文件的逻辑结构和组织及文件的物理结构和组织两方面加以考虑 。
文件的逻辑结构和组织是从用户观点出发,研究用户概念中的抽象的信息组织方式,这是用户能观察到的,可加以处理的数据集合 。 由于数据可独立于物理环境加以构造,所以称为逻辑结构 。 一些相关数据项的集合称作逻辑记录,而相关逻辑记录的集合称作逻辑文件 。
系统提供若干操作以便使用者构造他的文件,这样,用户不必顾及文件信息的逻辑构造,利用文件名和有关操作结构的问题,而只需了解文件信息的逻辑构造,利用文件名和有关操作就能存储,检索和处理文件信息 。 显然,用户对于逻辑文件的兴趣远远大于物理文件 。
文件的逻辑结构分两种形式:一种是流式文件,
另一种是记录式文件 。
流式文件指文件内的数据不再组成记录,只是依次的一串信息集合,也可以看成是只有一个记录的记录式文件 。
这种文件常常按长度来读取所需信息,也可以用插入的特殊字符作为分界 。 事实上,有许多类型的文件并不需要分记录,象用户作业的源程序就是一个顺序字符流,硬要分割源程序文件成若干记录只会带来操作复杂,开销增大的缺点 。 因而,
为了简化系统,大多数现代操作系统对用户仅仅提供流式文件,纪录式文件往往由高级语言或简单的数据库管理系统提供 。
记录式文件内包含若干逻辑记录,逻辑记录是文件中按信息在逻辑上的独立含意划分的一个信息单位,记录在文件中的排列可能有顺序关系,但除此以外,记录与记录之间不存在其它关系 。 在这一点上,文件有别于数据库 。
早期有计算机常常使用卡片输入输出机,一个文件由一迭卡片组成,每张卡片对应于一个逻辑记录,这类文件中的逻辑记录可以依次编号 。 逻辑记录的概念被应用于许多场合,特别象数据库管理系统中已是必不可少的了 。 如,某单位财务管理文件中,每个职工的工资信息是包托姓名,部门,应发工资,扣除工资,奖金和实发工资等若干数据项组成的一个逻辑记录 。 整个单位职工的工资信息,即全部逻辑记录便组成了该单位的工资信息文件 。
设计逻辑文件时,应该考虑到下到诸因素:
l如果文件信息经常要增,删,改,那么,便要求能方便地添加数据项到逻辑记录中,添加逻辑记录到逻辑文件中,否则可能造成重新组织整个文件 。
l 数据项的数据表示法主要取决于数据的用法 。 例如,大多数是数值计算,只有少量作字符处理,则数据项以十进制或二进制数的算术表示为宜 。
l 数据项的数据应有最普遍的使用形式 。 例如,数据项,性别,,
可用 1表示男性,2表示女性 。 在显示性别这一项时,需要把 1转换成男性,2转换成女性 。 如果性别采用西文的 ‘ M’或 ‘ F’或者中文的 ‘ 男 ’ 和 ‘ 女 ’ 分别表示男性和女性时,这种转换是不需要的 。
l 依赖计算机的数据表示法不能被不同的计算机处理,但是字符串数据在两个计算机系统之间作数据交换时,是最容易的数据表示法 。
因而,这类应用尽可能采用字符串数据 。
l 所有高级程序设计语言都不能支持所有的数据表示法 。 例如
FORTRAN使用各个分时应是同类型的向量数组,而 COBOL却可使用不同类型数据项的记录型数据结构 。
6.3.2.2 成组和分解逻辑记录是按信息在逻辑上的独立含义划分的单位,而块是存储介质上连续信息所组成的区域 。 因此,一个逻辑记录被存放到文件存储器的存储介质上时,可能占用一块或多块,也可以一个物理块包含多个逻辑记录 。
如果把文件比作书,逻辑记录比作书中的章节,那么,卷是册而块是页 。
一本名叫,操作系统教程,的书可以是一册 ( 单卷文件 ),
也可以为多册 ( 多卷文件 ),当然,也允许,操作系统教程,及,操作系统习题和实习题,两本或多本书装成一册
( 多文件郑 ) 或多册 ( 多卷多文件 ) 。 书中的一个章节占一页或多页,也允许一页中包含若干章节 。
书和章节相当于文件和逻辑记录,它们是逻辑概念;而册和页相当于卷和块,它们是物理概念,两者不能混淆 。
若干个逻辑记录合并成一组,写入一个块叫记录成组,这时每块中的逻辑记录的个数称块因子 。
成组操作一般先在输出缓冲区内进行,凑满一块后才将缓冲区内的信息写到存储介质上 。
反之,当存储介质上的一个物理记录读进输入缓冲区后,把逻辑记录从块中分离出来的操作叫记录的分解 。
记录成组和分解的处理过程逻辑纪录 1
逻辑纪录 2
逻辑纪录 3
物理纪录逻辑纪录用户缓冲区 系统缓冲区
6.3.2.3 记录格式和记录键记录式文件中的记录可以有不同的记录格式,
提供多种记录格式是考虑到数据处理和各种应用,输入输出传输功效,存储空间利用率和存储设备硬件特点等多种因素 。
为了存储,检索,处理和加工,必须按预先建立的可受的类型和格式把信息提交给操作系统 。
一个逻辑记录中所有数据项长度的总和称该逻辑记录的长度 。
l逻辑记录 ──文件中按信息在逻辑上的独立含义划分的一种信息单位 。 它是可以用一个记录键唯一地标识的相关信息的集合;它被操作系统看作一个作独立处理的单位;应用程序往往分解逻辑记录成若干数据项进行相应处理 。
l物理记录 ──存储介质上连续信息所组成的上个区域,它是主存储器和辅助存储设备进行信息交换的物理单位 。 综合考虑应用程序的需要,存储设备类型等因素由操作设定块长 。
l存储记录 ──指附加了操作系统控制信息的逻辑记录,它被文件管理看作一个独立处理单位 。 存储记录除了包含与逻辑记录相同的内容外,还增加了系统描述和处理记录所需要的信息 。
逻辑记录、存储记录和物理记录之间的关系逻辑纪录 存储纪录 物理纪录用户作业 存取方法 存储设备映射 映射逻辑数据组织 (面向用户 )
物理数据组织 (面向设备 )
记录格式:
l 格式 F:定长记录
l 格式 V:变长记录
l 格式 S:跨块记录记录键为了方便文件的组织和管理,提高文件记录的查找效率,通常,对逻辑文件的每个逻辑记录至少设置一个与之对应的基本数据项,利用它可与同一文件中的其它记录区别开来 。 这个用于标识记录某个逻辑记录的记录键,称为主键,也叫关键字,简称键 。 能唯一地标识某个逻辑记录的记录键,称为主键 。 例如
l 工资信息记录中的职员编号;
l 住房信息记录中的住址;
l 订货信息记录中订货号;
l 银行存款信息记录中的存折号;
单键记录,多键记录主键外的其它键都称作次键。