《操作系统》 6文件管理课件.ppt
第6章 文件管理本章目录本章目录6.1文件系统概述6.1.1文件系统概述6.1.2文件系统的功能6.1.3文件的逻辑结构6.1.4记录的成组与分解6.2文件的目录结构6.2.1目录6.2.2目录的层次结构6.2.3路径名6.3文件在磁盘上的组织6.3.1磁盘存储空间的管理6.3.2文件的物理结构6.3.3文件的存取方式6.3.4“按名存取”的实现6.4文件的使用6.4.1文件的操作6.4.2文件共享6.4.3文件保护6.5Linux的文件管理6.5.1Linux文件系统概述6.5.2Linux的文件类型6.5.3Linux的二次扩展文件系统Ext26.5.4Linux的虚拟文件系统VFS6.1 文件系统概述文件系统概述o6.1.1 文件系统概述文件系统概述文件文件1.域:有时也称“字段”,是指数据中不可再分的基本单元。一个域包含一个值,常通过数据类型和长度两个属性来描述域。.记录:指一组相关域的集合,它是程序进行读/写的单位。记录中的每个域,都有自己的域名,以便使用起来方便。.文件:指一组有相同结构的相关记录的集合,通常存储在磁盘上。文件有自己的名字,用户或应用程序通过名字对它进行访问。对文件的访问在文件一级实施,也就是说允许或拒绝用户或应用程序对整个文件的访问,而不能在记录级或域级实施。.数据库:由一种或多种类型的文件组成,它们涉及到与一个组织或项目相关的所有数据,反映数据元素间存在的关系,以供不同应用程序共享使用。通常,数据库管理系统是独立于操作系统的,有时也可能要用到一些文件管理系统中的程序功能。文件的命名文件的命名2.用户或应用程序是通过文件名实现对文件的访问的。这就是所谓的“按名存取”。.给文件命名的具体规则,各操作系统不尽相同,不过它们大多允许用1到8个英文字母组成的字符串作为合法的文件名。文件命名时,允许使用文件扩展名,文件名和扩展名之间,用圆点隔开。.系统文件:操作系统及其他系统程序构成系统文件范畴。这些文件通常是可执行的目标代码及所访问的数据,用户对它们只能执行,没有读和写的权利。按文件的性质和用途分类3.文件的类型文件的类型.(1)用户文件:指用户在软件开发过程中产生的各种文件,如源程序、目标程序代码和计算结果等。这些文件只能由文件主和被授权者使用。.库文件:常用的标准子程序、实用子程序等组成库文件。库文件中的文件,用户在开发过程中可以直接调用,但只能读取或执行,不能修改。按文件的保护性质分类(2).只读文件:这类文件只允许查看,使用者不能对它们进行修改,也不能运行。.读写文件:这是一种允许查看和修改的文件,但不能运行。.可执行文件:这是一种可以在计算机上运行的文件,以期完成特定的功能。使用者不能对它进行查看和修改。.不保护文件:这是一种不设防的文件,可以任意对它进行使用、查看和修改。按文件的内容分类(3).操作系统把文件的目录项聚集在一起,形成一个文件加以管理。由于这种文件中包含的都是文件的目录项,因此称其为“目录文件”。.特殊文件:为了统一管理和方便使用,操作系统常以文件的观点来看待设备。被视为文件的设备称为设备文件,也称为“特殊文件”。.普通文件:存储在磁盘上的一般文件。返回目录o6.1.2 文件系统的功能文件系统的功能用户或程序通过创建文件、删除文件以及各种执行文件操作的命令,开始与文件系统打交道。用户或程序命令操作和文件名文件操作函数文件记录内存缓冲区磁盘扇区I/O目录管理合法性检查分解访问方法成组空闲区管理.在真正执行这些操作前,文件系统必须先用文件名去查目录,找到所需的文件,文件的目录里,有着该文件的各种属性和存放的位置等信息。.找到文件后,必须对所要求执行的操作进行合法性检查,只有授权的用户才能以允许的方式访问指定的文件,从而保证文件使用的安全。.文件上执行的基本操作,是在记录级进行的。文件记录在磁盘上的存放是有组织的,结构的不同,采用的访问方法也不一样。因此,必须按所提出的访问方法,来转换文件的操作命令。目录管理:为每个文件建立一个目录项,记载该文件的有关信息和属性。根据用户要求,可以创建或删除目录文件,可以对文件进行检索和权限验证。提供文件操作命令:主要的文件操作命令有创建、撤销、读/写、查询、插入/删除记录等。不同系统的文件操作命令,从功能上和数量上都不尽相同。.为减少对磁盘的I/O次数,为提高磁盘存储空间的利用率,通常是把若干记录汇集成组后,存放在磁盘的扇区里;使用某记录时,是把包含那个记录的整个扇区读到内存缓冲区,然后从中提取所需的记录。因此,文件系统需要承担记录成组、分解以及磁盘存储空间管理的功能。.所谓“文件系统”是指操作系统中管理信息资源的一组系统软件、数据结构和文件,它实行文件的存取、检索、更新,提供安全可靠的共享和保护机制,提供操作文件的接口,方便用户“按名存取”。.文件系统应该具有的功能:(1)(2)(3)文件存储空间的管理:对磁盘空间进行统一管理,随时记录整个空间的使用情况,实施对磁盘空间的分配与回收。(4)文件的共享与保护:文件系统应该提供用户使用其他用户文件的方法,也应该防止用户无意或恶意对文件的破坏。返回目录o6.1.3 文件的逻辑结构文件的逻辑结构1.字节序列结构字节序列结构一个字节一个记录(a)(b)(c)生物系化学系物理系动物植物有机无机稀土几何代数方程一班二班三班若文件由一组相关信息的有序字符流组成,那么这样的文件结构称作“字节序列”式的,有时称为“无结构文件”,或“流式文件”。如图(a)所示。.“文本”是典型的字节序列结构。操作系统见到的是字节,不去关心这些字节的内容和关系。2.记录序列结构记录序列结构.若把文件中相关信息的集合划分一个个记录,那么它就是有结构的了。这样,整个文件就由记录1、记录2、记录n组成。称这样的文件的结构是记录序列式的。如图(b)所示。.记录序列式文件结构的最大特点是把记录视为读/写的单位。3.树形结构树形结构.反映各记录间层次关系的文件结构,就是树形结构,如图(c)所示。返回目录o6.1.4 记录的成组与分解记录的成组与分解R1R2R3R4磁道1:扇区间隙及记录适应扇区造成的浪费一个记录R5R6R7R8磁道2:(a)R1R2R5R6磁道1:R3R4R4R6R7R10R12磁道2:R8R9R9R11扇区间隙(b)R1R3R4R5磁道1:R1R6R10R8R5磁道2:R7(c)扇区间隙及记录适应扇区造成的浪费.记录是用户进行读/写的单位,扇区(块)是I/O操作的单位。一般地,扇区尺寸总要比记录大。.为减少磁盘的I/O次数,写操作时应先将记录在一个尺寸与磁盘扇区相同的内存缓冲区里聚集“成组”,然后将它们写入扇区;读操作时先将包含所需记录的扇区读到内存缓冲区,然后进行“分解”,挑出所需的记录,将其移入用户指定的区域。.三种成组形式:(1)固定成组,如图(a)所示;(2)可变长度跨越式成组,如图(b)所示;(3)可变长度非跨越式成组,如图(c)所示。返回目录o6.2.1 目录目录1.文件控制块与目录文件控制块与目录6.2 文件的目录结构文件的目录结构.文件在磁盘中的起始地址文件名记录长度记录个数文件主及存取权限其他用户的存取权限文件建立的日期和时间上次访问的日期和时间为管理文件,操作系统为每个文件开辟一个存储区,里面记录该文件的有关信息,称为“文件控制块(FCB)”:找到文件的FCB,就得到该文件的有关信息,就能对它进行所需的访问。.也把FCB称为“文件描述符”。随系统的不同,FCB中所含内容及大小不尽一样。如图所示为一个FCB的内容样例。文件控制块中的内容.(1)(2)用户为自己的文件起的符号名,它是区分文件的主要标识。不同文件不应该有相同的名字,否则系统无法对它们加以区分。(3)文件在辅存中存放的物理位置。文件的逻辑结构和物理结构:用于完成逻辑结构与物理结构之间的映射。(4)文件的存取控制信息。(5)文件管理信息。把系统中各个文件的文件控制块汇集在一起,就形成了系统的文件目录,每个文件控制块就是一个目录项。.显示目录:列出一个目录中的全部或指定部分的文件有关属性信息,比如文件的类型、访问控制信息、使用信息等。跟踪文件系统:为系统的安全、可靠,有时需要定期对整个文件系统的内容和结构进行备份。这就需要访问每一个目录,以及每个目录下的每个文件,将它们复制到磁带或磁盘上。修改目录:目录中有文件的属性信息,在这些属性发生变化时,就要修改相应的目录项内容。2.与目录相关的操作与目录相关的操作.搜索文件:在用户或应用程序中引用一个文件时,必须搜索目录,以便找到该文件相应的目录项。.创建文件:在创建一个新文件时,必须在目录中增加一个目录项。.删除文件:在删除一个文件时,必须在目录中删除与该文件相应的目录项。.3.索引节点索引节点搜索文件时只用到“文件名”这样一个信息。只有在找到某个目录项里的文件名与所查找的文件名相匹配时,目录项中的其他信息才会成为有用。这就是说,在搜索文件目录时,除了文件名外的其他信息根本无需调入内存。.为了加快对文件目录的搜索过程,为了提高对文件的访问速度,现代操作系统就常采用把FCB中的文件名与其他有关信息分离的办法。把FCB中的文件名与其他信息分离的具体办法:.(1)(3)把FCB中除文件名外的其他信息分离出来,独立成一种数据结构,称为该文件的“索引节点”,简称“i-节点”;文件名i-节点指针文件目录Name1Name2Name3i-节点表磁盘文件的目录项一个i-节点(2)把系统中所有文件的索引节点集中存放在磁盘的i-节点区里,形成“i-节点表”,每个i-节点在i-节点表里的存放顺序,被称为“i-节点指针”;由文件的文件名和相应的i-节点指针组成该文件在文件目录中的目录项。.在使用文件时,仍用文件名去搜索文件目录;找到与其匹配的目录项后,得到该文件的i-节点指针;由i-节点指针就可到磁盘的i-节点表里读出该文件的关键信息。如图给出了文件的目录项、i-节点指针、磁盘上的i-节点表之间的关系。.引入i-节点的概念,一个文件的目录,已经不再是早先所说的目录的含义了,文件的关键信息,其实都在i-节点中,而不是在文件的目录项里。返回目录o6.2.2 目录的层次结构目录的层次结构1.一级目录结构一级目录结构test文件目录文件countwaithelprobitfoodclassgroupdata一个目录项ZONG的文件WANG的文件LING的文件FANG的文件.一级目录结构是最简单形式的目录结构,它使用一个目录来包含系统中的所有文件。这个目录有时称为“根目录”。新建文件时,在文件目录中增加一个文件控制块(目录项),把该文件的有关信息填入FCB中,这样系统就可感知这个文件的存在;删除一个文件时,就从目录中删去该文件的FCB。.一级目录的缺点若系统中的文件很多,文件目录就会很大,按文件名去查找一个文件的FCB,平均需要搜索半个目录文件长,会耗费很多时间。(1)(2)文件不能重名,即便是不同的用户,也不能给他们的文件起相同的名字,否则就有可能找错所需要的文件。2.二级目录结构二级目录结构.在二级目录结构下,每个用户拥有自己的目录,缩小了查找一个文件的范围,时间大大减少。在这样的结构下,不同的用户可以给文件取相同的名字,文件重名已经不再成为问题。如图所示,二级目录结构由“主目录”与“用户目录”两级构成。在主目录(即根目录)中,每个目录项的内容只是给出文件主名以及他的目录所在的磁盘地址。在用户目录中,才是由文件的FCB组成的目录。这里的用户目录,实际上就是一级目录。CCCCCCCCCBBBBBAA/用户C的目录用户C的子目录C根目录:testcountwaithelprobitfoodclassgroupdataZONG的目录WANG的目录LING的目录FANG的目录ZONGWANGLINGFANG用户目录:主目录(根目录):.3.层次目录结构层次目录结构.目录的层次结构,允许用户在自己的目录下,创建多层子目录(即在子目录里还能创建更下一层的子目录),为管理文件提供了有力的支持。.如图所示,用户C的子目录有三层之多(注意,在图中,只是用字母表示文件或目录的所有者,没有给它们分别取名字)。在这一棵形如倒置的树中,第1层为根目录,第2层为用户目录,再往下是用户的子目录。另外,每层目录中,既可以有子目录的目录项,也可以有具体文件的目录项。利用这种目录结构,用户可以按照需要,组织起自己的目录层次,既灵活,又方便。返回目录文件的绝对路径名一定从根目录出发。文件的绝对路径名是唯一的,其中每一个名字之间用一个分隔符分开。UNIX采用树型目录结构,如图所示是它的一个局部示例。o6.2.3 路径名路径名1.绝对路径名绝对路径名由根目录出发到具体某个文件所经过路径中的名字组成的序列,称为该文件的“绝对路径名”。2.相对路径名相对路径名.用户指定一个目录作为当前的工作目录。这时,不是从根目录开始的路径名,都被认为是相对于这个工作目录的。.一个文件的相对路径名与当前所处的位置有关,因此不是唯一的。例例6-2:/usrucbtelnetmanbintroffspelllocallibbindevtroffspellbinspelluserjlpavi.UNIX中文件的绝对路径名由斜杠“/”开头,随后是路径中所经过的所有目录名,中间用斜杠分隔。.若现在的工作目录是usr,那么/usr/ucb/telnet和ucb/telnet表示同一个文件。返回目录6.3 文件在磁盘上的组织文件在磁盘上的组织o6.3.1 磁盘存储空间的管理磁盘存储空间的管理位示图位示图1.由于磁盘的扇区大小相同,个数固定,因此可用位示图来管理磁盘的存储空间。.具体做法:为所管理的磁盘设置一张位示图,大小由磁盘的总块数(如一个扇区为一块)决定。某位状态为“1”,表示所对应块已使用;状态为“0”,表示所对应的块空闲。0/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10/10位1位2位3位30位 31位第0字第1字第99字1个柱面申请磁盘空间时,有“已知字号、位号,计算对应块号(即柱面号、磁头号、扇区号)”的问题。文件被删除时,有一个“已知柱面号、磁头号和扇区号,计算对应字号和位号”的问题。.空闲区表空闲区表2.用空闲区表来管理文件存储空间,就是系统设置一张表格,每一个表项记录磁盘空间中的一个连续空闲盘区的信息,比如该空闲盘区的起始空闲块号、连续的空闲块个数、以及表项的状态等。这样的一张表被称为“空闲区表”。.创建一个新文件时,根据文件的长度查找该表。从状态为“有效”的表项中找到有合适的尺寸时,就可以进行分配。一磁盘有200个柱面,每个柱面20个磁道,每个盘面分成16个扇区。为管理其存储空间,用位示图与空闲区表两种方法作比较。设分配以扇区为单位,字长32个二进制位,空闲区表的一个表项恰好一个字长。问在空闲区表大于位示图之前,该磁盘里应该有多少空闲扇区出现?例例6-3:解解:依题意,该磁盘共有扇区数为:2020016=64000(块)。采用位示图管理该磁盘空间时,因一个字长是32位,所以整个位示图需要占用的字数为:64000/32=2000(字)。由于空闲区表中的每个表目需用一个字长表示,在有2000个磁盘空闲区时,空闲区表所需的存储量与位示图需占用的字数相当。故在空闲区表大于位示图之前,系统应该出现2000个空闲扇区。空闲块链空闲块链3.所谓空闲块链,即磁盘的每个空闲块设置一个指针,指向另一个磁盘空闲块,所有的空闲块形成一个链表,即磁盘的“空闲块链”。系统为此要增一个空闲块链首指针,链表最后一个空闲块中的指针应表明为结束,比如记为“1”。.若申请存储块,就根据链首指针从链首一块一块地摘下分配;若释放存储块,就把释放的块从链首插入。.用这种方法管理磁盘的存储空间,增加了对磁盘的I/O操作,对系统效率的发挥会产生不良的影响。成组链接成组链接4.所谓“成组链接”即系统根据磁盘的总块数,开辟若干块用来专门登记系统当前拥有的空闲块的块号(指针),每块里包含尽可能多的空闲块号。称这种存放空闲块块号的块为“指针块”,各指针块间用指针链接。.比如,对于1KB大小的磁盘块和16位的磁盘块号,每个块里可以包含511个空闲块的块号,剩下的位置用来存放指向下一块的指针。如果整个磁盘空间为20MB,那么最多需要40个指针块(编号为039)来存放全部磁盘块的块号。在这些块的每一块里,一方面最多登记511个空闲块的块号,另一方面有一个指针指向下一个块。171819块16块17块18块0块39511个空闲块块号1362109742162612342214483202304186180422242516140空闲块号块指针.如图所示,系统运行一段时间后,用于记录空闲块块号的40个指针块里的块16、17、18所记录的空闲块情形。.用成组链接法管理磁盘空闲块时,只需读入一个指针块。创建文件时,从该指针块里得到。当里面的空闲块分配完时,再从磁盘读入一个新的指针块进行分配。类似地,删除某文件时,其占用的磁盘块被释放,并将它的块号添加到位于内存的指针块中。在这块被填满时,就把它写入磁盘。返回目录o6.3.2 文件的物理结构文件的物理结构1.顺序结构:顺序文件顺序结构:顺序文件文件存储到磁盘上的最简单方法,就是把它存储到一连串连续的存储块中,即顺序分配磁盘上的存储块。该文件的物理结构是顺序式的,这样的文件为顺序文件或连续文件。0612734569234501101112131415扇区号:01230123磁道号8(b)0123456文件:MYFILE(a)MYFILE的FCB起始块号(6)所占块数(4)(c).比如,用户ZONG有名为MYFILE的文件,逻辑结构是记录序列的,共有7个记录(06),每个记录长为500B,如图(a)所示。.物理结构如图(b)所示。每块左上角的小方框里标示的是块的顺序编号,即相对块号。.在文件MYFILE的FCB中,要有记录文件起始块号和文件所需总块数两个信息,如图(c)所示。2.链式结构:串联文件链式结构:串联文件.061234562345017111213815扇区号:01230123磁道号1091410914-16首块指针寄存器MYFILE的FCB起始块号(6)(a)(b)若逻辑上连续的文件存放到磁盘的不连续存储块中,每块有个指针,指向与它链接的下一块所在位置,最后一块的指针为“1”,表示文件的结束。这时逻辑文件信息的连续性通过这些离散块中的指针体现出来,这种文件的物理结构称为链式结构,或串联文件。.这时,MYFILE的物理结构如图(a)所示,系统要设一个存放文件首块指针的寄存器。.文件的首块指针信息存放在其FCB中,如图(b)所示。这个由第6、10、9、14组成的文件,就是文件MYFILE的物理结构,即链式结构。.为实现它,每个分配出去的存储块里都必须设置指针,占去了块中的一些字节。结果是每个磁盘块存储数据的字节数不再是2的整数次幂,这与许多程序都以长度为2的整数次幂读/写磁盘块相悖。3.链式结构的变种链式结构的变种文件分配表文件分配表4721012631114存储块号:存储块号:文件A:文件B:(a)1001211345736728129101411-11213-11415(b)文件分配表FAT文件A起始处文件B起始处空闲块文件A结束处文件B结束处.为克服纯链式结构的问题,在内存里按磁盘块的数目开辟一个表,把原先安排在存储块里的指针抽取出来,把它存放在这张表的相应表项里。.比如图(a)所示,分给文件A的存储块为4、7、2、10、12,分给文件B的存储块为6、3、11、14。整个磁盘有16个存储块。.文件分配表这种做法的主要缺点是要把整个表都存放在内存。建立一张表,以存储块号0到15为索引。对于文件A,在第4个表项里填写7,在第7表项里填写2,第2表项里填写10,第10表项里填写12,第12表项里填写“-1”。这样,从第4表项开始顺着记录在该表里的链,就可找到分给文件A的所有存储块。该表称为文件分配表(FAT),如图(b)所示。.4.索引结构:索引文件索引结构:索引文件061234562345017111213815扇区号:01230123磁道号069索引号10MYFILE索引表14MYFILE的FCB索引表起址(a)(b)11029314块号(c).若把逻辑上连续的用户文件存放到磁盘不连续的物理块中,且为每个文件建立一张索引表,依次登记文件记录成组后存放的物理块号,那么,此时文件记录的连续性将通过索引表中记录的存储块号反映出来,称这种文件具有索引结构,或是索引文件。.仍以文件MYFILE为例,在磁盘上的存放如图(a)所示。.假定它存放在第6、10、9和14块中。索引结构时,其索引表如图(b)所示。.在索引结构时,文件FCB中应该登记上它的索引表的起始地址,如图(c)所示。文件的索引结构是对链式结构的又一种改进,它既克服了链式结构的缺点,也克服了FAT存在的问题。.返回目录6.3.3 文件的存取方式文件的存取方式1.顺序存取顺序存取所谓“顺序存取”,即是按照文件记录的排列次序一个接一个地存取。比如,当前读取的是第i个记录,那么下一次要读取的肯定是第i+1个记录。.对于定长记录的顺序文件,只要知道了当前记录的位置,加上记录的长度,就很容易确定下一个要存取的记录的位置。对于变长记录的顺序文件,每个记录里除了存放数据外,还要有存放记录的长度。这样,用当前记录的起始位置加上记录的长度,就能够得到下一个记录的起始位置。.文件在磁带机上,只能采用顺序结构存放,因此也就只能采用顺序存取的方式对文件内容进行访问。.2.随机存取随机存取.随机存取有时也称直接存取,即可以任何次序存取文件中的记录,无须先涉及它前面的记录。.磁带机上的文件不适宜采用随机存取的方式进行访问。磁盘上的文件,如果该文件使用的是链式结构,那么也不适宜采用随机存取的方式进行访问。存储设备、存储结构及存取方式三者间的关系.存取方式存储设备存储设备顺序,随机顺序结构链接结构顺序索引结构顺序,随机顺序结构顺序磁盘磁带返回目录o6.3.4 “按名存取按名存取”的实现的实现.用户是通过文件名来访问文件。操作系统在收到文件名之后,通过查目录得到有关文件的信息。然后要做一系列的转换,得到所需要的记录。例例6-4:以文件MYFILE为例,7个记录(06)连续存放在相对块号为6、7、8、9的扇区内,如图(a)所示,它的FCB内容如图(b)所示。现要把MYFILE的记录3(在扇区7的后半部分)读入内存,存放到数组A500:A0,A1,A499中。记录31273相对块号56245011011121314150120123磁道号40896MYFILE的起址逻辑字节地址块内相对字节地址扇区号:3文件中辅存位置:6(相对起始块号)文件名:MYFILE文件物理结构:连续存放文件长度:7(逻辑记录个数)逻辑记录尺寸:500B文件性质:暂存文件主:ZONG使用者:ZONG存取控制:只读(a)(b)把记录号3转换成相应的“逻辑字节地址”,计算方法是:逻辑字节地址=逻辑记录号逻辑记录长度=3500=1500这样,命令(b)被转换成:READ(FCB,1500,A)(c).在程序中发出读命令如下:READ(MYFILE,3,A)(a)即通过文件名来对文件进行存取,且只与他的逻辑文件信息打交道,完全不去过问该文件的物理信息。.文件系统接到命令后,通过文件名MYFILE,去查文件目录。找到文件MYFILE的FCB,系统把命令(a)修改成为:READ(FCB,3,A)(b)即用文件的FCB去取代文件名。.命令验证合格后,系统要把对文件的读/写请求从逻辑结构映射到物理结构上。这种转换不可能一步到位,需要经过如下的三个步骤:(1)(2)把逻辑字节地址转换成“相对块号”和“块内相对字节地址”。计算方法是:相对块号=(逻辑字节地址/物理块尺寸)+相对起始块号=(1500/1000)+6=7块内相对字节地址=逻辑字节地址%物理块尺寸=1500%1000=500。这样,命令(c)被转换成:READ(FCB,7,500,A)(d)(3)把相对块号转换成物理地址:道号和块号。计算方法是:道号=相对块号/每道块数=7/4=1;块号=相对块号%每道块数=7%4=3这样,命令(d)转换成:READ(FCB,1,3,500,A)(e)返回目录打开文件:目的是把文件的FCB复制到内存。这些在内存的FCB集中成为“打开文件表(OFT)”,或“活动目录表”。每个被打开文件的FCB,在OFT的顺序号,就是该文件的FCB的索引,通过它可直接从OFT里得到该文件的FCB。open命令后向用户返回OFT的索引。此后,就可通过该索引基于OFT进行对文件的I/O,无需文件名了。建立文件6.4 文件的使用文件的使用o6.4.1 文件的操作文件的操作1.基本的文件操作命令基本的文件操作命令.为能让用户方便灵活地使用和控制文件,文件系统必须提供针对文件的多种操作命令,它们都是以系统调用命令的形式提交给用户使用的。.基本的文件操作命令(1)(2)(5)删除文件关闭文件:功能是去除OFT中该文件的有关表项,切断用户与该文件的联系。文件被关闭后,如果要再次使用,那么使用前仍需要重新打开。(6)(3)(4)读文件写文件2.其他文件操作命令其他文件操作命令添加(1)(2)定位设置文件属性拷贝(4)(5)更改文件名(3)返回目录o6.4.2 文件共享文件共享1.基于索引节点的共享方式基于索引节点的共享方式.所谓文件的“共享”,是指一个文件可被多个授权的用户共同使用,也就是不同的用户使用同一个文件。Zong的文件目录Jiang的文件目录文件test的索引节点计数器count=2test磁盘地址sporttest文件test文件主:Zong引入i-节点后,文件目录里只含有文件名和i-节点指针,文件的其他有关信息都在i-节点中。这种将原始文件目录的分离结构,有利于实现文件共享。.如图所示,用户Zong有文件test。现在Jiang要共享它。为此在他的目录里开辟一个目录项,起名sport,并让i-节点指针指向文件test的i-节点。这样,Jiang以文件名sport访问文件时,就是对用户Zong的文件test实行访问,从而达到了共享的目的。.这种让一个用户文件出现在另一个用户目录下的做法,称为在这两个文件之间建立了一个“链接”。.通过i-节点把用户链接到共享文件时,并没有改变文件的从属关系。为了知道当前有多少个用户在共享使用该文件,在i-节点里应该有一个计数器count。Zong的目录Zong的目录 Jiang的目录文件主:Zongcount=1testi-节点test文件主:Zongcount=2i-节点testtestsport(a)(b)Jiang的目录文件主:Zongcount=1i-节点testsport(c)Zong的目录.这样实现文件共享的方法,在文件主Zong要删除文件test时会出现一些问题。.如果系统既删除文件test也删除相应的i-节点,那在共享该文件的用户Jiang的目录里,就会遗留名为sport的目录项,它指向一个无效的i-节点。若以后该i-节点分配给另一个文件使用,那么位于Jiang中的链接就指向了一个错误(也就是他不想访问)的文件。.为此,在文件主要删除一个文件、而文件i-节点的计数器count大于1时,就只在文件主的目录里删除该文件的目录项,而不去删除文件和它的i-节点。比如,图(a)表示没有共享时的情形。.图(b)表示两个用户共享文件test时的情形。.图(c)表示系统只删除Zong的文件test目录项后的情形。.这样的处理也有问题。因为文件test的i-节点里记录的文件主仍然是Zong。2.利用符号链接实现文件共享利用符号链接实现文件共享.所谓利用“符号链接”实现文件共享,即系统定义一种新的、名为LINK的文件类型,这种类型的文件里只包含某个文件的路径名。当某用户需要共享一个文件时,系统就为其创建一个LINK型的链接文件,该用户目录里就有了这个链接文件的目录项,文件里面是所要共享的文件的路径名。.这样,在用户请求访问链接文件时,操作系统发现它是LINK型文件,就从它的里面得到所链接的文件的路径名,达到根据该路径名去访问文件的目的。.用这种方法实现文件共享,不会出现基于索引节点共享文件时的问题。这时,只有文件主的文件目录里才有指向文件i-节点的指针,共享该文件的用户只有里面包含共享文件路径名的链接文件,没有指向文件i-节点的指针。.要删除共享文件时,就可以把文件及其i-节点全部销毁。共享该文件的用户以后访问这个文件时,最多只会因为找不到文件而导致访问失败。.符号链接的缺点是用户访问符号链接的共享文件时,系统必须按照给定的文件路径名,逐层地查找目录,并可能需要通过多次读盘操作才能够找到该文件的i-节点,因此增加了系统的额外开销。返回目录o6.4.2 文件保护文件保护存取控制矩阵存取控制矩阵1.所谓“存取控制矩阵”,即是整个系统维持一个二维表,一维列出系统中的所有文件名,一维列出系统中所有的用户名,在二维表的行、列交汇处,给出用户对各文件的存取权限。如图所示。.文件系统收到来自用户对某个文件的操作请求后,根据用户名和文件名,查存取控制矩阵,用以检验命令的合法性。如果所发的命令与矩阵中的限定不符,则表示命令出错,转而进行出错处理。.如果系统中的用户数和文件数都很大,那么该矩阵里的空元素会非常多,成为一个稀疏矩阵。保存这样一个大而空的矩阵,实在是对磁盘存储空间的极大浪费。存取控制表存取控制表2.文件1文件主:用户B同组用户:用户A,用户C其他用户:用户DRWER.其实,一个文件通常只与少数几个用户有关。因此,可按用户对某文件的存取权限,将系统中的用户划分成若干组,并规定每组用户对该文件的存取权限,所有用户组对该文件的存取权限的集合,被称为是该文件的“存取控制表”。.存取控制表以文件为单位构成,每个文件一张,可把它存放在该文件的FCB中。用户权限表用户权限表3.一个用户通常只与少数几个文件交往。因此,可把某个用户对系统中各文件的存取权限集中在一起,形成该用户对所有文件的“用户权限表”。用户A文件名权限文件1文件2文件3文件4文件5RRWERRW.用户权限表是以用户为单位构成的,它记述了一个用户对系统中每个文件的存取权限。当用户提出对某个文件的访问请求时,系统就通过查找相应的权限表,判断所提出的访问的合法性。.口令口令4.口令则是一种验证手段,是最广泛采用的一种认证形式。当用户发出对某个文件的使用请求后,系统会要求他给出口令。.用户要在键盘上键入口令,否则无法使用它。当然,用户键入时,口令是不会在屏幕上显示的,以防止旁人窥视。只有输入的口令核对无误,用户才能使用指定的文件。.采用口令的方式保护文件,容易理解,也容易实现。但口令常被放在文件的FCB里,所以常被内行人破译,以致达不到保护的效果。另外,口令也容易遗忘、记错,给文件的使用带来不必要的麻烦。返回目录6.5 Linux的文件管理的文件管理o6.5.1 Linux文件系统概述文件系统概述Linux文件系统的构成文件系统的构成1.Linux的虚拟文件系统:VFSVFS提供的系统调用界面用户空间系统空间用户程序(进程)MinixExt2WSDOSLinux最初借用的是一个叫Minix的操作系统中的文件系统。Minix只是一个用于教学的操作系统,因此在设计和功能上都存在着很多的不足。.1992年,出现了专门为Linux设计的文件系统,即Ext,称为“扩展文件系统”。.所谓虚拟文件系统,即基于多个不同操作系统中的文件系统部分,通过软件方法,隐去它们各自的实现细节,抽象出一组标准的有关文件操作的系统调用。把这样的系统调用提供给用户后,他们就可以使用统一的界面,去完成对各种不同文件系统中文件的操作了。.有了虚拟文件系统后,Linux就可支持多种不同的文件系统。这时的文件系统,可看作由两级构成:上面是用户面对的虚拟文件系统VFS,内核是各个不同的文件系统。Linux的树形目录结构的树形目录结构2.Linux文件系统采用树形目录结构管理系统中的文件,无论操作系统管理多少磁盘分区,其文件系统只有一棵目录树,即只有一个根目录,其他磁盘分区上的文件系统,可通过“安装”命令挂载到目录树的一个子目录上,成为一个整体。/bindevhomeetclibusr/sbinetclib/abclisftp/bindevhomeetclibusrsbinetclibabclisftp(a)(b)(c)(d).如图所示,(a)(c)是三个独立的文件系统。现在,把图(b)和图(c)的两个文件系统挂载到图(a)的子目录home和usr下,整个目录如图(d)所示。也可以通过发“卸载”命令,将一个磁盘分区上的文件系统移除。.为了管理文件,Linux把文件名和文件控制信息分成索引节点和目录两部分。这样,由文件名查文件目录,就可以得到该文件对应的索引节点的编号,从而得到该文件的索引节点,进而得到文件的所有信息。Linux文件的访问权限文件的访问权限3.Linux的每个文件有一个文件主,一般都归属于某一个用户组。因此Linux对文件的访问设定了三种用户访问:文件主(u)、与文件主同组的用户(g)以及其他用户(o),每一种的文件权限都分为:读(R)、写(W)、执行(X)。这样,对文件的访问就有如图所示的9种可能的组合情形。.文件主(u)同组用户(g)其他用户(o)读R写W执行X读R写W执行X读R写W执行X.这9种可能的情形,形成了一种保证文件安全的文件保护机制。在需要访问某文件时,系统就要检验访问者的权限,只有当访问者持有与文件访问权限相符的权限时,文件才能得到访问,否则访问会被拒绝。.比如发命令:ls-l/etc,表示以列表形式(“-l”)列出etc目录下的所有文件目录。显示结果中可能会有如下这样的一行:-rw-r-r-1rootroot864Feb2520:04sobser.tgz第一个字符“-”表示名为sobser.tgz的文件是普通文件,用来区分文件的类型。随后的9个字符以三个字符为一组,表示各种用户对它的访问权限。这里,文件主对它的访问权限是“rw-”,即可读可写,但不能执行;同组和其他用户对它的访问权限都是“r-”,即只能读。.Linux用户除了对文件可以有一般访问权限外,还可以有特殊权限。返回目录o6.5.2 Linux的文件类型的文件类型普通文件普通文件1.Linux中的文件名最多可以有256个字符,区分英文的大小写,没有盘符的概念,只有目录,不同磁盘的分区被挂载在不同的目录下。.Linux的文件没有扩展名。是通常意义下的文本文件和二进制文件。如果用“ls”命令查看某文件属性时,列出的第1个符号是“-”,紧接着是类似“rwxrw-r-”的属性符号,那么它就是一个普通文件。目录文件目录文件2.Linux文件系统中,每个文件的目录只含文件名和该文件的索引节点号。这些目录构成一张表,是Linux的目录文件。设备文件设备文件3.Linux把系统中的块设备和字符设备视为文件,存放在/dev目录下。用“ls”命令查/dev下的某文件属性时,若列出的第1个符号是“b”,紧接着是类似“rw-r-”的属性符号,那么它就是块设备文件;若列出的第1个符号是“c”,紧接着是类似“rw-w-”的属性符号,那么它就是字符设备文件。链接文件链接文件4.Linux既提供基于索引节点的文件共享方式,也提供利用符号链接的文件共享方式。前者称为“硬链接”,后者称为“软链接”。若用“ls”命令查看某个文件属性时,列出的第1个符号是“l”,紧接着是类似于“rwxrw-rw-”的属性符号,那么它就是一个链接文件。管道文件管道文件5.Linux的管道文件是一种特殊的文件,用于在不同进程间进行大量的信息传递。利用管道文件,一个进程将需要传输的数据或信息写入管道的一端,另一个进程则从管道的另一端获得所需的数据或信息。如图所示。它实际上是在两个进程间提供文件共享的一种形式。若用“ls”命令查看某文件属性时,列出的第1个符号是“p”,接着是类似“rw-