操作系统考研复试复习-4
第四部分:文件管理
文件管理实际上是对文件在外存存储的管理,文件是如何存储的,目录是如何组织的,如何通过文件名找到文件,对外存资源的管理。
1,文件的逻辑结构:从用户的角度出发,文件的数据是如何组织的
2,文件的物理结构:从OS的角度出发,文件是如何存储在外存中的
1,文件的逻辑结构
文件分为无结构文件(流式文件)和有结构文件(记录式文件)
记录分为定长记录和可变长记录,定长记录可以随机存取,而可变长记录只能顺序存取
有结构文件分为:
(1)顺序文件:一般为顺序存储
(2)索引文件:索引表本身为定长记录,通过索引表可以实现变长记录的随机存取
(3)索引顺序文件:即分组索引,可以多级索引。
2,文件的目录结构
文件的目录结构需要实现的功能:按名存取,建立文件名与物理地址的映射
1,文件目录是什么?
(1)每一个文件都有一个相应的文件控制块(FCB),包含了文件的文件名,创建时间,物理位置,权限等一系列重要信息,FCB即该文件的文件目录项,因为文件目录项本身为定长结构的顺序文件,所以可以实现随机存储,文件目录包含许多文件控制块,目录文件是存放文件目录的文件。
(2)因为文件控制块中信息过多,数据量大,会造成存放和检索的不便,所以将文件控制块中除了文件名之外的信息放入索引结点,而文件目录中只存放文件名和指向索引结点的指针。
2,文件目录是如何组织的?
(1)单级:整个系统只有一张目录表,所以整个系统的文件不能重名
(2)两级:单级文件目录的改进,每一个用户拥有一张文件表记录自己文件的FCB,系统有一张文件表,用来记录用户名,和每一个用户的文件位置。
(3)多级:为了实现文件分类存储,形成了树形(多级)目录结构。在这种情况下,访问文件需要完整的文件路径(称为绝对路径),因为目录文件下既可能为文件,也可能为下一集目录文件。为了减少启动磁盘的次数,减少查询时间,出现了相对路径,即从当前位置出发的路径。
(4)无环图:为了实现文件共享形成的目录结构
对于共享文件只存在一个真正的文件,其他文件只存在一个指向该文件索引结点的指针。
为每一个共享文件设置一个共享计数器,记录指向该文件的指针数目,只有当计数器为0时才可以进行删除。
3,文件的保护
文件保护分为三种:
(1)口令保护:口令存储在计算机内部,不够安全
(2)加密保护:对文件的内容进行加密,计算机保存秘钥
(3)访问控制:通过访问控制表来实现。为每一个文件创建一个访问控制列表,规定每一个
用户(或每一类用户)允许的访问类型,
4,文件的共享
为了方式共享文件被未经准核的用户访问或修改。
文件共享有两种方式:
(1)基于索引结点实现(硬链接):
多个用户的文件目录指向同一个索引结点(+计数器),当计数器为0时,可以删除文件
(2)基于符号链实现(软链接):
用户有一个link型的文件,文件中存储共享文件的路径名(需要多次启动磁盘),删除link型文件并不会删除共享文件本身。
文件打开、读写和关闭的过程:通过系统调用完成
(1)打开文件:Open()
首次打开文件时:将文件的FCB复制到内存中(而不是文件内容本身)
返回值为文件描述符,一旦文件被打开就可以使用文件描述符来读取或者写入文件,而不需要文件名
将该文件的文件描述符和文件信息(FCB)一起加入系统打开文件表
系统的打开文件表和用户的打开文件表
系统的打开文件表记录了系统打开的所有文件,整个系统只有一张表
用户的打开文件表中只有用户打开文件的文件名和指向系统打开文件表对应项的指针。
(2)读写文件
read():读取文件中的字节,第一个参数:文件描述符,第二个参数:指向放置读出数据的缓冲区,第三个参数:缓冲区大小
(3)关闭文件
unlink() 参数:文件名
5,文件系统的实现(如何实现文件的逻辑结构)
将存储空间(一个文件卷)划分为文件区和目录区,目录区用来存储FCB文件目录(INode),和管理块存储的数据(包括:空闲表,位表,超级块)
将磁盘划分为块,讨论OS如何分配磁盘的存储空间和资源。
文件系统需要记录那些东西?
(1)用户数据(2)inode/FCB(3)管理块的存储情况的数据
inode:索引结点
1,文件分配方式有哪几种?用户数据是如何存储的?(非空闲块的管理):
(1)连续分配:文件在磁盘上的连续块内存储,支持直接访问
缺点:会产生外部碎片,文件动态增减困难
文件目录条目:
起始块 长度 文件名
(2)链接分配:分为隐式链接和显式链接
隐式链接:将存储文件的各个块用指针链接(类似链表),由于指针存储在文件块内部,只能进行顺序读块。能动态增长,但文件检索速度慢。
文件目录条目:
文件名 起始块 最后一块
显式链接:将指针显示的放在内存的一张连接表中(FAT表)
整个磁盘区只有一张FAT表,表项与磁盘块一一对应。因此,FAT表常驻内存,提高文件检索速度。
文件目录条目:
文件名 指向起始块的指针
(3)索引分配
为每一个文件建立一张索引表,索引表中记录逻辑块号(文件在用户看来是连续的)与物理块号的映射(类似页表),文件目录条目:
文件名 指向索引块的指针
索引块一般在INode中
其中,索引表中每一项对应一个磁盘块,索引表本身存放于一个或多个磁盘块中,但如果文件过大会导致索引表很大,需要很长的连续存储空间,解决方法
(1)多层索引(类似于多级页表):高层索引块中存放下层索引块的物理地址(指向包含更多指针的块)
(2)混合索引:例如拥有12个直接指针,1个间接指针,1个双重间接指针(三级索引)
2,文件存储空间的是如何管理的?如何分配空闲块?如何回收空闲块(空闲块的管理):
(1)空闲块是如何管理的?
1,空闲表法:适合连续分配
2,空闲链表法:分为空闲盘块链和空闲盘区链
3,位示图法:一个二进制位对应一个块的存储情况
4,UNIX:超级块(成组链接法):将空闲块组织起来,时系统能够在短时间内找到足够空闲块,在系统启动时就调入内存,作为空闲区的链头。
5,FAT表:每一项对应一个盘块,将链表的指针组织成一个索引表,通过查FAT表就能够找出文件存储在那几个盘块,占用的空间是多少,该存储系统还有多少空闲区域,在哪个位置。
3,磁盘调度和资源管理:(站在纯硬件的角度分析如何减少磁盘延迟和如何组织数据)
(1)延迟时间是由什么组成的?
寻道时间+旋转延迟+读写延迟
所以要减少磁盘的延迟要从缩小组成部分的延迟开始
(2)如何减少寻道时间?
磁盘调度算法:
FCFS:先来先服务
SSTF:short seek time first(最短寻道时间优先)
缺点:只响应磁头附近的请求,容易导致饥饿
SCAN:又叫做电梯调度算法,规定响应的方向
缺点:对刚刚扫描过的区域不公平,而且对磁盘中间和磁盘两端的响应不均匀
C-SCAN:回去时不做响应,只有一个方向
LOOK:不需要到达端点才回头
C-LOOK:C-SCAN的改进
(3)如何减少旋转延迟
物理编号:柱面号、盘面号、盘区号
原因:因为磁头在读或写一块物理块的内容之后,需要经过一段时间处理才能读下一个物理块。所以如果逻辑上相邻的数据在物理上也相邻的话,会导致磁头来不及处。
同面交替编号
跨面错位命名
读写延迟是由磁盘的物理特性决定的,无法改变
(4)磁盘存储管理
1,磁盘初始化:
低级初始化 分区: 逻辑格式化
划分扇区 每个扇区由若干柱面组成 创建文件系统,初始化管理磁盘所需要的数据结构
2,引导块:
引导块是指完成计算机开机时一些初始化工作的程序,又称为自举程序,引导块又称为启动块。
3,坏块的管理:
(1)在FAT表上标明坏块
(2)坏块链表,在物理格式化(划分扇区,管理块的数据结构)时形成,可以有备用扇区
簇:每道的所有扇区称为一个簇,以簇为单位进行空间分配,可以改善磁道访问时间。