目录
6.1 文件系统概述
1、文件系统的定义
文件系统:是指操作系统中的
- 各类文件
- 管理文件的软件
- 管理文件所涉及到的数据结构
等信息的集合。
2、文件系统的结构
3、文件系统的功能
- 有效地管理文件的存储空间
- 管理文件目录
- 完成文件的读/写操作
- 实现文件共享与保护
- 为用户提供交互式命令接口和程序调用接口
6.1.1 文件、记录和数据项
6.1.2 文件类型
6.1.3 文件系统模型
文件系统概念:文件和对文件进行操纵和管理的软件集合
文件系统模型分为三个层次
6.1.4 对文件的操作
open( ):打开一个文件,并指定访问该文件的方式,调用成功后返回一个文件描述符。
creat ( ) :打开一个文件,如果该文件不存在,则创建它,调用成功后返回一个文件描述符。
close ( ) :关闭文件,进程对文件所加的锁全都被释放。
read ( ) :从文件描述符对应的文件中读取数据,调用成功后返回读出的字节数。
write ( ) :向文件描述符对应的文件中写入数据,调用成功后返回写入的字节数。
6.2 文件的逻辑结构
对于任何一个文件,都存在着以下两种形式的结构:
- 文件的逻辑结构,又称文件组织,是用户可以直接处理的数据及其结构。
- 文件的物理结构,又称文件的存储结构,是指文件在外存上的存储组织形式。
6.2.1 文件逻辑结构的类型
6.2.2 顺序文件(Sequential File)
1、逻辑记录的排序
2、对顺序文件的读/写操作
① 对定长记录的顺序文件的读写
读指针 Rptr:
- 读指针指向下一个要读的记录的首地址
- 每读完一条记录,指针做相应的修改
Rptr = Rptr + L
写指针 Wptr:
- 写指针指向下一个要写的记录的首地址
- 每写完一条记录,指针做相应的修改
Wptr = Wptr + L
其中,L 为定长记录的长度。
② 对变长记录的顺序文件的读写
- 设置读写指针
- 每个记录的长度存放在该记录之前的单元中
- 每完成一次读写,读写指针加上刚读或写完的记录的长度 Li
③ 首地址的计算
6.2.4 索引文件(Index File)
检索步骤:
- 根据用户提供的关键字,使用折半查找法查找相关表项
- 根据该表项中的指针值,访问该记录
- 增加新记录时,需要修改对应的索引表
索引文件的检索速度较快,但需要存储。
6.2.5 索引顺序文件(Index File)
建立方法:首先将变长记录顺序文件中的所有记录分为若干个组,如 50 个记录为一个组。然后为顺序文件建立一张索引表,并为每组中的第一个记录在索引表中建立一个索引项,其中含有该记录的关键字和指向该记录的指针。
检索步骤:
- 根据用户提供的关键字,以某种查找方法查找该组对应的表项
- 根据该表项中的指针值,得到该组第一个记录在主文件中的位置
- 再利用顺序查找法扫描主文件,在对应的分组中查找要求的记录
6.2.6 直接和哈希文件
直接文件:根据给定的关键字值,直接获得指定记录的物理地址。
- 关键字值本身就决定了记录的物理地址
- 这种由关键字值到记录物理地址的转换被称为键值转换
组织直接文件的关键,在于用什么方法进行从关键字值到物理地址的转换。
6.3 文件的物理结构
操作系统或者说文件管理系统负责为文件分配和管理数据块:
- 从逻辑组织的角度看,文件由若干记录组成
- 从物理组织的角度看,文件由若干数据块组成
接下来需要解决的问题:
- 如何划分磁盘空间?
- 如何为一个新建文件分配空间?
- 如何为一个已存在的文件增加存储空间?
- 用什么数据结构记载文件已分配到的数据块和空闲数据块?
外存的组织方式
为文件分配外存空间时所要考虑的主要问题是:怎样才能有效地利用外存空间和如何提高对文件的访问速度。
目前,常用的外存分配方法有:
- 连续分配
- 链接分配
- 索引分配
6.3.1 连续分配
连续分配:为每个文件分配一组相邻接的盘块。即把逻辑文件中的数据顺序地存储到物理上邻接的各个盘块中,这样形成的物理文件可以进行顺序存取。
一组盘块的地址定义了磁盘上的一段线性地址。
6.3.2 链接分配
当将一个逻辑文件存储到外存上时,并不要求为整个文件分配一块连续的空间,而是可以将文件装到多个离散的盘块中。
链接分配:通过每个盘块上的链接指针,将同属于一个文件的、多个离散的盘块链接成一个链表。把通过这种方式形成的物理文件称为链接文件。
1、隐式链接
2、显式链接
两者的区别在于:
- 隐式链接的指针存放在每个盘块中
- 显式链接的指针存放在文件分配表 FAT 中
6.3.3 索引分配
链接分配方式虽然解决了连续分配方式所存在的问题, 但又出现了另外两个问题:
① (显示) 链接分配方式不能支持高效的直接存取:在对一个较大文件进行直接存取时,必须首先在 FAT 中顺序查找许多盘块号。
② FAT 需占用较大的内存空间:由于一个文件所占用盘块的盘块号是随机地分布在 FAT 中的,因而只有将整个 FAT 调入内存,才能保证在 FAT 中找到一个文件的所有盘块号。
1、单级索引分配
原理:
- 给每个文件分配一个索引块
- 索引块就是一个盘块,用于记录分配给该文件的所有盘块号
- 在建立一个文件时,只需在对应目录项中填上指向该索引块的指针
- 该目录项是在文件创建时新建的
优点:
- 支持直接访问:可直接从索引块中找到第 i 个盘块的盘块号
- 不会产生外碎片:由于不需连续分配,因此每个盘块都能被分出去
存在的问题:
可能需要花费较多的外存空间。每当建立一个文件时,便需为之分配一个索引块。对于小文件如果采用这种方式,索引块的利用率将是极低的。极端情况:每个文件的文件内容只会占用一个盘块,那么外存空间的利用率将只有 50%!
2、两级索引分配
当 OS 为一个大文件分配磁盘空间时,会增加许多索引块。当文件太大,其索引块太多时,这种方法是低效的。解决办法:两级索引分配方式。
设文件系统采用两级索引分配方式,如果每个磁盘块的大小为 1KB,每个盘块号占 4B,则单
个文件的最大长度是多少?
解:每个盘块可有 1KB/ 4B=256 个索引项,则两级索引下单个文件最大长度:256*256*1KB=64MB
3、增量式索引分配(混合索引方式)
在 UNIX System V 的索引结点中设有 13 个地址项,包含:i.addr(0) ~ i.addr(12) 。
- i.addr(0)~i.addr(9):直接地址
- i.addr(10):一次间接地址
- i.addr(11):二次间接地址
- i.addr(12):三次间接地址
在考试中,题干中给出的地址组织方式可能与 UNIX System V 的不同,请注意!
问题(10分):存放在某个磁盘上的文件系统,对于采用混合索引分配方式,其 FCB 中共有 13 项地址项,第 0~9 个地址项为直接地址,第 10 个地址项为一次间接地址,第 11 个地址项为二次间接地址,第 12 个地址项为三次间接地址。如果每个盘块的大小为 512 字节,盘块号需要 3 个字节来描述,则每个盘块最多存放 170 个盘块地址:
(1) 该文件系统允许的最大长度是多少?
10*512+170*512+170^2*512+170^3*512=2471040KB
(2) 将文件的字节偏移量 5000、15000、150000 转换为物理块号和块内偏移量。
- 5000/512=9 5000%512=392 FCB 的第 9 个地址
- 15000/512=29 15000%512=152 一次间址块中的第 19 项
- 150000/512=292 150000%512=496 二次间址块中的第一块的第 112 项
(3) 假设某文件的索引结点已在内存中,但其它信息均在外存,为了访问该文件中某个位置的内容,最多需要几次访问磁盘?
最多需要 4 次访问磁盘:
- 第一次是读三次间址块
- 第二次是读二次间址块
- 第三次是读一次间址块
- 第四次是是读文件盘块