文件系统
文件和文件系统
文件
- 文件的概念
概念上来讲,文件是具有符号名的、在逻辑上有完整意义的一组相关信息项的有序集合
- 文件的类型
- 文件用途:系统文件、库文件、用户文件
- 文件保护级别:只读文件、读写文件、只执行文件、和不保护文件
- 文件存取方式:顺序存取文件、随机存取文件
- 实际操作系统中的文件分类
###文件系统
- 文件存储空间的管理
- 文件目录管理
- 文件逻辑地址到物理地址映射机制
- 文件读写管理
- 文件共享和保护
文件操作
- 创建文件
- 删除文件
- 打开文件
- 关闭文件
- 读文件
- 写文件
- 设置文件读写指针
- 获取文件属性
- 设置文件属性
- 重命名文件
- 锁定文件
文件的结构和存取
文件的逻辑结构
从用户观点出发观察到的文件结构
- 有结构文件
有结构文件由若干条记录构成。记录是用户程序与文件系统交换信息的基本单位。其数据组织形式分为三级:数据项、记录和文件
- 顺序文件
串结构:记录之间的顺序与关键字无关,通常是按照记录存入时间的先后排序,每次检索都需要从头开始逐个查找,检索比较耗时 顺序结构:按照关键词排序,可以利用有效的查找算法,检索速度和效率相对较高 顺序文件优点是顺序存取时效率高,缺点是不利于文件的查找,动态增加或者删除文件记录
- 索引文件
为逻辑文件的信息建立一个索引表,索引表的表项存放文件记录的长度和逻辑文件的起始位置 索引文件的优点是可以随机访问,也有利于文件的增加和删除,但是索引表的使用增加了空间开始,索引表的查找策略对文件系统的效率影响很大
- 索引顺序文件
顺序文件中的所有记录分成若干组,为顺序文件建立一张索引表,并为每组中的第一个记录在索引表建立一个索引项,期中包含该记录的关键字和指向该记录的指针 大大提高了顺序存取的速度,但增加了存储开销
- 直接文件和散列文件
直接文件是建立关键字和相应记录物理地址之间的对应关系,这样通过关键字可以直接找到记录的物理地址 散列文件是一种典型和最为广泛的直接文件,转换结果直接决定记录的物理地址,存取速度高,但可能使不同关键字得到相同函数值而发生冲突
- 顺序文件
- 无结构文件
内部不再划分记录,而是由一组相关信息组成的有序字符流,长度按字节计算,提高了操作系统的灵活性,减少了操作系统的代码量
文件的物理结构
物理块(簇)是磁盘上一组连续扇区(512字节),它是分配和传输信息的基本单位
簇数=分区大小/盘块大小
FAT表大小=簇数*盘块号大小
- 连续文件
把逻辑文件的信息顺序地存放到一组相邻接的物理盘块中而形成的物理文件
顺序存取速度快,也能方便地实现文件的随机存取,但磁盘利用率不高,不方便文件的动态增长,容易产生磁盘碎片,降低磁盘存储空间的利用率
- 链接文件
把一个逻辑上连续的文件分散存放在多个不连续的磁盘块中,再使用链接指针将这多个离散的磁盘块链接起来
- 隐式链接
文件所占据的每个磁盘块的最后一个单元中,设置一个链接指针,用于指示该文件的下一个磁盘块的盘块号,文件最后一个磁盘块中的链接指针存放文件结束标志,然后把文件名、第一个磁盘块号、最后一个磁盘块号填入该文件目录项中即可
只能对文件进行顺序存取、如果文件中某个磁盘块出现故障,将导致后续盘块指针丢失,但增大了磁盘空间的内部碎片
- 显式链接
把链接文件各磁盘块的链接指针显式地存放在外存的一张链接表中
显著提高了文件的检索速度,能实现随机存取,FAT会占据较大的内存空间,FAT较大时,随机存取的效率会降低
- 隐式链接
- 索引文件
- 单级索引文件
逻辑上连续的文件仍然可以分散存放在多个不连续的磁盘块中,系统为每个文件建立一张索引表,每个逻辑块占一个表项,以逻辑块号为序,表项内容为该逻辑块所对应的磁盘块号
支持高效的随机访问,不会产生外部碎片,也支持文件的动态增长,每个文件都需要额外分配索引块,增加了系统存储空间的开销
- 多级索引文件
将索引表离散存放在多个索引块中,再为这些索引块建立一级索引,即再分配一个索引块用于存放索引块的盘块号
- 混合索引文件
多种索引分配方式相结合形成的一种文件
- 单级索引文件
文件存取
- 顺序存取
- 随机存取
文件目录管理
- 实现按名存取
- 提高目录的检索速度
- 允许文件重名
- 允许文件共享
文件目录概念
- 文件控制块
文件控制块是用于描述和控制文件的数据结构,保存系统管理文件所需要的全部属性信息
- 基本信息
文件名、用户名、文件类型、文件的物理地址、文件长度、文件的逻辑结构和物理结构
- 存取控制信息
描述文件的存取权限,包括文件主、文件主同组用户、一般用户的对该文件存取权限
- 使用信息
文件的建立日期及时间、上次存取文件的日期及时间、当前的使用状态信息以及共享链接计数等
- 基本信息
- 索引节点
- 索引节点的引入
采用将文件控制块中的文件名与其他描述信息分开的方法,将文件名以外的描述信息单独形成一个数据结构,称为索引节点
- 索引节点分类
- 磁盘索引节点
- 内存索引节点
- 索引节点的引入
文件目录结构
- 单级目录结构
整个文件系统中只建立一张线性目录表,每个文件的目录项占一个表项,其中记录了文件名、文件长度、文件类型、存取控制信息、物理地址以及其他文件描述信息
查找速度慢、不允许文件重名、不便于实现文件共享
- 两级目录结构
将文件目录分为主文件目录和用户文件目录,系统为每个用户建立一个单独的用户文件目录UFD
提高了目录检索速度、允许文件重名、不同用户可以使用不同文件名来访问系统中的同一个共享文件、缺乏灵活性
- 多级目录结构
在树形目录结构中,主目录再称为根目录,目录树中的非叶结点均为目录文件,叶节点为数据文件
层次清楚、解决了文件重名问题、便于实现文件共享、查询速度更快
目录检索技术
- 线性检索法
- Hash方法
文件存储空间管理
- 空闲表法
空闲表法是文件系统为外存上的所有空闲分区建立一张空闲表,每个空闲区占一个表项,包括序号、该空闲区的起始盘号以及空闲盘块数等信息,再将所有空闲区按其起始盘号递增的次序排列
- 空闲块链表法
给磁盘的每一个空闲盘块设置一个指针,指向另一个空闲盘块,这样磁盘上的所有空闲链接在一起形成一个链表
- 位示图
用一位二进制来表示磁盘中一个盘块的使用情况
- 成组链接法
先把所有空闲块按照固定数量分成若干组,把每组(第一组除外)的磁盘总块数和该组的所有磁盘块号记录到前一组的最末磁盘块中,第一组的磁盘块总块数和各磁盘块号记录在空闲盘块栈中,放到超级块里
文件共享和文件保护
文件共享
-
基于索引节点的共享方式
当某一个用户需要共享文件时,可在自己的文件目录中建立一个目录项,填入为共享文件所取的名字以及指向该共享文件索引节点的指针(硬链接)
开销不大,缺点是当有多个用户共享文件时,文件主不能删除文件,不能实现跨文件卷的文件共享
-
利用符号链接实现文件共享
创建一个称为符号链接的新文件(软链接)
文件保护
- 文件备份
- 批量备份
- 全量转储
- 增量转储
- 同步备份
- 批量备份
- 文件访问保护
- 口令保护
- 加密保护
- 设置文件使用权限
- 访问控制矩阵
- 访问控制表
- 用户权限表
磁盘调度
磁盘存储器管理
- 数据的组织和格式
磁盘容量=磁头数*柱面数*扇区数*每扇区字节数
- 磁盘的类型
- 固定头磁盘
- 移动头磁盘
- 磁盘访问时间
- 寻道时间=启动磁臂的时间+磁道数*移动一条磁道所需要的时间
- 旋转延迟时间=(1/旋转速度)/2
- 传输时间=(每次读写的字节数)/(旋转速度*一个磁道上的字节数)
磁盘调度算法
- 移臂调度
- 先来先服务FCFS算法
按照进程请求访问磁盘的先后次序进行调度
- 最短寻道时间优先SSTF算法
总是从等待访问者中挑选寻找时间最短(即与当前刺头位置最近)的那个请求执行的
- 扫描SCAN算法
从磁头当前移动向上,选择与当前磁头所在磁道距离最近的柱面访问者,如果沿臂的移动方向无请求访问时,就改变磁头的反方向再选择
- 循环扫描CSAN算法
固定磁头单向移动,当磁头移动到最外磁道时立即返回到最里面的磁道,循环扫描
- N-Step-SCAN算法
将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列,而每处理一个子队列时又采用SCAN算法
- FSCAN(Fair SCAN)算法
只将磁盘请求队列分成两个子队列
- 先来先服务FCFS算法
- 旋转调度
总是选取与当前读写头最近的那个I/O请求