《操作系统》——文件管理(上)
一、文件系统基础
(一)初识文件管理
- 计算机中存放了各种各样的文件,一个文件有哪些属性?
- 文件内部的数据该怎样组织?
- 文件之间该如何组织?
- 从下往上看(操作系统上层是用户),OS应提供哪些功能,才能方便用户、应用程序使用文件?
- 从上往下看(操作系统下层是裸机纯硬件),文件该如何存放在外存(磁盘上)?
1、文件的属性
- 文件名:不允许重复
- 标识符:标识符是唯一标识文件的属性(用户不可见)
- 类型:.txt
- 位置:文件存放路径(用户用)、外存中的地址(操作系统用)
- 大小
- 创建时间、修改时间
- 文件所有者
- 保护信息
2、文件内部的数据应该怎样组织起来
3、文件之间该如何组织
4、OS向上层提供哪些功能
5、从上往下看,文件应该如何放在外存
外存磁盘也分为块——磁盘块
如何给文件分配磁盘块?如何管理空闲磁盘块?——文件的物理结构会讨论
6、其他需要OS实现的文件管理功能
- 文件共享
- 文件保护
(二)文件的逻辑结构(文件内部的组织)
文件操作的实现与文件的逻辑结构和物理结构有关
1、无结构文件(流式文件)
2、有结构文件(记录式文件)
每行是一个记录,每列是一个数据项,每条记录有一个数据项可作为关键字
又可以分为定长记录和可变长记录两种
1)顺序文件
- 可变长/定长
- 串结构/顺序结构(记录之间是否有序)
- 顺序存储/链式存储(物理上)
- 是否能够随机存取?
- 能否快速找到某个关键字对应的记录存放位置?
2)索引文件
- 为了弥补不定长顺序文件的缺点:不能随机存储,不能快速找到
- 索引文件本身是定长记录的顺序文件,所以支持随机存取,索引表项按照顺序存放,可以实现快速存取(折半查找)
3)索引顺序文件
- 索引文件的缺点:索引表会很大,空间利用率低
- 先给记录分组,一组记录对应一个索引项(索引表的一行)
- 每个节点是顺序文件(串结构)
- 索引表项是串结构,无序
表长100,平均查找次数=(1+表长)/2=50
如果次数还是多——建立多极索引表
(三)文件目录(文件之间的组织)(文件夹)
1、文件控制块(实现文件目录的关键数据结构)
- 文件目录是一个有结构文件,每一个记录对应一个文件控制块(FCB),也是一个文件目录项
- 前情:有结构文件,每一行是一个记录;例如,如果该文件是用作索引表,那么每个记录也叫索引表项;如果该文件是用作文件目录,那么每一个记录即叫文件控制块,也叫文件目录项;在内存管理中,页表中每一行也叫页表项
- 文件目录也是文件,存放在磁盘块里
- FCB文件控制块的集合——文件目录
- FCB的作用:实现按名存取
对目录的一些操作:
2、目录结构
1)单级目录结构
不允许文件重名
2)两级目录结构
主文件目录+用户文件目录
缺点:用户不能对自己的文件分类
3)多级目录结构(树形目录结构)
用路径名标识符标识文件
绝对路径:从根目录开始找到文件
相对路径:从当前目录出发找到文件
但树形结构不利于文件共享,为此引出无环图目录结构
4)无环图目录结构
不同目录可以指向同一个文件或目录,实现文件共享,设置共享计数器
3、索引结点(对文件控制块的优化)
让目录表“瘦身”,除了文件名,都放在一个索引结点中,让目录表瘦身,以提升效率
每个磁盘块能存放的目录系增多,所以平均读入磁盘块数减少,I/O次数减少,效率增加
什么时候文件目录项/索引结点要调入内存?
找到文件名后,把索引结点调入内存,再寻找该文件在外存的位置,再调入该文件
(四)文件的物理结构(对非空闲磁盘块的管理)
不同的物理结构,文件目录存储的数据项不一样,所以每种分配方式要注意目录需要记录哪些内容
文件块、磁盘块
类似于内存管理中,把进程的逻辑地址空间分页(逻辑地址=页号+块内地址),存放到内存块中,
在外存管理中,把文件的逻辑地址空间分块(逻辑地址=逻辑块号+块内地址),存放到磁盘块中
且外存块(磁盘块)与内存块大小一致,便于I/O操作
文件的逻辑地址、物理地址
关键问题:操作系统如何把文件逻辑地址(逻辑块号,块内地址)映射为物理地址(物理块号,块内地址)
(块内地址类似于偏移地址,只需要转换块号即可)
1、连续分配
逻辑块号——>物理块号
优点:
- 可以随机访问
- 磁头移动距离短,移动时间短,顺序读写速度快
缺点: - 不方便拓展
- 空间利用率低,空闲块无法被利用,磁盘碎片,但可以用紧凑
2、链接分配
1)隐式链接
- 只支持顺序访问,不支持随机访问
如何实现逻辑块号到物理块号的转变
2. 支持扩展文件,不会有碎片
2)显式链接
把指针显示地存放在文件分配表FAT中
文件末尾指针-1
一个 磁盘对应一个FAT,开机时读入内存
FAT常驻内存,每个表项长度相同
因为FAT在内存,所以访问物理块不必读磁盘
物理块号可以隐含
可以顺序访问,也可以随机访问,无外部碎片,方便拓展
如何实现逻辑块号到物理块号的转变
默认隐式链接
3、索引分配
为每个文件建立索引表,记录了文件的各个逻辑块对应的物理块
类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系
索引表存放在磁盘中的索引块,文件数据存放在磁盘中的数据块
根据目录中的索引块,找到磁盘中的索引表,根据索引表找到各个逻辑块对应的物理块号
索引表的逻辑块号可以隐含
如何实现逻辑块号到物理块号的转变
如果一个磁盘块放不下一个文件的索引表,该怎么办?
1)链接方案
2)多层索引(类似于多级页表)
访问一个目标磁盘块需要几次访问磁盘
3)混合索引
(五)文件的物理结构VS逻辑结构
- 逻辑结构是用户看到的,用户自己建立的结构,用户看到的文件都是连续的,索引关系也是用户自己建立的
- 物理结构是操作系统看到的,无论用户建立什么结构的文件,操作系统都把文件分城小块,分配到磁盘块中,并且实现逻辑地址到物理地址的转换
- 文件的逻辑结构(文件内部)——索引结构——索引关系
- 文件的逻辑结构(文件之间)——目录(也是文件)——每个目录项是FCB——存放在磁盘
——引入索引结点为了让目录表瘦身——索引结点存放在外存,需要时调入内存 - 文件的物理结构(如何存放在磁盘)——连续分配
——链接分配——显式链接——FAT文件分配表(一个磁盘一张)——存放在内存
——索引分配——为每个文件建立索引表(一个文件一张)——存放在磁盘的索引块
文件目录也是文件,用的时候调入内存,访问磁盘的意思也是把磁盘块调入内存,就是I/O工作
(六)文件存储空间管理(对空闲磁盘块的管理)
1、存储空间的划分与初始化
磁盘分为不同的文件卷,每个文件卷分为目录区和文件区
可以由多个磁盘组成一个文件卷
2、几种管理方法(类似于内存的动态分区分配)
-
用什么方式记录、组织空闲块?
-
如何分配空闲磁盘块?不同的算法(首次适应、最佳适应、最坏适应)
-
如何回收空闲磁盘块?
1)空闲表法
2)空闲链表法
(1)空闲盘块链——以盘块为单位
(2)空闲盘区链——以盘区为单位
3)位示图法
4)成组链接法
(七)文件的基本操作(操作系统向上提供的几个基本功能)
调用某种系统调用
1、创建文件
2、删除文件
3、读文件
4、写文件
5、打开文件
两种打开文件表
把索引号
6、关闭文件
(八)文件共享
复制和共享的区别
1、基于索引结点的共享方式(硬链接)
2、基于符号链的共享方式(软连接)
(九)文件保护
1、口令保护
2、加密保护
3、访问控制
每个文件有一个访问控制吧ACL
记录,各个用户可以对文件执行哪些操作
精简访问控制表——把用户分组
(十)文件系统的层次结构
用户接口:文件的操作
文件目录系统:文件目录
存取控制模块:文件保护
逻辑文件系统与文件信息缓冲区:文件逻辑结构
物理文件系统:文件物理结构
辅助分配模块:文件存储空间管理
设备管理模块:磁盘管理
(十一)文件系统实例