1. 文件
信息项/数据项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系。
记录:一组相关的数据项的集合,用于描述一个对象在某方面的属性
文件是一组带标识的、在逻辑上有完整意义的信息项的序列。可分为有结构文件和无结构文件
- 有结构文件中,文件由若干个相似的记录组成
- 无结构文件被视为一个字符流
文件包括两部分:
- 文件体:文件本身的内容;
- 文件说明:文件存储和管理的相关信息,如:文件名、文件内部标识、文件存储地址、访问权限、访问时间等;
文件是一种抽象机制,它提供了一种把信息保存在磁盘等存储设备上,并且便于以后访问的方法。抽象性体现在用户不必关心具体的实现细节。
可以视为一个单独的连续的逻辑地址空间,其大小即为文件的大小,与进程的地址空间无关
一切皆文件
- 所有的IO设备都可以看作为字节序列的载体,因此,所有的IO设备也可以抽象为文件进行表达。这就是现代OS中“一切皆文件”的含义。
- 所有的I/O设备,包括磁盘、键盘、鼠标、显示器都可以看成是文件
文件常用属性:
-
文件名,文件号,文件大小,文件地址,文件类型
-
创建时间,最后修改时间,最后访问时间
-
保护,口令,创建者,当前拥有者,共享计数
-
各种标志(只读、隐藏、系统、归档、ASCII/二进制、顺序/随机访问、临时文件、锁)
文件名是一个有限长度的字符串。文件名形式:文件名.扩展名
文件类型【PPT 7 Page 13】 例:UNIX的文件类型【PPT 7 Page 14】
文件控制块(FCB,File Control Block)
-
为管理文件而设置的数据结构,存放控制文件所需的各种信息的数据结构,以实现“按名存取”
-
FCB的有序集合称为文件目录,一个FCB就是一个文件目录项
-
FCB主要包含以下信息
- 基本信息:文件名、文件物理位置、文件的逻辑结构、文件的物理结构
- 访问控制信息:文件主的存取权限、核准用户的存取权限、一般用户的存取权限、访问权限(读、写、执行、删除等)
- 使用信息:创建时间,上一次修改时间,当前使用信息等。
-
一个文件目录也被称为一个文件,称为目录文件。
-
文件控制块(File Control Block)是描述文件的基本信息
而文件描述符(File Descriptor)是一般为一个非负整数,唯一标识一个打开的文件
文件基本操作:
- 创建文件、删除文件、打开文件、关闭文件、读文件、写文件、修改文件名、设置文件的读写位置
- 打开文件:打开文件表【王道P240】
索引结点
为节省查找时间,将文件名和文件描述信息分开,使文件描述信息单独形成一个称为索引结点的数据结构,简称 i 结点(inode)。
在文件目录中的每个目录项仅由文件名和指向该文件所对应的 i 结点的指针构成
- 磁盘索引结点:存放在磁盘上的索引结点【王道P239】
- 内存索引结点:存放在内存中的索引结点
保护文件的方法
- 建立副本、定时转储、规定文件权限
文件的一致性检查
- 磁盘块的一致性、文件的一致性
文件的存取控制
-
文件保护机制
- 防止未被核准的用户存取文件;防止一个用户冒充另一个用户来存取; 防止核准用户(包括文件主)误用文件;
- 通过口令保护、加密保护、访问控制等方式实现
口令、密码【王道P242】
-
存取权限验证步骤
-
审定用户的权限;
-
比较用户的权限与本次存取要求是否一致;
-
将存取要求和被访问文件的保密性比较,看是否有冲突
为每个文件和目录增加一个访问控制列表ACL。精简的访问列表采用拥有者、组、其他三种用户类型
-
-
存取控制的实现方案
- 存取控制矩阵、存取控制表、用户权限表、口令
- RWX(read、write、execute)
文件的逻辑结构
【王道P242】
从用户角度看到的文件的组织形式
-
流式文件/无结构文件: 构成文件的基本单位是字符。文件是有逻辑意义、无结构的一串字符的集合;
-
记录式文件/有结构文件:文件由若干记录组成,可以按记录进行读写、查找等操作。每条记录有其内部结构
- 又分为顺序文件、索引文件、索引顺序文件
流式文件(无结构文件)
由一些二进制或字符流组成,无明显逻辑结构。eg:文本文件
记录式文件(有结构文件)
顺序文件
- 物理上顺序存储的顺序文件
- 查找、修改、增加或删除单个记录的时候,顺序文件性能很差。
索引文件
- 增删快,但要建索引表,有空间开销
索引顺序文件
- 将顺序文件中的记录分为若干组,索引表中为每个组中的第一条记录建立一个索引项。
- N条记录, N \sqrt{N} N次查找
文件的物理结构
研究文件数据在物理存储设备上是怎么分布和组织的
类似于内存分页,瓷盘中的存储单元也会被分为一个个块/磁盘块/物理块,一般和内存块、页面大小相同
连续(顺序)结构
目录内容为文件名、起始块号、长度(占用连续的几块)
特点:
- 优点:
- 结构简单,实现容易,不需要额外的空间开销,只要在文件目录中指出文件的大小和首块的块号即可
- 支持顺序存取和随机存取/直接存取,存取的效率高
- 缺点:
- 容易出现磁盘碎片
- 文件长度一经固定便不易改变;一旦增加就需要大量移动盘块
- 不利于文件的动态增加和修改;
串联/链接文件结构
串联文件结构是按顺序由串联的块组成的,即文件的信息按存储介质的物理特性存于若干块中。
每个物理块的最末一个字(或第一个字)作为链接字,它指向后继块的物理地址。链首指针存放在该文件目录中。文件的结尾块的指针为“∧”,表示文件至本块结束。
隐式链接:链接指针在盘块内
- 记录起始块号和结束块号
显式链接:链接指针提出来,显式存放在内存的一张链接表中。该表在整个磁盘中仅一张,称为文件分配表FAT
- 记录盘块号和下一块号。-1表示最后一块,-2表示空闲
对于记录式文件,一块中可包含一个逻辑记录或多个逻辑记录,也可以若干物理块包含一个逻辑记录
优点:
- 克服了连续文件的不足之处,空间利用率高;能较好的利用外存空间;
- 文件动态扩充和修改容易;
- 顺序存取效率高(类似于存储管理中的页式)
缺点:
- 随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件
- 可靠性问题,如指针出错;
- 链接指针占用一定的空间。
索引结构【重点】
一个文件的信息存放在若干个不连续物理块中
系统为每个文件建立一个专用数据结构:索引表,并将这些物理块的块号存放在该索引中。索引表存放的磁盘块称为索引块。
索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块。(FCB中只记录索引表的地址)
系统为每个文件建立逻辑块号与物理块号的对照表,称为文件的索引表。文件由数据文件和索引表构成。这种文件称为索引文件
- 索引表位置:文件目录中,文件的开头等
- 索引表大小:固定大小、非固定大小
索引文件结构
索引文件的操作
-
索引文件在存储区中占两个区:索引区和数据区。索引区存放索引表,数据区存放数据文件本身。
-
访问索引文件需要两步操作:
-
查文件索引号,由逻辑块号查得物理块号
-
由此磁盘物理块号而获得所要求的信息
-
优点:保持了链接结构的优点,又回避了其缺点:
- 即能顺序存取,又能随机存取
- 满足了文件动态增长、插入删除的要求
- 能充分利用外存空间
缺点:索引表本身带来了系统开销,如:内外存空间,存取时间
索引表的组织
- 链接模式:一个盘块一个索引表(里面有指向下一个索引块的指针),多个索引表链接起来。FCB只记录第一个索引块的块号。
- 多级索引(间接索引):将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中
- 综合模式/混合索引:直接索引方式与间接索引方式结合
混合索引
直接地址:直接存放文件数据潘快的盘块号,如i.addr(9)-i.addr(9)
一次间接地址:
多次间接地址:
若顶级索引表还未读入内存,则直接地址需要读2次磁盘,k层间接地址需要读k+2次磁盘
若每个盘块大小为4KB
- 直接地址 4KB*10=40KB大小
- 一级:1K*4KB=4MB
- 二级:1K*1K*4KB=4GB
- 三级:4TB
eg:直接索引+二级间接索引
2. 目录
**目录是由文件说明索引组成的用于文件检索的特殊文件。**文件目录的内容主要是文件访问和控制的信息(不包括文件内容)。文件目录是TCB的有序集合
目录的内容是文件属性信息(properties),其中的一部分是用户可获取的.
基本信息
-
文件名:字符串
-
别名的数目;
-
文件类型
-
地址信息:
-
存放位置:哪个设备或文件卷volume,及各存储块位置;
-
文件长度(当前和上限):以字节、字或存储块为单位。
-
-
访问控制信息:文件所有者、访问权限(读、写、执行)
-
使用信息
-
创建时间;
-
最后一次读访问的时间和用户。
-
最后一次写访问的时间和用户。
-
目录操作
- create、delete、opendir、closedir、readdir、rename、link、unlink
主要功能:
- 根据用户给出的ASCII形式的文件名(路径名),迅速地定位到相应的文件控制块。目录的实现需解决以下三个问题:
- 目录项的内容;
- 长文件名问题;
- 目录的搜索方法
目录的实现
- 直接法:目录项=文件名+FCB(属性信息、在外存上的存放位置)
- 间接法(结构性更好):目录项=文件名+FCB的地址(索引号)。如Unix(inode);
不管是何种方法,给定一个文件名,即可返回相应的FCB
长文件名问题
在现代OS中,一般都支持更长的、可变长度的文件名。实现方法有:
- 方法1:在目录项中,将文件名的长度固定
- 缺点:浪费空间,很少文件用很长的名字;
- 方法2:每个目录项的长度可变,分为三部分:目录项长度、文件的属性信息(此两项长度固定)、文件名(长度可变)。
- 缺点:文件被删除后,该目录项所占用的空间不太好回收利用;
- 方法3:目录项本身的长度固定,把长度可变的文件名统一放在目录文件的末尾
文件目录的查询技术
-
顺序查寻法:依次扫描符号文件目录中的表目,将表目中的名字字段与查找的符号名NAME进行比较(只在表目不多时适用)。
-
Hash方法:利用一个易于实现的变换函数(即Hash函数),把每个符号名唯一的变换成符号表中的表目索引
-
便于共享的目录结构:文件的共享,要求系统能提供某种手段,使存储空间内保存一份副本,而所有要共享该文件的用户可用相同或不同的文件名来访问它。
文件目录分类
- 单级文件目录
- 二级文件目录
- 多级文件目录
单级文件目录
文件目录的每个表目应包含:文件的符号名、文件所在物理地址、文件结构信息、存取控制信息、管理信息。
实现了“按名存取”
特点:①结构简单(只在早期的个人计算机上使用过); ②文件多时,目录检索时间长;③有命名冲突;④不便于实现共享
两级目录
在根目录下,每个用户对应一个目录,在用户目录下是该用户的文件,而不再有下级目录。适用于多用户系统,各用户可有自己的专用目录
解决了多用户之间的文件重名问题,可以在目录上实现访问限制。但缺乏灵活性,不能对文件分类。
多级目录(层次目录/树形目录)
在较高的目录级,其目录表目为下一级目录名以及一个指向其目录的指针。
在最后一级目录,这个指针指向文件的物理地址。
多级目录结构中,如何指定需要访问的文件?
- 绝对路径名:一个文件或目录的绝对路径名是唯一的。例如:\spell\mail\copy\all
- 相对路径
- 当前目录:也叫工作目录,用户可以指定一个目录作为当前的工作目录;
- 上一级目录: 在根目录下 “…” 表示它本身,还是根目录。
可以很方便的对文件进行分类,层次结构清晰,能够更有效地进行文件的管理和保护。可解决文件重名问题
查找速度快
- 可为每类文件建立一个子目录,由于对多级目录的查找每次只查找目录的一个子集,所以搜索速度快于一级和二级目录;
目录级别太多时,会增加路径检索时间
文件共享:硬链接、软链接【王道P265】
3. 文件系统
文件系统是操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用。
文件系统要完成的任务:
- 统一管理磁盘空间,实现磁盘空间的分配与回收;
- 实现文件按名存取:名字空间–映射–>磁盘空间;
- 实现文件信息共享,并提供文件的保护、保密手段;(多进程的操作系统)
- 向用户提供一个方便使用、易于维护的接口(文件的open、write、close等),并向用户提供有关统计信息;
- 提高文件系统的性能;
- 提供与IO系统的统一接口。
文件系统的定义:操作系统中与文件管理有关的那部分软件和被管理的文件以及实施管理所需要的数据结构的总体
目的:为系统管理者和用户提供了对文件的透明存取**(按名存取)**:不必了解文件存放的物理机制和查找方法,只需给定一个代表某段程序或数据的文件名称,文件系统就会自动地完成对给定文件名称相对应的文件的有关操作
文件系统模型的三个层次
-
文件系统的接口(最接近用户的)
- 命令行接口:用户和文件系统的交互的接口。
- 程序接口:用户程序和文件系统的接口。(通过系统调用获得文件系统的服务)
-
对象操作管理的软件集合
- 这是文件管理系统的核心部分。文件系统的功能大多数是在这一层实现的,其中包括: 对文件存储空间的管理,对文件目录的管理、 文件地址转换、文件读写管理、文件的共享和保护的功能
-
对象及其属性
文件系统管理的对象有:
- 文件,它作为文件管理的直接对象。
- 目录。为了方便用户对文件的存取和检索,在文件系统中必须配置目录,每个目录项中,必须包含文件名及文件所在的物理地址(或指针)。对目录的组织和管理是方便用户何提高对文件存取速度的关键。
- 磁盘存储空间。文件和目录必定占用存储空间,对这部分空间的高效管理,不仅能够提高外存的利用率,而且能够提高对文件的检索速度。
外存空间的管理
包含文件系统的分区通常称为卷(volume)/文件卷/逻辑卷/逻辑盘。存放文件数据的空间(文件区)和FCB的空间(目录区)是分离的。
空闲表法:记录序号、第一空闲盘块号、空闲盘块数
空闲链表法
- 将所有的空闲盘区连成一条空闲链,可有两种方式:空闲盘块链、空闲盘区链。
- 空闲盘块链:将所有空闲存储空间,以盘块为基本元素成链。
- 优点是分配和回收盘块的过程非常简单。缺点是空闲盘块链可能很长。
- 空闲盘区链:将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。在每个盘区上除了含有用于指示下一个空闲盘区的指针外,还应标有指明本盘区大小(盘块数)的信息。
- 这方法分配和回收过程较复杂,但效率通常较高,且空闲盘区链较短
位示图法:用二进制的一位表示磁盘中一盘块的使用情况。分配物理块为1,否则为0
成组链接法【王道P278】
- 把空白物理块分成组,在通过指针把组与组之间链接起来,这种管理空白块的方法称为成组链接法。
分配的时候先分第一组最下面的12,再依次往上,如果第一组不够分,则再分完第一组后继续分第二组
- 优点:空白块号登记不占用额外空间;节省时间;采用后进先出的栈结构思想
文件的并发访问
文件系统的性能问题:块高速缓存
文件系统实例分析