文件系统
文章目录
文件是进程创建的信息逻辑单元,是对磁盘的建模。文件受操作系统管理,包括文件的构造、命名、访问、使用、保护、实现和管理。从总体上看,操作系统中处理文件的部分称为文件系统(file system)。
1 文件
1.1 文件命名
文件是一种抽象机制,它提供了一种在磁盘上保存信息而且方便以后读取的方法。使用户不必了解相关细节。许多操作系统支持文件名用圆点 . 分为两部分,圆点后的部分称为文件扩展名(file extension),通常表示文件的一些信息。在UNIX中,文件甚至可以包含两个或更多的扩展名,但文件扩展名不是必须的。
1.2 文件结构
文件可以有多种构造方式,常用的三种文件模型为:字节序列(UNIX和Windows)、记录序列、树。
1.3 文件类型
操作系统支持多种文件类型。普通文件(regular file)是包含用户信息的文件。目录(directory)是管理文件系统结构的系统文件。UNIX中还有字符特殊文件(character special file)用于串行I/O设备。块特殊文件(block special file)用于磁盘类文件。
普通文件一般分为ASCII文件和二进制文件。
1.4 文件访问
顺序访问:进程在系统中可从头按顺序读取文件的全部字节或记录,但不能跳过一些内容。
随机访问文件:能够以任何次序读取其中字节或记录的文件。
指示从何处开始读取文件:每次read操作都给出开始读文件的位置。用一个seek操作设置当前位置。
1.5 文件属性
除文件名和数据外,其他与文件相关的附加信息称为文件属性(attribute)或元数据(metadata)。
常用文件属性:
属性 | 含义 | 属性 | 含义 |
---|---|---|---|
保护 | 隐藏标志 | ||
口令 | 系统标志 | ||
创建者 | 加锁标志 | ||
所有者 | 创建时间 | ||
只读标志 | 最后存取时间 | ||
当前大小 | 最后修改时间 |
1.6 文件操作
create:
delete:
open:
close:
read:
write:
seek:
2 目录
文件系统通常用目录或文件夹记录文件的位置。
2.1 一级目录系统
目录系统的最简单形式是在一个目录中包含所有的文件,有时称为根目录。
2.2 层次目录系统
层次结构(目录树)用很多目录把文件以自然方式分组,用户可以创建任意数量的子目录。几乎所有现代文件系统都用这个方式组织。
2.3 路径名
用目录树组织文件系统时,需要某种方法指明文件名。一种是每个文件都赋予一个绝对路径名(absolute path name),由从根目录到文件的路径组成。一种是使用相对路径名(relative path name),它是相对于工作目录(当前目录)的。
支持层次目录结构的大多数系统在每个目录中有两个特殊的目录项 . 和 … ,常读作 dot 和 dotdot。dot指当前目录,dotdot指其父目录(根目录中例外)。
2.4 目录操作
create:
delete:
opendir:
closedir:
readdir:
rename:
link:
unlink:
符号链接:一个文件名指向命名另一个文件的一个小文件。它能跨越磁盘的界限。
3 文件系统的实现
3.1 文件系统布局
文件系统存放在磁盘上,多个磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统。磁盘的0号扇区称为主引导记录(Master Boot Record,MBR),用来引导计算机。
3.2 文件的实现
连续分配:把每个文件作为一连串连续数据块存储在磁盘上。缺点是随着时间的推移,磁盘会变得零碎。主要用于CD-ROM、DVD、蓝光光盘等一次性写光学介质。
链表分配:为每个文件构造磁盘块链表。每个块的第一个字作为指向下一个块的指针,块的其他部分存放数据。
采用内存中的表进行链表分配:取出每个磁盘块的指针字,把它们放在内存的一个表中,这样的表称为文件分配表(File Allocation Table,FAT)。缺点是必须把整个表存放在内存中,不能较好地扩展并应用于大型磁盘中。
i节点(index-node):列出了文件属性和文件块的磁盘地址。这种机制的优势在于:只有在对应文件打开时,其i节点才在内存中。i节点机制需要在内存中有一个数组,其大小正比可能要同时打开的最大文件个数,与磁盘容量无关。
3.3 目录的实现
打开文件时,操作系统利用用户给出的路径名找到对应目录项,目录项中提供了查找文件磁盘块所需要的信息。因此,目录系统的主要功能是把ASCII文件名映射成定位文件数据所需的信息。
很多系统把文件属性直接存放在目录项中。对于采用i节点的系统,则将文件属性存放在i节点中会更好。
3.4 共享文件
共享文件问题是:
二是通过让系统建立一个类型为LINK的新文件,并把该文件放在B的目录下,使得B与C的一个文件存在链接。新文件中只包含了它所链接的文件的路径名。这一方法称为符号链接(symbolic linking)。
3.5 日志结构文件系统
3.6 日志文件系统
3.7 虚拟文件系统
在同一个操作系统下,会使用很多不同的文件系统。虚拟文件系统(virtual file system,VFS)概念尝试将多种文件系统同一成一个有序的结构。
4 文件系统管理和优化
4.4 文件系统性能
访问磁盘比访问内存慢得多。故文件系统采用了各种优化措施以改善性能。
高速缓存:最常用的减少磁盘访问次数技术是块高速缓存(block cache)或缓冲区高速缓存(buffer cache)。
块提前读:在需要用到块之前,试图提前将其写入高速缓存。
减少磁盘臂运动:把有可能顺序访问的块放在一起,最好是在同一个柱面上,从而减少磁盘臂的移动次数。
4.5 磁盘碎片整理
5 文件系统实例
5.1 FAT
FAT文件系统有FAT-12、FAT-16和FAT-32三个版本,这取决于磁盘地址包含多少二进制位。FAT16支持的分区最大为2GB。FAT32可以支持的磁盘大小达到32G。广泛用于嵌入式系统、数码相机、MP3播放器等。
5.2 NTFS
NTFS文件系统是一个基于安全性的文件系统,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。主要特点为:
- 可以支持的分区大小可达2TB。
- 是一个可恢复的文件系统,使用日志文件和检查点信息自动恢复文件系统的一致性。
- 支持对分区、文件夹和文件的压缩。
- 采用了更小的簇,可以更有效率地管理磁盘空间。
- 可以为共享资源、文件夹以及文件设置访问许可权限。
5.3 EXT
Ext2是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好。
Ext3是一种日志式文件系统,是对ext2系统的扩展,兼容ext2。
Ext4是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,可以提供更佳的性能和可靠性。
5.4 CD-ROM文件系统
此文件系统是为一次性写介质设计的。
ISO 9660文件系统:现在市场上所有的CD-ROM都支持这个标准。