第4章 文件管理
4.1 文件系统基础
4.1.1 初识文件管理
1.文件的属性
- 文件名:同一目录下不允许有重名文件
- 标识符:一个系统内的各文件标识符唯一
- 类型
- 位置:文件存放的路径、在外存中的地址(用户不可见)
- 大小
- 创建时间、上次修改时间、文件所有者信息
- 保护信息
2.文件内部的数据应该如何组织(文件的逻辑结构)
3.文件之间如何组织(目录结构)
- 文件通过目录将文件一层一层组织起来
4.操作系统应该向上提供哪些功能
- 创建文件(create系统调用)
- 读文件(read系统调用)
- 写文件(write系统调用)
- 删除文件(delete系统调用)
- 打开文件(open系统调用)
- 关闭文件(close系统调用)
注:以上是基本功能,若想完成更复杂的操作则可以采用几个基本功能实现;读/写文件前需要打开文件,后需要关闭文件
5.从上往下看,文件应如何存放在外存(文件的物理结构)
- 磁盘块
6.其他功能
- 文件共享
- 文件保护
7.总结
4.1.2 文件的逻辑结构
1.逻辑结构 vs 物理结构
- 逻辑结构:指在用户看来,文件内部的数据应该是如何组织起来的
- 物理结构:指在操作系统看来,文件的数据是如何存放在外存中的
2.无结构文件
- 文件内部的数据由一系列二进制流或字符流组成,故又称为流式文件,如windows中的txt文件
3.有结构文件
-
由一组相似的记录组成,又称为记录式文件,每条记录由若干个数据项组成。如数据库表文件,一般来说每条记录有一个数据项作为关键字
-
根据各条记录的长度(所占存储空间)是否相等,又可分为定长记录和可变长记录
-
逻辑结构:顺序文件、索引文件、索引顺序文件
4.顺序文件
-
记录可以是定长的或可变长的
-
顺序存储:逻辑上相邻的记录物理上也相邻(类似于顺序表),可变长不可随机存取,定长可以随机存取
-
链式存储:逻辑上相邻的记录物理上不一定相邻(类似于链表),无论定长还是不定长都无法实现随机存取
5.索引文件
- 索引表本身是定长记录的顺序文件,因此可以快速找到第i个记录对应的索引项
- 每当增加/删除一个记录时,需要对索引表进行修改
- 主要用于对信息处理的及时性要求比较高的场合
- 也可以用不同的数据项建立多个索引表
6.索引顺序表
7.多级索引顺序文件
8.总结
4.1.3 文件目录
1.文件控制块(实现文件目录的关键数据结构)
-
目录文件中的一条记录就是一个文件控制块(FCB),FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,FCB中包含了文件的基本信息,最重要、最基本的是文件名和存放的物理地址。
-
对目录进行的操作:搜索、创建文件、删除文件、显示目录、修改目录
2.目录结构——单级目录结构
- 整个系统中只有一张目录表,实现了按名存取,不允许文件重名
- 单级目录不适用于多用户操作系统
3.目录结构——两级目录结构
-
早期的多用户操作系统采用两级目录结构,分为主文件目录(MFD)和用户文件目录(UFD)
-
MFD记录用户名及相应用户文件目录的存放位置,UFD由该用户的文件FCB组成
-
两级目录结构允许不同用户的文件重名,也可以在目录上实现访问限制,但用户不能对自己的文件进行分类
4.目录结构——多级目录结构(树形目录结构)
- 各级目录之间用
/
隔开 - 从根目录出发的路径称为绝对路径,绝对目录需要一层一层的从外存读取目录表,效率低
- 从当前目录出发的路径称为相对路径,在Liunx中,
.
表示当前目录 - 树形目录结构优点是方便对文件分类,层次结构清晰,能够有效地进行文件地管理和保护;缺点是不便于实现文件地共享,因此提出了无环图目录结构
5.目录结构——无环图目录结构
- 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录称为一个有向无环图,可以实现多个用户之间的共享
- 可以用不同的文件名指向同一文件
- 需要为每个共享节点设置共享计数器
- 共享文件不等于复制文件
6.索引节点(FCB改进)
7.总结
4.1.4 文件的物理结构(文件分配方式,对非空闲磁盘块的管理)——上
- 文件数据怎样存放在外存中
1.文件块、磁盘块
-
类似于内存分页,磁盘中的存储单元也会被分为一个个**“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同,内存与磁盘之间的数据交换都是以“块”为单位进行的**
-
在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为一个个的块,因此文件的逻辑地址可以表示为(逻辑块号,块内地址),操作系统为文件分配存储空间都是以块为单位
-
用户通过逻辑地址来操作自己的文件,操作系统负责实现从逻辑地址到物理地址的映射
2.文件分配方式——连续分配
- 每个文件在磁盘上占有一组连续的块,文件目录中需要记录存放的起始块号和长度(总共占用几个块)
- 物理块号 = 起始块号 + 逻辑块号
- 优点:该方式可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问(随机访问);读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。而连续分配的文件在顺序读/写时速度最快
- 缺点:不方便文件拓展;空间利用率低,会产生磁盘碎片
3.链接分配——隐式链接(链接分配默认为隐式链接分配)
- 目录中记录了文件存放的起始块号和结束块号。除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,这些指针对用户是透明的
- 缺点:只支持顺序访问,不支持随机访问,查找效率低;指向下一个盘块的指针也需要耗费少量的存储空间
- 优点:很方便文件拓展,不会有碎片问题,外存利用率高
4.链接分配——显示链接
-
把用于链接文件各物理块的指针显示地放入一张表中,即文件分配表(FAT)
-
目录中只需记录文件的起始块号
-
注:一个磁盘仅设置一张FAT。开机时,将FAT读入内存并常驻内存。由于FAT各个表项在物理上连续存储,且每个表项的长度相同,因此“物理块号”字段是隐含的,所以逻辑块号转换成物理块号的过程不需要读磁盘操作
-
优点:方便文件拓展,不会产生碎片,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换不需要访问磁盘,因此文件的访问效率很高
-
缺点:文件分配表FAT占内存
4.1.4 文件的物理结构(文件分配方式,对非空闲磁盘块的管理)——下
1.文件分配方式——索引分配
- 系统为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(类似于页表,但不同于文件分配表,因为文件分配表是一张磁盘对应一个表),索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块
- 目录中需要记录文件的索引块是几号磁盘块
- 优点:支持随机访问,文件拓展容易实现
- 缺点:索引表占外存空间
- 一个索引表大小如果超过了一个磁盘大小,有三种解决方案:链接方案、多层索引、混合索引
2.索引分配——链接方案
- 多个索引块链接起来存放
3.索引分配——多层索引
- 类似于多级页表
4.索引分配——混合索引
- 多种索引分配的结合
5.索引分配总结
6.总结
4.1.5 文件存储空间管理(对空闲磁盘块的管理)
1.存储空间的划分与初始化
-
存储空间划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
-
存储空间的初始化:将各个文件卷划分为目录区、文件区,目录区主要存放目录信息(FCB)、用于磁盘存储空间管理的信息,文件区主要用于存放文件数据
-
有的系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷
2.存储空间管理——空闲表法
- 空闲盘块表由第一个空闲盘块号和空闲盘块数组成,适用于连续分配方式
- 分配磁盘块:同样可以采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间
- 回收磁盘块:回首时需要注意表项的合并问题
3.存储空间管理——空间链表法
- 分为空闲盘块链和空闲盘区链
- 空闲盘块链:操作系统保存着链头、链尾指针。分配时从链头摘下K个盘块分配,并修改空闲链的链头指针;回收时回收的盘块依次挂到链尾,并修改空闲链的链尾指针。适用于离散分配的物理结构
- 空闲盘区链:操作系统保存着链头、链尾指针
4.存储空间管理——位示图法
5.存储空间管理——成组链接法
- 空闲表法、空闲链表法不适合大型文件系统,因为空闲表或空闲链表可以过大,UNIX系统采用了成组链接法对磁盘空闲块进行管理。
- 文件卷的目录区中专门有一个磁盘块作为超级块,当系统启动时需要将超级块读入内存
6.总结
4.1.6 文件的基本操作
1.创建文件
- 调用了Creat系统调用,并做了以下事情:在外存中找到文件所需的空间;在目录总创建该文件对应的目录项
2.删除文件
- 调用了delete系统调用,并做了以下事情:从目录中找到文件名对应的目录项;回收文件占用的磁盘块;删除文件对应的目录项
3.打开文件
- 调用了open系统调用,并做了以下事情:从目录中找到文件名对应的目录项,并检查该用户是否有指定的操作权限;将目录项复制到内存中的打开文件表中,之后用户使用打开文件表的编号来指明要操作的文件
- 打开文件表分为两种,一种是用户进程的打开文件表,另一种是系统的打开文件表(整个系统只有一张)
4.关闭文件
- 调用了Close系统调用,并做了以下事情:将进程的打开文件表相应表项删除;回收分配给该文件的内存空间资源;系统打开文件表的打开计数器count减1,若count=0,则删除对应表项
5.读文件
- 调用了read系统调用,需要指明哪个文件(打开文件表中的索引号)、读入多少数据和读入数据要放在内存中的什么位置。
6.写文件
- 调用了read系统调用,需要指明哪个文件(打开文件表中的索引号)、写入多少数据和写入数据要放在内存中的什么位置。
7.总结
4.1.7 文件共享
- 操作系统允许多个用户共享同一个文件,意味着系统中只有“一份”文件数据。
1.基于索引节点的共享方式(软链接)
- 将不同用户的索引节点指针指向同一个索引节点
2.基于符号链的共享方式(软链接)
- 目录项的索引节点指针不会直接指向目标文件的索引节点,而是创建了一个Link类型文件,该文件记录了目标文件的存放路径(类似于windows中的快捷方式)
3.总结
4.1.8 文件保护
1.口令保护
- 为文件设置一个口令(如:
aaa
),用户请求访问该文件时必须提供“口令”。口令一般存放在文件对应的FCB或索引节点中。 - 优点:保存口令的空间开销小,验证口令的时间开销也小
- 缺点:口令存在系统内部,不安全
2.加密保护
- 使用某个密码对文件进行加密,在访问文件时需要提供正确的密码才能对文件进行正确的解密,如异或加密
- 优点:保密性强,不需要在系统中存储密码
- 缺点:编码/译码(加密/解密)花费时间长
3.访问控制
- 在每个文件的FCB(或索引节点)中增加一个访问控制表,该表中记录了各个用户的权限
- 精简的访问列表:以组为单位,标记各组用户可以对文件执行哪些操作
4.Windows的访问控制
5.总结
4.1.9 文件系统的层次结构
- 从上到下依次是第6节-第3节-第8节-第2节-第4节-第5节学习的内容,而设别管理模块将在磁盘学习
4.2 磁盘
4.2.1 磁盘的结构
1.磁盘、磁道、扇区
-
磁盘:表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据
-
磁道:磁盘的盘面被划分为一个个磁道,一个圈就是一个磁道
-
扇区:一个磁道又被划分为一个个扇区,每个扇区就是一个磁盘块,各扇区存放的数据量相同
2.如何在磁盘中读写
- 先将磁头放到要读写的扇区,然后磁盘转动进而读写
3.磁盘的物理结构
- 磁盘块可以用柱面号、盘面号、扇区号来定位
4.磁盘的分类
- 磁头是否移动:活动头磁盘(每个盘面只有一个磁头)和固定头磁盘(每个磁道有一个磁头)
- 盘片是否更换:可换盘磁盘和固定盘磁盘
5.总结
4.2.2 磁盘的调度算法
1.一次磁盘读写操作需要的时间
- 寻找时间(寻道时间)Ts:启动磁头臂的时间+移动磁头时间
- 延迟时间Tr:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。磁盘转速越块,延迟时间越短
- 传输时间:从磁盘读出或向磁盘写入数据所经历的时间
2.先来先服务(FCFS)
- 根据进程请求访问磁盘的先后顺序进行调度
- 优点:公平,如果请求访问的磁盘比较集中,则算法性能还可以
- 缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长
3.最短寻找时间优先(SSTF)
- 优先处理的磁道是与当前磁头最近的磁道
- 优点:性能较好,平均寻道时间短
- 缺点:可能会产生饥饿现象
4.扫描算法(SCAN),又称为电梯算法
-
只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动
-
优点:性能较好,平均寻道时间较短,不会产生饥饿现象
-
缺点:只有达到最边时才会改变磁头方向;各个位置磁道的响应频率不平均
5.LOOK调度算法
- 如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向,解决了SCAN算法的第一个缺点
6.循环扫描算法(C-SCAN)
- 返回时直接快速移动到起始端而不处理任何请求,解决了SCAN算法的第二个缺点
7.C-LOOK算法
8.总结
4.2.3 减少磁盘延迟时间的方法
- 延迟时间:将目标扇区转到磁头下面所花的时间
- 磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的延迟时间
1.减少延迟时间的方法:交替编号
- 让逻辑上相邻的扇区在物理上有一定的间隔
2.磁盘地址结构的设计
3.减少延迟时间的方法:错位命名
4.总结
4.2.4 磁盘管理
1.磁盘初始化
- step1:进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可以分为头、数据区域、尾三个部分组成
- step2:磁盘分区
- step3:逻辑格式化
2.引导块(用于存放自举程序)
3.坏块的管理
- 磁盘控制器
4.总结