湖 北 工 学 院 电 计 系
第九章 文件系统
第九章 文件系统 9.1 文件系统的概念 9.1.1 引言
9.1 文件系统的概念 9.1.2 文件 一、文件定义 1、文件是具有符号名的信息(数据)项的 集合。 2、文件是具有符号名的记录的集合。
9.1 文件系统的概念 9.1.2 文件 二、文件名 根据文件的定义,每个文件必须有一个唯一的文件名, 不论是系统管理,还是用户使用文件都使用文件名。 文件名是一个有限长度的字符串。 DOS、WINDOWS系统中文件名: 文件名 · [文件扩展名] 文件名是一个不大于8个字符的字符串,但WINDOWS系 统中允许超长文件名,最多可有256个字符,不区分英文 字母的大小写。
9.1 文件系统的概念 9.1.2 文件 文件扩展名: 不大于3个字符,一般用来表示文件的类型。 例如: C C语言源程序文件 COM 可执行文件(小模式) EXE 可执行文件(大模式) BAT 批处理文件 OBJ 目标文件 hust.txt ll.c ll.obj ll.com ll.exe 操作系统教学片91.ppt
文件名是一个不大于14个字符的字符串。并且区分英文 字母的大小写。 9.1 文件系统的概念 9.1.2 文件 UNIX系统中的文件名: 文件名是一个不大于14个字符的字符串。并且区分英文 字母的大小写。 例如:unix linux ll.c a .out aa AA 注意:在UNIX系统中文件名就是一个字符串,没有文件名和文件扩 展名之分,文件的类型由用户命名时确定。 例如,li.c,UNIX系统认为这个文件名的长度是4个字符。 而在DOS、WINDOWS系统中则解释这个文件名,li是文件名,c是 文件扩展名,表示该文件是一个C语言的源程序文件,而·是文件名 和文件扩展名的分隔符。
9.1 文件系统的概念 9.1.2 文件 三。文件的分类 教材讲了三种文件分类的方法,下面介绍UNIX系统文件 分类方法: 1、普通文件 普通文件是无结构的字符的集合。 2、目录文件 目录文件是由文件的目录项组成的文件。 3、特别文件 特别文件就是设备。
9.1 文件系统的概念 9.1.2 文件 四、文件的属性 文件属性反映文件的类型、存取控制、等 UNIX系统中文件属性: - 普通文件 d 目录文件 p 管道文件 c 字符型设备文件 b 块设备文件
9.1.3 文件系统 9.1.3 文件系统 文件系统是操作系统中负责管理和存取文件信息的软件 机构,它是由管理文件所需的数据结构和相应的管理软 件以及访问文件的一组操作组成。 从系统的角度看:文件系统是一个负责文件存储空间管 理的机构。 从用户的角度看:文件系统是用户在计算机上存储信息 、和使用信息的接口。
9.1.3 文件系统 通用文件系统应具有以下功能: 1、提供用户对文件操作的命令; 2、提供用户共享文件的机制; 3、管理文件的存储介质; 4、提供文件的存取控制的机制,保障文件及文件系统的 安全性; 5、提供文件及文件系统的备份和恢复功能; 6、提供对文件的加密和解密功能。
9.2 文件的逻辑组织与存取方法 9.2.1 文件的组织 可以用两种不同的观点去进行研究文件结构 用户观点: 是研究用户“思维”中的抽象文件,或称逻辑文件,其研 究的侧重点在于为用户提供一种逻辑结构清晰、使用简 便的逻辑文件形式。用户将按照这种形式去存储、检索 和加工有关文件中的信息。 实现观点: 是研究驻留在设备“介质”中的实际文件,或称物理文件 。它研究的侧重点是选择一些工作性能良好、设备利用 率高的物理文件形式。系统将按照这种形式同外部设备 打交道并控制信息的传输
9.2 文件的逻辑组织与存取方法 9.2.1 文件的组织 文件的组织有两种: 文件的逻辑结构: 文件的逻辑结构是指用户思维中文件的结构。 文件的物理结构: 文件的物理结构是指文件在存储介质上的结构(或称组 织)。在当代,文件的存储介质是磁盘,包括软盘、硬 盘和光盘、磁带,早期还有磁鼓。由于目前的磁带是模 拟磁盘的结构,所以文件的物理结构主要是指磁盘上文 件的结构。
9.2.2 文件的逻辑结构和存取方法 一、文件的逻辑结构 文件的逻辑结构: 结构文件--记录式文件。 无结构文件--流式文件 1、流式文件 无结构的流式文件是相关的有序字符的集合。文件的长 度为所含字符数。 UNIX、DOS、WINDOWS系统中的普通文件都是流式文 件。
9.2.2 文件的逻辑结构和存取方法 2、记录式文件 记录式文件是一种结构式文件,文件是记录的集合. 每个记录由彼此相关的域构成。记录可按顺序编号为记录1,记录2,…,记录n。如果文件中所有记录的长度都相同,则这种文件为定长记录文件。 定长记录文件的长度 = 记录个数x记录长度。 变长记录文件的长度为各记录长度之和。 例如:学生登记表文件 xsdjb.dbf 姓名 学号 籍贯 通信地址 邮政编码 李铭 925678 武昌 武昌关山街125号 430074 司马乐 925679 北京 北京海军路88号 100034
3、两种文件的比较 9.2.2 文件的逻辑结构和存取方法 流式文件就象给一张白纸给用户,用户可将他的信息任 意地写到纸上,没有任何格式上的限制。 记录式文件就象给一张表格给用户,用户要按表规定的 格式填信息。 显然,结构式文件对用户的限制很大,使用起来就不方 便,所以记录式文件被淘汰是理所当然的。
9.2.2 文件的逻辑结构和存取方法 二、存取方法 顺序存取: 后一次存取总是在前次存取的基础上进行的。每次存取 不必给出存取开始的位置。 随机存取: 每次存取操作都要指定存取操作的开始位置。在系统中 提供文件存取操作有: n = read(fd,buffer,size); m = write(fd,buffer,size); 这两个操作总是从当前位置开始读(或写),执行顺序 存取操作。
9.2.2 文件的逻辑结构和存取方法 leek(fd,offset,mode) 调整文件的读写起始位置的系统调用,若在read、write之 前执行leek操作,就调整了文件的读写指针(读写开始的 位置),实现了随机存取。
9.3 文件的物理结构 一个文件存储介质,格式化后就分成许多大小相等的单 位--存储块(物理盘块),在现代计算机系统中,一 般来说,每个物理块是一个磁盘的扇区,512字节。并给 每个存储块有个编号,称为物理块号。 文件的物理结构指文件在存储介质上质结构,目前有三 种基本结构,即连续文件结构、串联文件结构和索引文 件结构。
9.3 文件的物理结构
9.3 文件的物理结构 9.3.1 连续文件
9.3 文件的物理结构 9.3.1 连续文件 评价: 优点:结构简单,实现容易,不需要额外的开销。 缺点:用户创建文件时要给出文件的大小; 9.3 文件的物理结构 9.3.1 连续文件 评价: 优点:结构简单,实现容易,不需要额外的开销。 缺点:用户创建文件时要给出文件的大小; 不利于文件的动态增加和修改; 连续文件是一种连续结构的文件,对每个文件 要求存放在存储介质上的连续的物理块中,存 储空间利用率不高。类似于存储管理中的分区 适用于变化不大的顺序访问的文件,在流行的UNIX系统 中仍保留了连续文件结构。
9.3.2 串联文件 一个串联文件结构是按顺序由串联的块组成的,即文件 的信息按存储介质的物理特性存于若干块中。 每个物理块的最末一个字(或第一个字)作为链接字,它 指出后继块的物理地址。链首指针存放在该文件目录中 。文件的结尾块的指针为“∧”。 这种文件结构不要求连续存放。 对于记录式文件一块中可包含一个逻辑记录或多个逻辑 记录,也可以若干物理块包含一个逻辑记录。
9.3.2 串联文件
4.顺序存取效率高,随机存取效率太低,如果访问文件的 最后的内容,实际上是要访问整个文件。 9.3.2 串联文件 评价: 1.存储空间利用率高; 2.文件创建时用户不必指出文件的大小; 3.文件动态扩充和修改容易。 4.顺序存取效率高,随机存取效率太低,如果访问文件的 最后的内容,实际上是要访问整个文件。 类似于存储管理中的页式
9.3.3 文件照映 为了克服链接文件的存取效率太低的问题,人们提出文件映照的技术,即把链接文件中的链接字集中在一结构中,这样既保持了链接文件的优点,也克服了其缺点,DOS、WINDOWS系统就采用了这样结构。
9.3.3 文件照映 FAT:文件分配表,磁盘格式化 后建立,从磁盘的第二个开始, 有两个相同的FAT。 磁盘的类型 : FDF,双面,FCH,单面(9扇 区/磁道) F8H,硬盘 000H:空闲簇 FFFH:文件的结尾簇 XXXH:文件的下一簇
9.3.4 随机文件 随机文件结构是另一种形式的非连续文件,文件数据存 放的存储介质上的物理块号与文件的逻辑块号一一对应 ,并建立这样对应关系的数据结构--文件索引表。 访问文件时,根据文件的逻辑块号查文件索引表,找到 对应的物理块号,然后,进行访问。 随机文件有三种形式的结构:直接地址结构、索引结构 、计算寻址结构。 索引结构是当代计算机操作系统中普遍采用的结构,如 UNIX系统、LINUX系统。
9.3.4 随机文件 索引文件结构 这种文件结构的数据结构是文件的索引表,每个文件有一个索引表,表中每个表目包括:逻辑块号,物理块号。 索引表位置:文件目录中,文件的开头等。 索引表大小:固定大小,非固定大小。
9.3.4 随机文件 UNIX系统采用索引文件结构,UNIX系统采用多级间接索引结构,对小型文件采用直接索引,对大型文件采用间接索引,从而,既保证绝大多数的文件有高的存取效率,又能适应存取一些大型文件。(既保证了文件系统的高效率,又使其有很宽的适应面)。
9.3.5 文件物理结构的比较 连续文件的优点是不需要额外的空间开销,只要在文件目录中指出文件的大小和首块的块号即可,对顺序的访问效率很高。适应于顺序存取。缺点是动态地增长和缩小系统开销很大;文件创建时要求用户提供文件的大小;存储空间浪费较大。 串联文件克服了连续文件的不足之处,但文件的随机访问系统开销较大。适应于顺序访问的文件。DOS系统中改造了串联文件的结构,使其克服了串联文件的不足,但增加了系统的危险性。
9.3.5 文件物理结构的比较 索引文件既适应于顺序存访问,也适应于随机访问,是一种比较 好的文件物理结构,但要有用于索引表的空间开销和文件索引的时间开销。UNIX系统是使用索引结构成功的例子。 在当前流行的一些UNIX操作系统的版本中,同时支持连续文件结构和索引文件结构。DOS、WINDOWS系统支撑类似于文件映照结构
9.4 存储技术(自学)
9.5 文件存储空间管理 教材上讲了几机文件存储空间管理的方法:空白文件、空闲块链和位图。 (自学)
9.5 文件存储空间管理 UNIX系统的空闲块的管理 在UNIX系统中每个子文件系统(一片软盘、一个硬盘的 分区,一卷磁带)格式化后的结构如图所不,其中特别 块是存放该子文件系统的管理信息,其中,包括空闲块 管理信息。 s-nfree :空闲块数 s_free[100]:空闲块块号 s_flock:锁位
9.5 文件存储空间管理 UNIX系统的空闲块的管理
9.5 文件存储空间管理 UNIX系统的空闲块的管理
9.6 文件目录 9.6.1 文件目录及内容 文件目录: 文件目录即文件名址录。它是一张记录所有文件名及其 存放地址、文件的说明和控制信息的表格。 一般情况下,每个文件占用一个表目,即每个文件有一 个文件的目录项。
9.6 文件目录 9.6.1 文件目录及内容 文件目录项: 4.存取控制信息 1.文件名 文件主和其它用户对该文件的访 问权限。 2.文件的大小,单位:字节 3.文件在物理存储介质中的位置 。取决于文件的物理结构 。 对于连续文件:文件起始块号( 即文件的第一个物理块块号); 对于串联文件:指向第一个物理 块的指针; 对于索引文件:索引表。 4.存取控制信息 文件主和其它用户对该文件的访 问权限。 5.管理信息 包含文件创建的日期和时间,最 近修改该文件的日期和时间等。 6.文件的类型
9.6.2 一级目录结构 一级文件目录 最简单的文件目录结构是在系统中建立一张线性表,每 个文件占一表目,由文件名和文件的说明和管理信息组 成。这样的表称为一级文件目录. 一级文件目录的主要功能是实现“按名存取”, 并且实现 容易。 主要问题是"重名"问题 所谓“重名”是指不同用户对不同文件起了相同的名字,即 两个或多个文件只有一个相同的符号名
9.6.2 一级目录结构
9.6.3 二级目录结构(自学)
9.6.4 多级目录结构(树型目录结构) 目录文件 由文件的目录项组成的文件称为目录文件。 系统中有一个根目录(或根目录文件),在这个目录中 可登记一般文件,也可以登记目录文件,在每个目录文 件中可以登记一般文件,也可以登记目录文件。 根据这个递归定义就形成了一个倒立的树的结构。对于 一棵树,它有一个树根(只有一个,根目录),在树根 上可以长树叶(一般文件),也可以长树枝(子目录文 件);对于每个树技又可以长树枝,也可以长树叶。
9.6.4 多级目录结构 路径名: 一个文件的路径名是由根目录到 该文件的通路上所有目录文件名 和该文件的符号名组成的。 DOS WINDOWS系统中文件路径名 \A\R\T \B\IU\I \D \B\P NIX系统中文件路径名 /A/R/T /B/IU/I /D /B/P
9.10 UNIX文件系统 9.10.1文件的静态结构 一、三种文件类型 UNIX系统中有普通文件、目录文件和特别文件。 目录文件是由文件目录项组成的文件。 文件目录项由文件名和文件I节点号组成 I节点号(2) 文件名(14) UNIX系统中文件目录项只包括文件名和I节点号,把通常 目录项中的信息放在一个叫索引节点(I节点)的结构中 ,有两个优点:其一是便于文件的共享,即不同的用户 可以通过不同的文件路径名来共享一个文件;其二是加 快文件检索的速度。
9.10 UNIX文件系统 9.10.1文件的静态结构
9.10.1文件的静态结构 特别块(管理块)结构: 特别块是在磁盘格式化 时建立的,当一个文件 子系统安装到系统中时 ,系统将申请一个内存 缓冲区来存放特别块。
9.10.1文件的静态结构
三、文件的静态结构 9.10 UNIX文件系统 9.10.1文件的静态结构 UNIX系统中,一个文件存 在要占用如下资源: 至少占用一个文件目录项; 仅占用一磁盘I节点; 占用一个或多个磁盘块 (物理块)。
9.10 UNIX文件系统 9.10.1文件的静态结构 i_uid:文件主的用户名 i-gid:用户组名 i-mode:文件的类型和文件的存取控制权限 IALLOC:此I节点被占用 IFDIR目录文件 IFCHR字符文件 IFBLK块文件 IREAD读 IWRITE写 IEXEC执行 共分三组,表示文件主、同组用户和其它用户的权限 i_mode=0表示该I节点空闲 i_nlink文件的联接数,在UNIX系统中一个文件可以登记在不同的目录文件中,目的是为不同的用户共享文件提供支持。 i_atime最近使用时间 i_mtime最近修改时间 i_addr文件索引表
2.文件的索引结构。
9.10.1文件的静态结构 2.文件的索引结构
9.10.1文件的静态结构 2.文件的索引结构 在i结构中的索引表有13个表目, 前10个表目存放文件数据块的地址,采用直接索引;如果文件的长度超过10个数据块; 第11个表目登记的是一次间接索引块的物理块号,该块存放索引表,而不是文件的内容,采用一次间接索引; 第12个表目登记二次间接索引块的物理块号,该块存放二次间接索引表,每个表目中登记的是一次间索引表的物理块号;
9.10.1文件的静态结构 2.文件的索引结构 第13个表目登记的是三次间接索引块的物理块号,该块存放三次间接索引表,每个表目中登记的是存放二次间接索引表的物理块号。 这种结构对于小于等于10个物理块的文件采用直接索引,可从i结构的索引表中直接取到文件数据块的物理块号,不需要进行任何转换和计算,加快文件存取的速度,提高文件系统的使用效率;对于一些大型文件或巨型文件,系统采用间接索引的方法也可以方便的管理和使用,只不过要付出些代价。因此,不论是几KB仍至几个字节的文件,还是几十MB、甚至更大的文件都能存在于UNIX系统中。
9.10.1文件的静态结构 2.文件的索引结构 UNIX系统中采用这种方法主要是照顾小型文件,保证对小型文件的存取高效快速,同时又兼顾大型文件和巨型文件。这与UNIX系统的环境有关,UNIX系统的设计者提供以下的统计资料说明他采用这种结构的理由。其统计资料说:在UNIX系统的环境下,小于10个物理块的文件约占所有使用文件的80%,其它文件约占20%,其中巨型文件不到1%。在实际应用中的文件大小的分布情况与这个统计结果是相符的。
9.10.2 UNIX树型目录结构 一、UNIX系统目录结构 整个系统有个根目录文件(DOS、WINDOWS系统中有一个根目录区),相当于一棵树的树根, 并有多级目录文件(与DOS概念相同,WINDOWS中叫做文件夹),相当于树枝。 还有许多文件(普通文件和特别文件),相当于树叶。
9.10.2 UNIX树型目录结构 二、文件的安装和拆卸 根文件系统是基本文件系统,在系统生成时产生。 子文件系统是驻留其它文件存储介质上的文件系统,例如,一片软盘、一盘的逻辑分区、一卷磁带、一个磁鼓等,在UNIX环境下格式化后成为一个子文件系统,经过UNIX系统提供的安装命令装到系统中,与根文件系统和已经安装在系统中的其它子文件系统一起形成一个完整的文件系统,当某个子系统不再使用时,用拆卸命令将该子文件系统拆卸下来。 踪上所述,在UNIX环境下总只有一个完整的树型目录结构。所以,在UNIX系统环境下使用文件只要给出文件的路径名即可。
9.10.2 UNIX树型目录结构 三、文件的联接 UNIX系统是一个多用户的操作系统,为了使多个用户能方便地共享系统中的某些文件,UNIX系统提供文件的联接操作(取别名),方法见用户手册。
9.10.3 打开文件的结构 用户在使用文件之前必须要使打开文件操作,为什么? 文件是存放在磁盘上的。磁盘属于外存储器,它是CPU不能直接访问的存储器,当然,用户就不能直接存取存放在磁盘上的文件。但用户又要使用文件,这样,在使用文件之前,就要在内存中建立存取文件的结构,然后,通过对这个结构的访问来达到对文件的访问。
9.10.3 打开文件的结构 内存中建立的存取文件的结构,称为文件控制块(FCB),包含文件目录的信息和对文件存取的有关信息。 该结构是在打开文件操作中建立的,并向用户返回FCB的首地址,用户以后使用文件(如读、写)就使用FCB首址。显然,用户要使用具体的内存地址,这对用户来说是非常困难的。 UNIX系统中打开文件的结构包括活动I节点表,系统打开文件表和用户文件描述符表
一、活动I节点 9.10.3 打开文件的结构 i_flag打开文件的标志 ILOCK:锁位 IUPD:修改标志 IMOUNT:安装点 IWANT:有进程等待 ITEXT:纯正文段 i_count:访问计数 i_dev:文件所在设备号 i_number:I节点号
二、打开文件表 9.10.3 打开文件的结构 f_flag:标志 FREAD:读 FWRITE:写 FPIPE:管道 f_count:访问计数 f_inode:指向活动I节点指针 f_offset:读写指针
9.10.3 打开文件的结构 三、用户文件描述符表(进程打开文件表) 每个进程有一个用户文件描述符表,存放在进程的user结构中,u.u_ofile[NOFILE]。 NOFILE=15是一常数,表示一个进程最多能同时打开15个文件。 这一个结构类似于一般操作系统中的FCB。
9.10.3 打开文件的结构 四、打开文件结构之间的关系
9.10.3 打开文件的结构 四、打开文件结构之间的关系 文件共享的三个层次: 1.父子进程共享同一文件,子进程在创建时继承了父进程的所有打开的文件,体现在对某个打开文件表目的共享;
9.10.3 打开文件的结构 四、打开文件结构之间的关系 2.不同的用户打开了同一个文件(以不同的文件名) 进程2 open(“/unix/li.c”,READ) 进程3 open(“/user/ll.i”,WRITE) 文件/unix/li.c和/user/ll.i是同一个文件;
9.10.3 打开文件的结构 四、打开文件结构之间的关系 3.不同的进程以不同的用途打开同一个文件 进程1 open(“/user1/ll”,READ) 进程3 open(“/user1/ll”,WRITE)
9.10.4 文件操作系统调用 一、文件系统调用及其它算法的关系
9.10.4 文件操作系统调用 二.系统调用 oprn 使用文件之前必须使打开文件操作,UNIX系统中打开文件的系统调用是open,其调用格式是: fd=open(pathname,flags); 功能:打开一个指定的文件; 输入参数:pathname 要打开文件的路径名 flags 指示打开文件的类型(读或写) 返回参数:fd 文件描述符(一个小的正整数) 若fd=-1则表示系统调用失败,对所有系统 调用都是。
9.10.4 文件操作系统调用 二.系统调用 oprn 执行过程: ①调用namei()将文件的路径名转换成I节点; ②文件不存在或非法访问,返回-1; ③申请打开文件表项,f_count++;f_offset置0; f_inode指向I节点; ④分配用户文件描述表项,将打开文件表首地址填入; ⑤若打开文件的类型是清文件,则释放该文件占用的所有磁盘块; ⑥返回用户描述表项的编号。
9.10.4 文件操作系统调用 二.系统调用 oprn
9.10.4 文件操作系统调用 三.系统调用 creat 调用格式: fd=creat(pathname,modes); 功能:创建一个新文件; 输入参数:pathname 要创建文件的路径名 modes 指示创建文件的类型(读或写) 返回参数:fd 文件描述符(一个小的正整数)
9.10.4 文件操作系统调用 三.系统调用 creat 执行过程: ①调用namei()取得文件路径名的I节点; ②文件存在且不允许访问,则释放I节点,返回-1; ③文件不存在,则申请分配一I节点; ④在其父目录中建立目录项,包括文件名和I节点号; ⑤分配用户文件描述表项,打开文件表首地址填入; ⑥若文件在创建时已存在,则释放该文件占用的所有磁盘块; ⑦返回用户描述表项的编号。
fd=creat(pathname,modes); 功能:关闭文件; 输入参数:fd 文件描述符 返回参数:无 9.10.4 文件操作系统调用 四. 系统调用 close 调用格式: fd=creat(pathname,modes); 功能:关闭文件; 输入参数:fd 文件描述符 返回参数:无
9.10.4 文件操作系统调用 执行过程: ⑴if(f_count-- > 0) return; ⑵ 释放该表目; ⑶if(i_count-- > 0) return; ⑷ 如果活动I节点修改,则将有关盘上I节点的内存写回到相应盘上I节点;释放此I节点,return; ⑸如果活动I节点未修改,释放此I节点,return。
9.10.4 文件操作系统调用 五.系统调用read,write 调用格式: n=read(fd,buffer,size); n=write(fd,buffer,size); 输入参数 fd 文件描述符; buffer 缓冲区,对于读是将读文件的信息存放在缓冲区中;对于写是将缓冲区中的信息写到文件中; size 读(或写)信息的长度,单位字节。 返回值: 对于读操作 n=0 读到文件尾 n > 0 实际读的字节数。 对于写操作 n > 0 实际写的字节数,n与size应相等。
9.10.4 文件操作系统调用 五.系统调用read,write 执行过程: 读(或写)操作先按文件表中的位移量设置U区中的位移量,然后调用低层读(或写)磁盘块的操作,读完指定的字节数后,返回实际读的字节数。 低层读磁盘块的操作 计算出文件的逻辑块号; 查活动I节点中的文件索引表,找到相应的物理块号; 读磁盘块。