什么是文件?
信息按一定结构方式组成文件,由文件名进行标识
什么是文件系统?
文件与管理信息资源的管理程序的集合称为文件系统
文件目录
文件控制块(FCB)
- File Control Block(简称FCB)是操作系统为每个文件建立的唯一数据结构
- 一个文件有两部分:FCB和文件体(即文件信息)。每创建一个文件,系统就要为其建立一个FCB;每当存取文件时,先找到其FCB,才能定位到其物理位置
文件目录
- 目录文件便是由许多的FCB汇集在一起所形成的文件,它保存在外存上并至少包含两个文件:当前目录(即自身)“.”和其父目录“..”
- 文件目录的基本功能是将文件名转换成该文件在磁盘上的物理位置
索引节点inode
- 文件系统的信息空间可认为是一系列逻辑块构成的,不同文件系统的逻辑块大小不定,但通常为512B的整倍数。逻辑块到物理块的转换则由操作系统软件负责
- Linux系统中,FCB中的文件名和其他管理信息分开,其他信息单独构成一个数据结构,即索引节点inode,这些inode被集中存放在磁盘上的inode区。索引节点位置由inode标号标识,所以目录项中仅有文件名和inode标号,称为基本目录项
inode结构示例:
1
2
3
4
5
6
7
8
9
10
11
12struct inode {
……
unsigned long i_ino; //inode号
atomic_t i_count; //inode引用数
kdev_t i_dev; //inode所在设备
……
union {
struct minix_inode_info minix_i;
struct ext2_inode_info ext2_i;
……
}
}因为在文件访问过程中会频繁使用inode,所以Linux在系统所占的内存区内开辟了一张内存索引节点表,又活动inode表,含有100个表项,每个表项称一个活动inode。访问文件时,若在活动inode表中找不到其inode,就申请一个空闲活动inode,把磁盘inode内容复制给它,类似存储管理中的虚拟存储
层次目录结构
- Linux系统中,文件目录结构是一颗倒置的树,树根是根目录,树枝是子目录,树叶是文件。在树状目录中,一个文件的全名包括从根目录起至文件为止,在通路上所遇到的所有子目录路径,子目录名之间用斜线隔开。Linux文件系统中,根目录下包含dev(设备子目录),usr(命令程序文件和库程序子目录),var(变化的文件子目录),etc(基本数据文和实用程序子目录),home(用户文件主目录)等
- 纯树形目录结构有一个缺点:文件的共享不是对称的,其他被授权用户必须经过文件父目录才能访问该文件。而有向无环图目录结构可以解决这个问题,属于不同用户的多个目录可能使用不同的文件名访问和共享同一个文件。有向无环图需要为每个文件维护一个引用计数,以此记录文件的父目录个数,当引用计数值为1时,删除操作才能移去文件,否则仅删除相关记录
- Linux系统支持多父目录,但其中有一个是主父目录,文件被物理地存储在此目录下,其他父目录通过link方式来链接和引用文件
文件目录检索
- 前面有提到每个目录至少包含“.”和“..”两个目录项,其中目录项“.”中的inode标号即为当前目录的inode标号,同理,目录项“..”中的inode标号即为父目录的inode标号
- 对于根目录来说,“..”和“.”的inode标号相同
- 假设现在应用进程要打开“/home/fei1/myfile.c”:
首先,遇到根目录“/”(通常被存放在磁盘的固定盘块),将其作为当前工作索引节点并把第一个物理块读入内存缓冲区,接着对根目录进行搜索,直至找到“home”的inode标号;然后检索活动inode表,若找不到home的inode,为其分配一个活动inode,经核对访问权限,将home作为当前工作索引节点,搜索和“fei1”匹配的物理块……最后找到myfile.c的inode号,从磁盘装入内容。其中任何一布出错都会返回错误码
文件组织与数据存储
文件逻辑结构
逻辑结构是指为方便用户使用而对物理结构的一种抽象文件物理结构
文件的物理结构和组织是指逻辑文件在物理存储空间中的存放方法和组织关系,有两类方法可用来构造文件物理结构:计算法(设计映射算法)和指针法(设置专门指针),下面是几种常见的文件物理结构顺序文件
- 又称连续文件,其逻辑记录顺序和物理块顺序完全一致,记录按照出现的次序被顺序读写或修改
- FCB中保存的磁盘定位信息由第一个物理块地址和文件信息块的总块数组成
- 磁带上的文件是典型的顺序文件
- 优点:速度快
- 缺点:插入,修改文件记录困难;处理变长记录困难;浪费空闲块
连接文件
- 使用连接字(又称指针)来标识文件中各条记录之间的关系(类似于数据结构中的链表)
- 存取信息必须通过缓冲区,待获得连接字后,才能找到下一个物理块的位置,因而仅适宜于顺序存储
- 连接结构克服了顺序结构不适宜增删改的缺点,但在其他方面又会失去一些性能
索引文件
- 系统为每个文件建立索引表,利用索引表来搜索记录的文件称为索引文件
- 索引结构是连接结构的一种扩展,记录可以散列存储,具有直接读写任意记录的能录
直接文件
- 为了改善连接文件查找需遍历整个链接结构的缺点,利用哈希法将记录的关键字与其地址之间建立某种对应关系,以便实现快速存取。又称散列文件或哈希文件