文件结构
- 数据项:
(1) 基本数据项:用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位, 即原子数据,又称为数据元素或字段。(学号、年龄)
(2) 组合数据项:它是由若干个基本数据项组成的,简称组项。(工资、地址)
- 记录:记录是一种相关数据项的集合,用于描述一个对象某方面的属性。其中关键字是能唯一标识一个记录的数据项。
- 文件:文件是指由创建者所定义的、 具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种。 在有结构的文件中,文件由若干个相关记录组成;而无结构文件则被看成是一个字符流。文件在文件系统中是一个最大的数据单位,它描述了一个对象集
文件系统的管理对象
-
文件
-
目录
-
磁盘存储空间
文件控制块(FCB)
-
描述和控制文件的数据结构
-
与文件一一对应
-
文件控制块的有序集合——文件目录
索引结点(i结点,inode)
- 将FCB拆解,目录文件中只保留文件名,除文件名外其他文件描述信息形成单独的数据结构,称为索引结点
- 拆解原因:原来的FCB信息太多,查询文件需要将目录文件调入内存,导致内存消耗过大。
- 引入索引节点后,文件目录项只需包含文件名和指向索引节点的指针,降低在文件目录中查找文件的系统开销
- 磁盘索引结点、内存索引结点
文件的逻辑结构(-----数据如何组织起来?)
- 无结构文件(流式文件):以字节byte为单位,因为没有结构,就没有特征,只能穷举遍历文件。
- 有结构文件(记录式文件):
- 顺序文件:①串结构(时间顺序排序) ②顺序结构(关键字排序)【只有顺序文件能保存在磁带上,定长记录比变长记录查找快】
- 索引文件: 将变长记录文件进行改进,使之能够直接访问(索引表[定长记录])(特点:具有较高的检索速度, 但增加了存储空间)
- 索引顺序文件: 索引顺序文件是顺序文件和索引文件结合的产物,它将顺序文件的记录分为若干组,并为顺序文件建立一张索引表,表中为每组的第一个记录建立一个索引项,其中包含记录的键值和指向该记录的指针,对于较大的文件可建立多级索引。(特点:同组无序,组间有序)
- 直接文件(Hash文件、散列文件):对于直接文件,则可根据给定的记录键值,直接获得指定记录的物理地址。换言之,记录键值本身就决定了记录的物理地址
文件的实现(物理结构)
文件物理结构逻辑图
文件分配方式
-
连续分配
为每一个文件分配一组连续的磁盘物理块
一般情况下,这些盘块都集中于一个(或有限几个)磁道上,访问时一般无需移动(或无需频繁移动)磁头(寻道数和寻道时间最小)
特点:
- 顺序访问,直接访问,实现简单,存取速度快
- 外部碎片多,内部碎片少
- 适用于长度固定的文件
-
链接分配
离散分配,消除外部碎片,提高磁盘利用率,动态为文件分配盘块
-
隐式链接:
文件目录中的每个目录项都包含指向链接文件第一个盘块和最后一个盘块的指针
- 缺点:只适合顺序访问,对随机访问是极其低效的;稳定性不好
-
显式链接:
把用于链接文件各物理块的指针,显式地存放在内存的一张链表中,即整个磁盘仅有一张表,称为文件分配表(FAT)
-
优点:查找过程在内存中进行,因而速度很快,并且大大减少了访问磁盘的次数
-
缺点:
- 不能支持高效的直接存储
- FAT需要占用较大的内存空间
-
FAT16、FAT32(表项的位数为16、32位)
-
-
-
索引分配
-
单级索引:为每个文件分配一个索引块(表),把分配给该文件的所有盘块号都记录在该索引块中。因而该索引块就是一个包含许多盘块号的数组,建立文件时,就在文件的目录项中填上指向该索引块的指针
- 特点:
- 支持直接访问
- 不产生外部碎片
- 外存空间浪费
- 特点:
-
多级索引: 当文件规模较大时,为它分配的索引块就不止一个,因而就可以建立多级索引
-
混合索引:将多种分配方式相结合而形成的一种分配方式。既可采用直接分配又可采用索引分配。UNIX系统中就是如此。
-
文件存储空间管理
-
空闲表法:
序号 第一空闲盘块号 空闲盘块数 1 2 3 2 9 1 3 15 4 4 — — -
分配算法(内存动态分配算法):首次适应算法、循环首次适应算法
-
回收(删除):考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并
-
-
空闲链表法:
- 空闲盘块链:盘块号、下一结点指针
- 空闲盘区链:首个盘块号、盘区大小、下一盘区指针
-
位示图法:
用二进制位表示磁盘块是否使用过(0:未使用;1:已经使用)
-
成组链表法:
在UNIX系统中,将空闲块分成若干组,每100个空闲块为一组,每组的第一空闲块登记了下一组空闲块的物理盘块号和空闲块总数
文件目录
- FCB的有序集合称为文件目录
- 一个FCB就是一个文件目录项
文件目录管理的要求:
-
允许文件重名
-
提高对目录的检索速度
-
实现“按名存取”
-
文件共享
目录文件的逻辑结构(----FCB如何组织起来?)
-
单级目录结构
在整个系统中只建立一张目录表,每个文件占一个目录项。
- 优缺点:
- 简单且可实现按名存取,不允许重名
- 查找文件速度慢
- 不便于实现文件共享
- 只适用于单用户环境,多用户不适用
- 优缺点:
-
两级目录结构
为每个用户建立一个文件目录,此外系统中再建立一个主文件目录,每个用户文件目录在主文件目录中占一个目录项,其目录项包括用户名和指向该用户目录文件的指针。
-
优点:
- 提高了检索目录的速度
- 不同的文件目录中可以使用相同的文件名
- 不同用户可用不同的文件名访问同一个共享文件
-
缺点:
- 灵活性不够,不能对文件分类
-
-
多级目录结构
-
从主目录开始把全部目录文件名与数据文件名依次用“/”连接起来便构成该文件的路径名,此路径名又叫绝对路径名
-
当前目录又叫工作目录,从当前目录出发的路径名叫相对路径名
-
优点:更好的对文件进行分类管理,层次清晰,能够有效进行文件管理与保护
-
缺点:需要按路径名逐级访问中间结点,增加了磁盘访问次数
-
-
无环图目录结构
树形目录结构+有向边=无环图目录
被多条有向边指向的目录文件就是共享文件
目录的实现(物理结构)
- 线性列表
- 哈希表
文件共享
文件共享原因:节约存储空间
-
硬链接共享:基于索引结点共享文件
-
文件的索引节点包括文件的物理地址及其他文件属性等信息,这些内容不放在目录项中
-
文件目录只设置文件名和指向索引节点的指针
-
用户对文件的添加和修改只引起索引节点内容的改变,对其它用户可见,能提供给其它用户共享
-
-
软链接共享:利用符号链实现文件共享 (Windows的创建快捷方式)
用户想共享一个文件时,系统为其创建一个LINK类型的新文件,新文件中包含被链接文件的路径名,这种链接方式称为符号链接,新文件中的路径名叫做符号链
- 优点:可用于计算机网络,通过网络地址及文件在机器中的路径实现文件的链接和共享
- 缺点:每次访问共享文件都要多次读盘,系统开销较大