Chapter 9 文件系统
9.1 文件系统概念
文件是信息存放形式,由若干信息项有序组成。
文件具有唯一文件名。
用户通过读写指针存取文件的信息项。
按照文件用途可以将文件分为系统文件、库文件和用户文件。
按照文件操作权限可以将文件分为只读文件、只写文件、可执行文件、可读可写文件、不保护文件。
按照文件存储时间可以将文件分为永久文件和临时文件。
按照文件性质可以将文件分为普通文件、目录文件和设备文件。
文件系统是管理文件的机构,负责文件的创建、撤销、读写、修改、复制和存取控制等,这方便用户以文件名来存取文件。还负责管理文件存储设备的空间和存取,可以高效利用存储空间和高效存取文件。
9.2 文件逻辑结构与存取方式
- 记录式文件:按照记录读写文件
- 信息项是记录,一个记录中包含有若干成员。
- 分为定长记录文件和非定长记录文件。文件头部需要保存记录数量和记录长度等说明信息
- 记录式文件较浪费存储空间
- 流式文件:按照字节读写文件
- 信息项是字节。
- 文件长度就是字节的数量,在现代操作系统中所有文件均为流式文件,由应用程序根据特定的文件格式(协议)去解释和处理文件。
文件存取方式可以采用两种方式:顺序存取和随机存取。
- 顺序存取:从前到后的顺序依次对文件信息项进行读写,直到定位到目标信息位置。
- 随机存取:直接定位到文件目标信息项进行读写,适合流式文件或定长记录文件。
存储介质
- 一盘磁带、一个磁盘组或一张软盘都成为一卷,卷是存储介质的物理单位。
- 块是存储介质上连续信息所构成的一个区域,也叫做物理记录。
- 块是内存和外存进行信息交换的物理单位,每一次总是交换一块或整数块信息。
- 块大小要考虑用户使用方式、数据传输效率和存储设备等因素。
- 文件存储结构密切地依赖于存储设备的物理特性,存储设备的特性也决定了文件的存取方法。
顺序存储设备
顺序存储设备严格依赖信息物理位置进行定位和读/写的存储设备,只有在前面的物理块被存取访问过之后,才能存取后续的物理块的内容。如磁带机。按照顺序存取方式访问时速度比较高,而随机方式或按键存取方式效率不高。
优点:存储容量大,稳定可靠,文件卷可拆卸,便于保存和块长变化范围较大等,被广泛用于保存档案文件的存储介质。
随机存储设备
随机存储设备允许文件系统直接存取对应存储介质上的任意物理块。磁盘机是一种典型随机存储设备,存取任何一个物理块所需时间几乎不依赖于此信息的位置。这是一种高速、大容量、旋转型的存储设备,将信息记录在盘片上,每一个盘片都有正反两面,若干张盘片可以组成一个盘组。
驱动机构
-
固定磁头型:磁头不可移动,每一个磁道上设置一个磁头,优点是速度快,但结构复杂,目前使用较少
-
可移动磁头型:每一个盘面有一个读写磁头,所有读写磁头被固定在唯一移动臂,读写磁头按照从上到下的次序从0开始编号,称为磁头号。每一个盘面有很多磁道,从0开始按照由外向里的次序顺序编号称为磁道号,不同盘面上具有相同编号的磁道在一个柱面上,把盘面上的磁道号称为柱面号。所有的磁头都在一个柱面上,每一次只有其中的一个磁头可以进行读写操作。
-
在磁盘初始化时每一个盘面划分为相等数量的扇区,按照磁盘旋转的方向从1开始给各个扇区编号,称为扇区号。
-
每一个扇区各个磁道均可存放相等数量字符,称为块。块是信息读写的最小单位。
-
一个具有正反两个盘面的盘片,有2个磁头。
-
需要确定一个块的位置需要给出3个参数:柱面号、磁头号、扇区号。实际上相当于柱面坐标系中的r、z、θ。
若扇区数量s,磁头数量t,则第i个柱面、第j个磁头、第k个扇区的块号,即索引从小到大依次为:扇区、磁头、柱面。也可以根据块号确定该块在磁盘中的位置。第P块在磁盘上的位置为:柱面号,磁头号,扇区号。
存储介质的容量逐渐增大,且有些像磁带一样可以随时更换,因此也可以作为保存档案,成为一种高速、大容量、可以拆卸的海量存储器。
9.3 文件的物理结构
文件的物理结构类型有连续文件、串联文件、索引文件3种。
连续文件
文件存放于连续的存储块中。文件目录记录文件长度(块数)和第一个存储块号。
优点:支持顺序存取和随机存取,顺序存取速度快。
缺点:文件不易动态增加,预留空间容易造成浪费,造成外部碎片。
串联文件
串联文件存放于离散存储块中,每一个存储块包含一个链接指针记录下一块的位置。
优点:可以显著消除存储碎片,创建文件时无需知道文件长度,文件动态增加时可以动态分配存储块,支持文件增删改等操作。
缺点:适合顺序访问模式(随机访问效率极低),如果某一个链接指针损坏,文件后面将无法访问。FAT文件系统就是使用这种形式保存文件。
索引文件
文件存放于不连续存储块中,系统建立索引表记录文件逻辑块和存储块的对应关系。索引文件=索引表+数据区。文件目录记录文件名和对应的索引表。
索引表的组织——多级索引。
- 直接索引
- 一级间接索引:文件目录项中有一组表项,其内容登记第一级索引表块的块号
- 二级间接索引
优点:读取索引文件需要索引表,支持顺序存取和随机存取,支持文件动态增长、插入、删除等要求。
缺点:索引表占据额外空间。
其中ext文件系统就采用索引文件方式。
9.4 磁盘空间存储管理
空闲文件目录
将连续空闲区组成的特殊文件称为空闲文件。存储设备上的所有空闲文件就代表了存储设备上的全部空闲空间。
空闲文件目录是为空闲文件建立的目录,记录空闲文件的首个存储块号和存储块数量。
空闲块链
把所有空闲存储块使用链表存储在一起,当申请空闲块时从链表头部取空闲块,回收时将块加载链表尾部。
位示图
内存中划出一块区域,每一位对应存储块使用情况(占用或空闲),空闲时对应位为1,否则为0。
根据磁盘总块数决定位示图中有多少个字。
成组链接法
把空闲块分为若干组,每一组第一个空闲块登记下一组空闲块的块号的空闲块数。在UNIX系统中100个空闲块为1组,余下不足100块的块号和块数登记在一个专用块中。
分配:将专用块读取到存储器,当需要分配空闲块时,直接在内存中找到哪些块是空闲的,每分配一块空闲块数-1。把一组中第一个空闲块分配前将登记在该块中的下一组块号即块数保存到专用块中。当一组空闲块被分配完后把专用块内容读取到内存储器。
回收:归还一块登记后将当前块数+1即可。如果当前组已经满100块将内存中的内容写到归还的那一块,作为新组中的第一块。
9.5 文件目录
文件目录功能:实现“按名存取”:用户向系统提供文件名,就能够找到指定文件
目录文件:文件目录可以看做一个特殊文件。
文件目录项:描述文件的基本信息、使用信息和存取控制信息的数据结构
- 基本信息:文件名、存储位置等
- 使用信息:属性、大小、建立时间、修改时间
- 存取控制信息
目录结构
- 单级目录
- 最简单的目录结构,这种组织形式下全部文件都登记在同一个目录中。便于简单和实现,但查找速度慢,不允许重名和文件共享。
- 二级目录
- 第一级称为主目录,第二级目录称为用户目录,即每一个用户有一个子目录,可以解决文件重名的问题,不同用户可以使用相同的名字。
- 多级目录(树形目录)
- 二级目录结构的扩充,目录结构是倒置的树,根节点为主目录(根目录)
文件全名:从根目录到文件为止整个通路上面所有目录、子目录和文件的名字用"/"顺序连接构成的字符串称为文件全名。路径名分为绝对路径名和相对路径名。
文件属性:指定文件的类型、操作特性和存取保护等信息。一般保存在文件的目录中。
文件操作:创建、写、读、文件定位、删除、截短、属性设置和读取
目录操作:创建、删除
对于文件的访问系统首先需要检查访问权限(文件保护):读写执行、追加、修改等
9.6 Linux索引文件/inode
索引文件=索引结点inode+若干数据块
索引结点inode:有一个指针指向数据块,指示文件的存储位置
创建文件时需要分配1个索引结点inode和1个数据块,数据块记录文件的内容。如果文件增长太大,则为该文件分配更多的数据块,分配更多的索引表。
创建目录与文件相同,分配1个索引结点inode和1个数据块,如果目录中的文件太多,则为该目录存放更多的数据块。
虚拟文件系统(VFS):覆盖在逻辑文件系统之上面向操作系统的接口层,对于每一个逻辑文件系统的实现细节进行抽象,使得不同的文件系统在Linux核心以及其他进程看来都相同。
- 索引结点(inode)包含一个文件的所有信息
- 超级块描述物理文件系统的信息,每一个物理文件系统都有自己的超级块,建立文件系统时需要创建该超级块,卸载文件系统删除超级块
- 目录项为文件名与结点的对应位置
- 文件对象表示进程已经打开的文件