基本概念
文件
基本概念
- 文件时存储和管理数据的容器
- 文件是由创造者所定义、具有文件名的一组元素的集合
- 在有结构的文件中,文件由若干个相关记录组成;
- 而无结构文件则被看成是一个字符流
- 文件在文件系统中是一个基本的管理单元,这个管理单元必然有一组属性
文件属性
- 类型
- 长度
- 物理位置
- 建立时间
- 等
类型
- 用途
- 系统文件
- 用户文件
- 库文件
- 数据形式
- 源文件
- 目标文件
- 可执行文件
- 存取控制属性
- 只执行
- 只读
- 读写
- 组织形式和处理方法
- 普通文件
- 目录文件(保存目录信息的文件)
- 特殊文件 (特指系统中的各类I/O设备)
文件系统
概念
操作系统中的各类文件、管理文件的软件,以及管理文件所涉及到的数据结构等信息的集合
- 有少数实时系统没有文件系统功能
功能
- 有效地管理文件的存储空间;(外存)
- 管理文件目录;
- 完成文件的读/写操作;
- 实现文件共享与保护;
- 为用户提供交互式命令接口和程序调用接口。
模型
对象及其属性
- 文件
- 目录:方便存取和检索
- 磁盘存储空间
对对象操纵和管理的软件集合
- 对文件存储空间的管理、
- 对文件目录的管理、
- 用于将文件的逻辑地址转换为物理地址的机制、
- 对文件读和写的管理,
- 以及对文件的共享与保护等功能
文件系统的接口
- 命令接口
- 程序接口
文件的基本操作
文件操作概述
- 最基本的文件操作:创建文件、删除文件。读文件、写文件、截断文件和设置文件的读/写位置(只有一个位置,上次操作结束的位置)
- 文件的“打开”和“关闭”操作:所谓“打开”,是指系统将指名文件的属性(包括该文件在外存上的物理位置)从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(或称为索引)返回给用户。 利用“关闭”(close)系统调用来关闭此文件,OS将会把该文件从打开文件表中的表目上删除掉
- 其它文件操作:对文件属性的操作,改变文件名、改变文件的拥有者,查询文件的状态等
Linux文件操作
close也会出错,一个是数据还没有写进一个是文件描述符无效
目录存储
目录管理的需求:
- (1)实现“按名存取”。
- (2) 提高对目录的检索速度。
- (3) 文件共享。
- (4) 允许文件重名。
文件控制块(FCB)
用于描述和控制文件的数据结构
文件目录:FCB的有序集合
内容
- 基本信息
- 地址信息
- 访问控制信息
- 使用信息
目录内容的组织方式
- FCB存储全部目录内容
- 存储部分目录信息,其余部分保存在索引系欸但。打开文件时将索引节点从磁盘读到内存中
索引节点:文件描述信息单独形成一个数据结构.文件名与索引节点分开
目录结构
- 单级目录结构
- 优点:简单,易于实现按名存取
- 缺点:查取速度慢,不允许重名,不便于实现文件共享
- 多级目录结构
- 层级目录结构
二级目录
树形结构
多级目录结构
- 主目录在这里称为根目录
- 数据文件称为树叶
- 其他目录均作为树的结点
路径名
- 相对路径(./)
- 绝对路径
目录操作
- 创建目录:在用户要创建一个新文件时,只需查看在自己的UFD及其子目录中,有无与新建文件相同的文件名。若无,便可在UFD或其某个子目录中增加一个新目录项。
- 目录删除采用下述两种方法处理:
- (1)不删除非空目录。
- (2)可删除非空目录。
- 改变目录:改变工作目录
- 移动目录:将子目录或者文件移动到其他目录下。
- 链接操作:通过链接让同一个文件具有多个父目录
- 查找:在目录中查找某个文件或者子目录
目录查询
线性检索法
- 单级目录:利用文件名,顺序查找
- 树形目录:利用路径名进行查找
Hash方法
外存管理
文件存储空间分配
从物理组织的角度看,文件由若干数据块组成.操作系统或文件管理系统负责为文件分配和管理数据块
存在的主要问题
- 划分磁盘空间
- 新建文件分配空间
- 已存在的文件增加存储空间
- 用什么数据结构聚在文件已分配的数据块和空闲数据块
外存组织方式
主要任务和目标
- 有效地利用外存空间
- 提高对文件的访问速度
- 提高磁盘系统的可靠性
组织方式
- 连续组织
- 链接组织
- 索引组织
连续组织
每个文件建立一个表项,记载第一个数据块的地址和文件长度
优点
- 顺序访问容易
- 顺序访问速度快(磁头移动距离短,效率最高)
缺点
- 要求有连续的存储空间(存在磁盘碎片,严重降低外存空间的利用率)
- 须事先指导文件的长度(文件利用率不高,不利于文件尺寸动态增长)
链接组织
将多个离散的盘块链接成一个链表——链接文件
优点
- 消除磁盘外部碎片,提高了利用率
- 对插入、删除和修改记录都非常容易;
- 能适应文件的动态增长,无需事先知道文件的大小
缺点
组织方式
- 隐式
- 每个目录项都必须包含指向链接文件第一个盘块和最后一个盘块的指针
- 每个盘块都含有指向下一个盘块的指针(盘块号)(存在额外开销)
- 缺点:只适合与顺序访问,随机访问极其低效
- 将几个盘块组成一个簇(cluster),减少查找时间和指针所站空间,但增大了内部碎片
- 显式
- 显示的存放在内存的一张链接表中,震哥哥磁盘仅设置一张文件分配表(FAT)
- 额外开销
索引组织
存放在FCB中
链接组织方式存在问题
- 不支持高效的直接存取
- FAT需占用较大的内存空间
优点
- 支持直接访问;
- 基于数据块的分区能消除外部碎片
缺点
- 大文件索引项较多,可能使一个数据块容纳不了一个文件的所有分区的索引;
- 索引块可能花费较多的外存空间
组织方式
- 单级索引组织
- 为每个文件分配一个索引块(表),再将分配给该文件的所有盘块号记录在改索引块中
- 在为之建立的目录项中添上指向该索引块的指针
- 额外开销:(块数占用位数)
- 两级索引
- 为索引块再建立一级索引,记录保存着第一级索引的索引块
- 增量式索引(混合索引)(期末必考)
- 同时采用:直接寻址(10个块号);一级索引;二级索引;三级索引
- 最大占有空间()
链式和索引每次请求都是请求一个盘块
磁盘空闲空间管理(期末必考)
- 关键问题:如何为新创建的文件分配存储空间
- 存储空间的基本单位:磁盘块
管理方法
掌握每种方法分配和回收的方法
空闲分区表
- 属于连续分配方式
- 适合于可变大小分区的连续分配方式
- 分配时,首先查找空闲分区中的各个表项,直至找到第一个大小适合的空闲分区
- 可以采用首次适应分配算法、最佳适应分配算法等
- 将该分区分配给文件,同时修改空闲分区表,删除相应表项
- 当删除文件释放出空间时,系统回收其存储空间,合并相邻空闲分区
- 对于交换分区一般都采用连续分配方式
- 对于较大文件,便于采用离散分配方式
空闲链表法
将所有空闲盘区构成一条空闲链
主要有两种形式
- 空闲盘块链
- 不支持连续分配
- 分配时,从链首开始依次分配合适数目的空闲盘块分配给用户
- 释放存储空间是,系统将回收的盘块依次插入空闲盘块链的末尾
- 分配和回收一个盘块的过程非常简单
- 空闲盘区链
- 每个盘区上含有用于指示下一个空闲盘区的指针和能指明**本盘区大小(盘块数)**的信息
- 支持连续分配
- 分配盘区于内存的动态分区分配类似,通常采用首次适应算法
- 回收盘块也将回收区和相邻接的空闲盘区相合并
- 提高对空闲盘区的检索速度
- 可以显式存放于内存
- 问题
- 回收小分区链接到空闲分区链表中需要很长时间
- 分配时间比较长
- 存在较多外部碎片
- 所以还是适用非连续存储
位示图
二维数组,用0(未用),1表示存储块的使用状态
从1或从0开始编号都可
分配
- 顺序扫描位示图
- 将找到的一个或一组二进制转换成与之对应的盘块号b=n(i-1)+j
- 修改位示图对应,map[i,j]=1
回收
- 将盘块号转换为位示图中的行号和列号[i=(b-1)/n+1;j=(b-1)%n+1]
- 修改位示图,令map[i,j]=0
优点
可以容易的找到一个或一组连续的空闲分区
问题
- 磁盘容量大的时候位图占用空间也很大
- 很难一次性将位图全部装入内存.搜索一个很大的位示图也会降低文件系统的性能
- 当磁盘空间快用完时文件系统的性能会严重降低
成组链接法
- 将磁盘空闲块分成若干组,用索引表表示
- 该组空闲块总数和空闲块块号存入下一组的第一个空闲块(从后向前分组),各组通过链接指针连在一起形成列表
- 最后不满100块的那组空闲块总数和各空闲块块号计入磁盘区专用管理块(超级块)的空闲盘块号占的
s_nfree
和s_nfree[100]
分配
- 未到栈底:出栈,将栈顶盘块分配给用户
- 已到栈底盘块:先将栈底盘块出栈,然后将该盘块数据读到内存空闲盘块号栈中,再将栈底盘块分配出去。
回收 - 栈未满:进栈,依次将回收盘块号压入栈中
- 栈已满:先将栈内数据写入将回收的磁盘块中,将栈清空,再将将回收盘块号进栈
注意事项
- 仅适用于离散分配形式,无法用于连续分配
- 优点
- 无需占用额外的磁盘空间
- 分配回收速度块
- 大小磁盘均可采用
- 缺点
- 不适于连续分配
文件共享和保护(不常考)