目的
功能:用于应用程序的输入、输出,同时为用户提供访问文件、修改文件、保存文件
数据项->记录->文件
文件的基本操作
创建文件
- 在文件系统中为文件找到空间
- 在目录中为新文件创建条目,其中包括文件的名称、在文件系统中的位置及其他可能的信息
写文件
- 执行系统调用,指明1)文件名称 2)写入内容
- 文件系统搜索目录以找到文件所在位置
- 系统为该文件维护一个写指针,当发生写操作时,更新写指针
读文件
- 执行系统调用,指明1)文件名称 2)要读入文件的内存位置
- 文件系统搜索目录以找到文件所在位置
- 系统为该文件维护一个读指针,当发生读操作时,更新读指针
4)删除文件
- 文件系统搜索目录找到该文件目录项,使之为空项
- 回收该文件所占用的存储空间
5)截断文件
- 允许文件所有属性不变,并删除文件内容,即将其长度设为0并释放其空间
6)文件重定位
- 文件系统搜索目录,将文件位置设置为给定值
注:文件系统其他操作可以通过上述基本操作组合而成
文件的打开和关闭
文件的打开
很多文件操作都涉及在目录中搜索该文件条目,进而获得该文件相关信息。许多系统要求在首次使用文件时,使用系统调用open将文件相关信息从外存拷贝到打开文件表的一个表目中,并将该表目的编号(也称索引)返回给用户,当用户需要文件操作时,使用该索引
- 第一个进程打开文件,在文件打开表中新增该文件条目(其中包含文件打开计数器),PCB添加相应表目
- 另一个进程打开上述文件,直接在PCB中添加表目
文件的关闭
- 当打开计数器为0时,回收分配给该文件的内存,若文件被修改,需要将文件写回外存
- 操作系统从文件打开表中删除该文件条目
- 释放该文件的文件控制块FCB
文件目录
FCB的有序集合
目录实现
利用路径名找到相应的目录项
- 线性列表
1)FCB
- 文件基本信息,如文件名称、文件物理位置、文件逻辑结构、物理结构
- 存取控制信息,如文件存取权限
- 使用信息,如建立时间、修改时间
2)索引结点
- Unix将文件名和文件信息分开存储,索引结点指向文件信息存储位置
- 一个目录项包含 1)文件名称 2)索引结点
存放在磁盘上的索引结点称为磁盘索引结点,索引结点所指存放内容包含:
- 文件主标识符,如该文件的个人或小组的标识符
- 文件类型,如普通文件、目录文件或特别文件
- 文件存取权限,各类用户对该文件的存取权限
- 文件物理地址
- 文件长度
- 文件链接计数
- 文件存取时间
存放在内存中的索引结点称为内存索引结点 (文件打开时磁盘索引结点复制到内存索引结点中,以便于使用),相较于磁盘索引结点,增加以下内容:
- 索引结点编号,用于标识内存索引结点
- 状态,指示i结点是否上锁或被修改
- 访问计数
- 逻辑设备号,文件所属文件系统的逻辑设备号
- 链接指针
3)目录结构
单目录结构
两级目录结构
多级目录结构
无环图目录结构
4)文件共享
基于索引结点(硬链接)
基于符号链接(软链接)
建立符号链接时,引用计数值直接复制;建立硬链接时,引用计数值加1
层次结构
- 用户调用接口:提供与文件及目录相关的系统调用
- 文件目录系统:管理用户进程的文件打开表…
- 存取控制验证模块
- 逻辑文件系统与文件信息缓冲区:文件的逻辑结构记录转换为文件逻辑结构内的相应块号
- 物理文件系统:将逻辑块号转换为物理地址
- 赋值分配模块:分配和回收辅存空间
文件存储空间管理(外存空闲空间管理)
基础知识
一个文件存储在文件卷中
文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可由多个物理盘组成
在一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的
文件卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲空间管理表格及存放逻辑卷信息的超级块
文件存储器空间管理方法
文件存储设备分为许多大小相同的物理块,并以块为单位交换信息,因此文件存储设备空间管理实质上是对空闲块的组织和管理,它包括空闲块的组织、分配与回收
1、空闲表法
与内存的动态分配类似
系统为外存上的所有空闲区建立一张空闲盘块表,所有空闲区按其起始盘块号递增的次序排列
序号 | 第一个空闲盘块号 | 空闲盘块数 |
---|---|---|
1 | 2 | 4 |
2 | 9 | 3 |
3 | 15 | 5 |
4 | - | - |
2、空闲链表法
将所有空闲盘块区以链表的方式连接起来,根据构成链所用的基本元素不同,可把链表分成两种形式:空闲盘块链和空闲盘区链
1)空闲盘块链
将外存上所有空闲空间以盘块为单位链接起来
当用户因创建文件而请求分配空闲空间时,系统从链首开始,依次摘下适当数目的空闲盘块分配给用户
当用户因删除文件而释放存储空间时,系统将回收的盘块依次插入空闲盘块链的末尾
2)空闲盘区链
将外存上所有空闲空间以盘区(包含若干盘块)为单位链接起来
在每个盘区上除了含有下一个空闲盘区的指针外,还包含本盘区的大小信息
分配盘区与内存的动态分配类似,一般采用首次适应算法
3、位示图法
利用二进制的一位来表示磁盘中一个盘块的使用情况,“0”表示盘块空闲,“1”表示盘块已分配
4、成组链接法
文件分配方式(为文件分配空闲磁盘空间)
基础知识
文件分配对应于文件的物理结构,是指如何为文件分配磁盘块
也即对磁盘非空闲空间的管理
文件分配方式
1、连续分配
要求每个文件在磁盘上占有一组连续的块
目录条目包括开始块的地址和该文件所分配区域的长度
1)优点
- 实现简单
- 访问磁盘时需要的寻道数和寻道时间最小
- 存取速度快
- 支持顺序访问和直接访问
2)缺点
- 文件长度不宜动态增加
- 反复增删文件后会产生外部碎片(与内存动态分配类似)
因而只适用于长度固定的文件
目录如下
file | start | length |
---|---|---|
file1 | 0 | 2 |
file2 | 9 | 3 |
file3 | 19 | 6 |
例题解答
2、链接分配
每个文件对应一个磁盘块的链表
包括隐式链接和显式链接两种链接方式
优点:
- 消除了外部碎片
- 利于文件动态增长
1)隐式链接
除最后一个盘块外,每个盘块末尾都有指向下一盘块的指针
目录条目包括文件第一块的指针和最后一块的指针
目录如下
file | start | end |
---|---|---|
file1 | 11 | 7 |
缺点:
- 无法直接访问盘块
- 当其中一个指针丢失或损坏,会造成文件数据的丢失
2)显式链接
整个磁盘中设置一张文件分配表(FAT),表项包括磁盘块序号,下一块,下一块为“-1”是文件最后一块磁盘块,“-2”是空闲磁盘块
目录条目包括文件名和起始块号
优点:
- FAT在系统启动时就会读入内存,因此查找FAT的过程是在内存中进行的,显著提高了检索速度,降低了磁盘访问次数
- 让链式分配支持直接访问
文件分配表如下:
盘块号 | 下一块 |
---|---|
0 | -2 |
1 | -1 |
2 | 3 |
3 | 1 |
… | |
100 | -2 |
目录如下:
file | start |
---|---|
file1 | 2 |
3)索引分配
把每个文件分配得到的磁盘块集中放在一起构成索引块(表)
索引表表项表示第i块对应磁盘的磁盘块号
目录条目包括索引表所在的磁盘块号
一般会将文件的索引块读入内存缓冲区,以加快文件访问速度
目录如下:
file | index block |
---|---|
file1 | 22 |
优点:
- 没有外部碎片
- 支持文件动态增长
缺点:
- 索引块占用空间
由于每个文件都有索引块,因此索引块应尽可能小,但是索引块太小又无法支持大型文件,因此引入了多级索引机制