4.1_1 初识文件管理
文件的概念
文件是以硬盘为载体的存储在计算机上的信息集合
系统运行时,计算机以进程为载体进行资源调度和分配;而用户进行输入和输出中,以文件为基本单位
文件的属性
操作系统通过文件控制块FCB来维护文件元数据
- 文件名:方便用户找到文件。同一目录下不允许有重名文件
- 标识符:os用于区分各个文件的一种内部名称
- 类型:指明文件的类型
- 位置
- 存放路径:给用户使用
- 在外存中的地址:os使用,用户不可见
- 大小
- 创建修改时间
- 文件创建者、所有者
- 保护信息:对文件进行保护的访问控制信息
文件内部数据如何组织?
- 无结构文件:例如文本文件,由二进制或字符流组成,又称流式文件
- 有结构文件:例如数据库表,由一组相似的记录组成,又称记录式文件
- 各个记录之间如何组织(顺序存放 or 索引表)是文件的逻辑结构探讨的问题
文件之间如何组织?
- 目录结构
操作系统应该向上提供哪些功能
- 创建文件
- 读文件
- 写文件
- 删除文件
- 打开文件(读写文件前需要打开文件
- 关闭文件(读写文件后需要关闭文件
- 截断文件:允许文件所有属性不变,删除文件内容,长度设置为0并释放空间
从上往下看,文件应该如何存放在外存
其他需要操作系统实现的文件管理功能
文件共享
文件保护
防止文件共享可能导致文件被破坏或被未经核准的用户修改
文件保护通过口令保护、加密保护和访问控制实现。其中口令和加密是为防止文件被他人窃取或存取,访问控制用于控制用户对文件的访问方式
访问类型
对文件的保护可从限制对文件的访问类型中出发。可加以控制的访问类型包括
- 读文件
- 写文件
- 执行文件:将文件装入内存中并执行
- 添加:将新信息添加到文件结尾部分
- 删除:删除文件,释放空间
- 列表清单:列出文件名和文件属性
其他高层功能操作可以通过系统程序调用低层系统调用实现。保护可以只在低层提供
访问控制
访问控制常用方法是根据用户身份进行控制:为每个文件和目录增加一个访问控制列表,规定每个用户名及其允许的访问类型。精简的访问列表采用
- 拥有者:创建文件的用户
- 组:一组需要共享文件且具有相似访问的用户
- 其他:系统内所有其他用户
- 口令:用户在创建一个文件时提供口令(附在FCB中),同时告知允许共享该文件的所有用户。用户请求访问文件时需要提供口令
- 优点:时间空间开销不大
- 缺点:口令直接存在系统内部,不够安全
- 密码:用户对文件进行加密,访问时需要提供密钥。
- 优点:保密性强,节约空间
- 缺点:编码和译码都需要时间
4.1_2 文件的逻辑结构
- 逻辑结构:用户看来,文件内部的数据如何组织起来
- 物理结构:操作系统看来,文件的数据如何存放在外存中
有结构文件的逻辑结构
顺序文件
文件中的记录顺序排列,记录可以是定长或可变长的,各个记录在物理上可以顺序存储或链式存储
- 串结构:记录之间的顺序与关键字无关
- 顺序结构:记录之间的顺序按照关键字顺序排列
- 链式存储无法实现随机存取
- 顺序存储可变长记录,无法随机存取
- 原因:无法预知每条记录的长度
- 顺序存储定长记录
- 可实现随机存取
- 采用顺序结构可以快速找到某关键字对应的记录
- 缺点是增加/删除记录困难
Tips:题目说的顺序文件指的是物理上顺序存储的顺序文件
索引文件
- 建立一张索引表加快文件检索速度,每条记录对应一个索引项
- 索引表本身是定长记录的顺序文件,可以随机存取
- 文件中的记录在物理上可以离散存放
- 可以用不同的数据项建立多个索引表
- 主要用于需要对信息处理的及时性要求较高的场合
索引顺序文件
为了解决索引文件空间利用率低的问题
- 一组记录对应一个索引表项
- 为了进一步提高检索效率,可以为顺序文件建立多级索引表
4.1_3 文件目录
文件控制块
文件控制块FCB是用于存放控制文件所需的各种信息的数据结构
- FCB的有序集合称为文件目录,一个FCB就是一个文件目录项
- 一个文件目录也被视为一个文件,称为目录文件
- FCB包含文件的基本信息、存取控制信息、使用信息
- FCB中最重要最基本是文件名、文件存放的物理地址;FCB实现文件名和文件之间的映射,使用户程序可以实现按文件名存取
需要对目录进行的操作
- 搜索
- 创建文件:在其所属目录中新增一个目录项
- 删除文件:在目录中删除相应的目录项
- 显示目录:用户可以请求显示目录内容
- 修改目录:文件属性变化时需要修改相应的目录项
目录结构
单级目录结构
早期操作系统不支持多级目录,整个系统只建立一张目录表,每个文件占一个目录项
- 实现了按名存取
- 不允许文件名重复
- 不适用于多用户操作系统
两级目录结构
早期操作系统,采用两级目录结构,分为主文件目录(MFD)和用户文件目录*(UFD)
多级目录结构(树形目录结构
- 文件分类方便
- 可以有效进行文件的管理和保护
- 缺点:不方便实现文件共享(为此提出“无环图目录结构”
无环图目录结构
索引节点 FCB的改进
思路:查找目录的过程中,只需要用到文件名,找到后才需要调出其他信息,因此这部分信息没有必要调入内存
- 存放在外存的索引节点称为磁盘索引节点
- 索引节点放入内存后称为内存索引节点
- 相比之下内存索引节点需要增加一些信息,例如文件是否被修改,此时有几个进程在访问该文件
4.1_4 文件的物理结构(文件分配方式
连续分配
每个文件在磁盘上占有一组连续的块
- 文件目录记录存放的起始块号和长度(占用多少个块)
- 物理块号=起始块号+逻辑块号
- 支持顺序访问和随机访问
- 连续分配的文件在顺序读/写时速度最快
- 读取某个磁盘块时需要移动磁头
- 磁盘块相隔越远,移动磁头所需时间越长
- 连续分配的文件不方便进行扩展
- 存储空间利用率低,会产生难以利用的磁盘碎片
- 可以用紧凑技术来处理碎片,时间开销很大
链接分配
采取离散分配的方式,为文件分配离散的磁盘块,然后指针链接。分为隐式链接和显式链接两种
Tips:题目没有说明的话,默认隐式链接
隐式链接
- 隐式链接的指针对用户是透明的
- 方便文件扩展,不会产生磁盘碎片
- 只支持顺序访问,不支持随机访问,查找效率低
- 存储指针也要消耗存储空间
显式链接
用于链接文件各个物理块的指针显式存放在一张表中,称为文件分配表(FAT
- 逻辑块号转换为物理块号的过程不需要读磁盘操作
- 支持顺序访问和随机访问
- 由于块号转换不需要访问磁盘,因此相比于隐式链接,访问速度快很多
- 不会产生外部碎片,便于文件拓展
- FAT需要占用一定存储空间
索引分配
允许文件离散分配在磁盘块中。系统会为每个文件建立一张索引表,表中记录文件的各个逻辑块对应的物理块
索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块
- 可以实现随机访问
- 容易实现文件拓展
- 索引表需要占一定存储空间
索引表太大了,一个索引块装不下,怎么搞?
- 链接方案:多个索引块链接起来存放
- 必须顺序读取所有索引块,磁盘I/O次数过多,效率低
- 索引分配:建立多层索引,类似多级页表
- 混合索引
- 对于小文件,访问一个数据块所需的读磁盘次数更少
考点:
- 计算文件的最大长度——各级索引表最大长度不能超过一个块
- 访问某个数据块所需的读磁盘次数
- 注意题目是否已经把顶级索引块调入内存