导图社区 《操作系统》第四章-文件管理
计算机操作系统文件管理思维导图,包括文件和文件系统、文件的逻辑结构、文件目录三部分内容,需要的自取~
编辑于2022-11-23 21:11:56 上海文件管理

文件系统基础
文件是存储在硬盘上的信息集合,是I/O操作的基本单位 文件结构 有结构文件:由记录组成的文件 无结构文件(流式文件):由字符流(二进制流)组成的文件 数据结构 文件控制块(FCB):存放文件属性,实现“按名存取” 文件目录:FCB的有序集合 目录:一种文件,持久化存储在磁盘中 目录项:内核中的数据结构,表示路径的一个组成部分,存有文件名和指向索引结点的指针 索引结点(i结点):为加速检索,将文件名以外的信息存储在i结点中,在目录项中仅保留文件名和指向索引结点的指针(故i结点=FCB - 文件名) 打开文件表:存储open过后的文件的属性,包括读写指针、打开计数、文件物理位置等信息(类似于索引结点);又可分为系统级和进程级的打开文件表 PS:FCB注重概念,索引结点仅存放在磁盘的块中,读取过的目录文件的内容会被保存在内核的目录项中,以加快效率 文件保护 访问控制:用户类别和访问权限——访问控制矩阵(n×m) 加密、口令 逻辑结构(用户视角): 无结构文件 有结构文件(记录式文件): 顺序文件:适合磁带、顺序存取和批量处理快 索引文件:索引表;支持随即查找 索引顺序表:将记录分组,为每组建立索引项;时间为根号N 散列文件 物理结构(操作系统视角): 连续分配:简单、随机存取最快;不宜动态增加,只适合定长文件,存在外碎片 链接分配:解决外碎片;不适合随机访问,占用内存 隐式链接:类似链表,不适合随机存取 显式链接:将指针放在文件分配表(FAT)中,每项指明盘块号和下一块编号;将FAT读入内存,减少访盘次数 索引分配:支持随机存取,支持变长文件,无外碎片;将文件的所有盘块号放入索引表;索引块难以兼容不同大小的文件 混合索引分配:直接、一级、多级寻址,兼顾各种大小文件 目录:FCB的集合 结构:单级、两级、树形、无环图 文件共享:硬链接和软链接 文件读取过程: 进程发起系统调用,引起系统中断,进入内核态 内核检查进程打开表(也称文件描述符表),是否存有该文件的表项(其中包含指向磁盘上索引结点的指针) 若进程打开表中不存在该表项,继续检查系统的打开文件表 继续检查内核中的目录项 读取磁盘中的目录文件
文件的基本概念
定义
文件是以硬盘为载体的存储在计算机上的信息集合
在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位
组成
存储空间
数据
分类和索引的信息
访问权限信息
结构
1)数据项:文件系统中最低级的数据组织形式
基本数据项:用于描述一个对象的某种属性的一个值,是数据中的最小逻辑单位
组合数据项:由多个基本数据项组成
2)记录:一组相关的数据项的集合,用于描述一个对象在某方面的属性
3)文件:指由创建者所定义的、具有文件名的一组相关元素的集合
有结构文件:文件由若干个相似的记录组成,如一个班的学生记录
无结构文件:被视为一个字符流,如一个二进制文件或字符文件
文件控制块和索引结点
文件的属性
定义:除了文件数据外的其余文件相关信息,如所有者、创建时间等,这些附加信息称为文件属性或文件元数据,通过文件控制块(FCB)来维护
组成
名称
文件名称唯一
不同目录下文件的文件名可以相同
类型
创建者
创建者ID
所有者
所有者ID
位置
指向设备和设备上文件的指针
大小
保护
对文件进行保护的访问控制信息
创建时间
最后一次修改时间和最后一次存取时间
文件控制块(FCB)
定义
用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”
包含信息
基本信息
如文件名、物理位置、逻辑结构、物理结构等
存取控制信息
包括文件主的存取权限、核准用户的存取权限以及一般用户的存取权限
使用信息
如文件的建立时间、上次修改时间等
文件目录
一个文件目录也被视为一个文件,称为目录文件
FCB的有序集合,其中每个FCB都是一个文件目录项
索引节点
定义
由于文件按名存取,因此寻找文件时,考虑将目录项中文件名以外的冗余信息单独存放,形成一个称为索引节点(i结点)的数据结构,在目录项中仅保留文件名和指向索引节点的指针
分类
磁盘索引结点
定义
存放在磁盘上的索引结点。每个文件仅有唯一的磁盘索引结点
组成
文件主标识符:拥有该文件的个人或小组的标识符
文件类型:包括普通文件、目录文件或特别文件
文件存取权限:各类用户对该文件的存取权限
文件物理地址:每个索引结点中含有13个地址项,即iaddr(0)~iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号
文件长度:指以字节为单位的文件长度
文件链接计数:在本文件系统中所有指向该文件的文件名的指针计数
文件存取时间:本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间
内存索引结点
定义
存放在内存中的索引结点。当文件被打开后,将磁盘索引结点复制到内存中,便于使用
扩展内容
索引结点编号:用于标识内存索引结点
状态:指示i结点是否上锁或被修改
逻辑设备号:文件所属文件系统的逻辑设备号
链接指针:设置分别指向空闲链表和散列队列的指针
文件的操作
基本操作
创建文件
为新文件分配必要的外存空间
在目录中为之创建一个目录项,目录项记录了新文件名、在外存中的地址及其他可能的信息
写文件
执行系统调用,根据给定文件名查找目录
系统为文件维护一个写位置的指针,每当发生写操作时,更新写指针
读文件
执行系统调用,同样维护并更新一个都指针
一个进程通常只对一个文件进行读写,故当前操作位置可作为每个进程当前文件位置的指针。读写使用同一指针,节省了空间并降低了系统复杂度
重新定位文件(文件定位)
搜索目录以找到适当的条目,并将当前文件位置指针重新定位到给定值
删除文件
先删除指定文件名的目录项,然后释放其存储空间
截断文件
删除文件内容,将其长度置为0并释放空间,但其他属性不变
文件的打开与关闭
打开

执行系统调用open,根据文件名搜索目录,将指明文件的属性(包括该文件在外存上的物理地址)从外存复制到内存中,作为打开文件表的一个表目,并返回该表目的编号(索引)给用户
此后的所有文件操作,只需通过打开文件表来进行
打开文件表
包含所有打开文件信息的表,用户通过索引访问表中的表项
两级表
进程表的打开文件表
存储进程对文件的使用信息,若多个进程同时打开一个文件,其进程打开表表目指向同一个系统打开表条目
系统范围的打开文件表
包含文件相关信息
系统使用索引(文件描述符—UNIX,文件句柄—Windows)访问文件打开表,不需要存储文件名)
使用opend系统调用打开某个文件后,后续使用read系统调用读取其数据,不需要再提供文件名,read需要下列三种参数 文件描述符fd(由open返回) buf缓冲区首址 传送的字节数n read的作用是从fd所指示的文件中读入n个字节的数据,并将它们送至由指针buf所指示的缓冲区中
组成
文件指针:系统跟踪上次的读写位置作为当前文件位置的指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存
文件打开计数(Open Count):计数器跟踪当前文件打开和关闭的数量。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件
文件磁盘位置:大多数文件操作要求系统修改文件数据。查找磁盘上的文件所需的信息保存在内存中,以便系统不必为每个操作都从磁盘上读取该信息
访问权限:每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等)。该信息保存在进程的打开文件表中,以便操作系统能够允许或拒绝后续的I/O请求
文件保护
为了防止文件共享可能会导致文件被破坏或未经核准的用户修改文件,文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题。为此,必须在文件系统中建立相应的文件保护机制。文件保护通过口令保护、加密保护和访问控制等方式实现。其中,口令和加密是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式。 现代操作系统常用的文件保护方法是,将访问控制列表与用户、组和其他成员访问控制方案一起组合使用。 对于多级目录结构而言,不仅需要保护单个文件,而且需要保护子目录内的文件,即需要提供目录保护机制。目录操作与文件操作并不相同,因此需要不同的保护机制。
访问类型
此外还可以对文件的重命名、复制、编辑等加以控制。这些高层的功能可以通过系统程序调用低层系统调用来实现。保护可以只在低层提供。例如,复制文件可利用一系列的读请求来完成,这样,具有读访问权限的用户同时也就具有了复制和打印权限。
读
写
执行
将文件装入内存并执行
添加
将新信息添加到文件结尾部分
删除
删除文件,释放空间
列表清单
列出文件名和文件属性
访问控制
相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性相对较高。若访问控制不由系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密方法将无法扩展。
访问控制列表(基于身份访问)
 
定义
为每个文件和目录增加一个访问控制列表(Accesss-Control List, ACL),以规定每个用户名及其所允许的访问类型
用户类型(精简的访问列表)
拥有者:创建文件的用户
组:一组需要共享文件且具有类似访问的用户
其他:系统内的所有其他用户
系统创建文件时将文件主的名字、所数组名列在该文件的FCB中;若用户和拥有者同在一个用户组,则按同组权限访问,否则按其他用户权限访问
口令
定义
用户在建立一个文件时提供一个口令,系统为其建立FCB时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应的口令
特点
时间和空间的开销不多,但是口令直接存在系统内部,不够安全
密码
定义
用户对文件进行加密,文件被访问时需要使用密钥
特点
保密性强,节省了存储空间,不过编码和译码要花费一定的时间
用于防止用户文件被他人窃取,并不能控制用户对文件的访问类型
文件的逻辑结构
定义
文件的逻辑结构是从用户观点出发看到的文件的组织形式,与存储介质特性无关,是指在文件的内部,数据在逻辑上是如何组织起来的;而文件的物理结构(存储结构)是从实际观点出发看到的文件在外存上的存储组织形式
分类
无结构文件(流式文件)
定义
最简单的文件组织形式,将数据按顺序组织成记录并积累、保存,是有序相关信息项的集合,以字节为单位
访问方式
没有结构,故只能通过穷举搜索的方式访问,故不适用于大多数应用
适用文件
无结构文件管理简单,适用于基本信息单位操作不多的文件,如源程序文件、目标代码文件等
有结构文件(记录式文件)
顺序文件
定义
文件中的记录(一般定长)按顺序排列,按顺序存储或链表存储(物理上顺序存储且定长的记录可随机存取)
结构
串结构
按存入时间先后排列,只能从头按顺序依次查找,较为费时
顺序结构
按关键字顺序排列,可采用折半查找法,提高了效率
特点
对记录进行批量操作或顺序存取时,效率最高
对于顺序存储设备(如磁带),只有顺序文件才能被存储并工作
在经常需要增删改查单个记录的场合,性能较差
索引文件
基本思想
变长记录文件只能按顺序查找记录(定长记录文件可随即查找),效率较低。为此,可以建立一张索引表以加快了记录的检索速度
索引表
索引号
指向变长记录的指针(即逻辑起始地址)
记录长度
把对变长记录顺序文件的检索转变为对定长记录索引文件的随机检索
索引顺序文件
基本思想
将顺序文件中的所有记录分为若干组,为每组的第一条记录建立一个索引项,包含该记录的关键字值和指向该记录的指针
最快情况下,对于含有N条记录的文件,平均查找时间为√N
直接文件或散列文件(Hash File)
基本思想
给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址,存储没有顺序的特性
特点
存取速度快,但可能引起冲突(不同关键字的散列函数值相同)
文件的物理结构

连续分配
基本思想
每个文件在磁盘上占有一组连续的块,逻辑文件中的记录顺序也存储在相邻接的块中
目录项
第一块的地址
该文件所分配区域的长度
优点
实现简单、存取速度快(随机存取最快)
作业访问磁盘时需要的寻道数和寻道时间最小
缺点
文件长度不宜动态增加,否则可能会大量移动后续盘块
为保持文件的有序性,插入和删除记录时,需要移动相邻的记录
反复增删后会产生外碎片
只适用于长度固定的文件
链接分配
基本思想
采用离散分配的方式,动态地为文件分配盘块,消除了外碎片,提高了磁盘利用率
分类
隐式链接(默认)
目录项中含有文件的第一块和最后一块的指针,每个盘块(除最后一个)都含有指向文件下一个盘块的指针(指针对用户透明)
缺点
只适合顺序访问,随机访问效率很低
通常的解决方案是,将几个盘块组成簇(cluster),按簇而不按块来分配,可以成倍地减少查找时间。比如一簇为4块,这样,指针所占的磁盘空间比例也要小得多。这种方法的代价是增加了内部碎片。簇可以改善许多算法的磁盘访问时间,因此应用于大多数操作系统。
稳定性差
显式链接
把用于链接文件的各物理块的指针提取出来,显式地放在文件分配表(FAT)中(每个磁盘仅设置一张FAT,开机后读入并常驻内存)
文件分配表
组成
盘块号
下一块
-1表示文件的最后一块
-2表示空闲块
优点
FAT表在系统启动时就会被读入内存,因此查找记录的过程是在内存中进行的, 因而不仅显著地提高了检索速度,而且明显减少了访问磁盘的次数。
FAT的各个表项在物理上连续存储,故支持随机访问和顺序访问
缺点
FAT占用存储空间
存在问题
链接分配不能有效支持直接访问(FAT除外)
FAT需要占用较大的内存空间
索引分配
基本思想
将每个文件所有盘块号集中在一起构成索引块(表),索引块的第i个条目指向文件的第i块
优点
既支持直接访问,也支持文件长度可变
没有外部碎片的问题
缺点
引入索引块,增加了存储开销
较小的索引块难以支持大文件
①链接方案
一个索引块通常为一个磁盘块,因此它本身能直接读写。为了支持大文件,可以将多个索引块链接起来。
②多层索引
通过第一级索引块指向一组第二级的索引块,第二级索引块再指向文件块。查找时,通过第一级索引查找第二级索引,再采用这个第二级索引查找所需数据块。这种方法根据最大文件大小,可以继续到第三级或第四级。例如,4096B的块,能在索引块中存入1024个4B的指针。两级索引支持1048576个数据块,即支持最大文件为4GB。
③混合索引
将多种索引分配方式相结合的分配方式。例如,系统既采用直接地址又采用单级索引分配方式或两级索引分配方式。
访问文件需两次访问外存,先读取索引块的内容,然后访问具体的磁盘块,因此降低了文件的存取速度;为此,通常将文件的索引块读入内存,以提高访问速度
混合索引分配
直接地址
针对小文件,将盘块地址直接放入FCB,即直接寻址
在索引结点中可设置10 个直接地址项,即用i.addr(0)~i.addr(9)来存放直接地址,即文件数据盘块的盘块号。假如每个盘块的大小为4KB,当文件不大于40KB时,便可直接从索引结点中读出该文件的全部盘块号。
一次间接地址
针对中、大型文件,采用单级索引的方式,需要先从FCB中找到该文件的索引表,从中获得该文件的盘块地址
利用索引结点中的地址项i.addr(10)来提供一次间接地址。在一次间址块中可存放1024个盘块号,因而允许文件长达4MB。
多次间接地址
当文件长度大于4MB +40KB (一次间接地址与10个直接地址项)时,系统还需采用二次间接地址分配方式。这时,用地址项i.addr(11)提供二次间接地址。该方式的实质是两级索引分配方式。系统此时在二次间址块中记入所有一次间址块的盘号。地址项i.addr(11)作为二次间址块,允许文件最大长度可达4GB。同理,地址项iaddr(12)作为三次间址块,其允许的文件最大长度可达4TB。
目录
目录的基本概念
定义
FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,包含有关文件的属性、物理地址和所有权等信息
基本要求
用户角度
实现“按名存取”,既文件名和文件之间的映射
检索效率
多用户共享
提供用于控制访问文件的信息
不同用户对不同文件采用相同的名字
采用树形结构
目录结构
单级目录结构
定义
在整个文件系统中只建立一张目录表,每个文件占一个目录项
使用
访问文件
先按文件名在该目录中查找到相应的FCB,经合法性检查后执行相应的操作
创建文件
先检索所有目录项,以确保没有“重名”的情况,然后在该目录中增设一项,把新文件的属性信息填入到该项中
删除文件
从目录中找到该文件的目录项,回收该文件所占用的存储空间,然后清除该目录项
缺点
查找速度慢、文件不允许重名、不便于文件共享,不适合多用户系统
两级目录结构
定义
将文件目录分为主文件目录(MFD)和用户文件目录(UFD)两级
优点
提高了检索速度,解决了多用户间文件重名的问题,文件系统可以在目录上实现访问限制
缺点
缺乏灵活性,不能对文件分类
树形目录结构
主流方式
定义
多级目录结构
绝对路径:从根目录出发的路径,如“/bin"
相对路径:从当前目录(工作目录)出发的路径,如”./ls"
进程和用户对文件的访问都是相对于当前目录进行的,即使用相对路径标识文件
每个用户都有各自的“当前目录”,登录后自动进入该用户的“当前目录”,也可以提供系统调用改变当前目录
优点
便于文件分类、管理和保护,层次结构清晰,便于存取权限管理;明显提高了目录的检索速度和文件系统的性能
缺点
查找文件时选路径逐级访问中间结点,增加了磁盘访问次数,进而影响查询速度
不便于文件共享
无环图目录结构
定义
在树形结构的基础上增加了一些指向同一结点的有向边,使目录变为一个有向无环图
共享计数器
为每个共享结点设置一个共享计数器,当图中增加对该节点的共享链时,计数器加1;当某用户提出删除结点时,计数器减1,并删除该共享链;仅当计数器等于0时真正删除结点
特点
方便地实现了文件共享,但是系统管理变得复杂
目录的操作
搜索
当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项
创建文件
当创建一个新文件时,需要在目录中增加一个目录项
删除文件
当删除一个文件时,需要在目录中删除相应的目录项
创建目录
在树形目录结构中,用户可创建自己的用户文件目录,并可再创建子目录
删除目录
①不删除非空目录,删除时要先删除目录中的所有文件,并递归地删除子目录
②可删除非空目录,目录中的文件和子目录同时被删除
移动目录
将文件或子目录在不同的父目录之间移动,文件的路径名也会随之改变
显示目录
用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性
修改目录
某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项
目录实现*
目录实现的基本方法有线性列表和哈希表两种;目录的实现是为了查找,因此线性列表实现对应线性查找,哈希表的实现对应散列查找
线性列表
采用文件名和数据块指针的线性列表
实现简单,但查找费事
若把文件名按序排列,则可以使用折半查找法降低查找时间
哈希表
采用哈希数据结构,哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针
查找迅速,插入和删除简单,但需要一些措施避免冲突
文件共享
硬链接和软链接都是文件系统中的静态共享方法,在文件系统中还存在着另外的共享需求,即两个进程同时对同一个文件进行操作,这样的共享称为动态共享。 可以这样说:文件共享,“软硬”兼施。硬链接就是多个指针指向一个索引结点,保证只要还有一个指针指向索引结点,索引结点就不能删除;软链接就是把到达共享文件的路径记录下来,当要访问文件时,根据路径寻找文件。可见,硬链接的查找速度要比软链接的快。
基于索引结点的共享方式(硬链接)
引用计数值加1
将需要共享的文件或子目录链接到若干个用户的目录中
在文件目录中只设置文件名和指向相应索引结点的指针;在索引结点中存放文件的物理地址及其他文件属性等信息
设置链接技术,表示链接到本索引节点上的用户目录项数目
基于符号链实现文件共享(软链接)
如快捷方式,创建后不变动,不增加引用计数值
定义
当用户试图共享其他用户的文件时,系统创建一个LINK类型的新文件,包含该文件的路径名,并将其写入用户目录中
访问该共享文件时,操作系统检测到文件类型为LINK,则根据其中的路径名去找到共享文件
特点
只有文件主才拥有指向文件索引结点的指针,其他共享该文件的用户只有文件的路径名
当文件主删除共享文件后,其他用户无法再访问
其他用户读取文件时需根据文件路径逐级查找目录,直到找到索引结点,需多次读盘
利用符号链实现网络文件共享时,只需提供该文件所在机器的网络地址及文件路径名
文件系统
文件系统结构
文件系统
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理文件及实施文件管理所需的数据结构
提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据
设计问题
定义文件系统的用户接口,涉及定义文件及其属性、所允许的文件操作、如何组织文件的目录结构
创建算法和数据结构,以便映射逻辑文件系统到物理外存设备
文件系统层次结构
( 1 ) I/O控制
包括设备驱动程序和中断处理程序,在内存和磁盘系统之间传输信息。设备驱动程序将输入的命令翻译成底层硬件的特定指令,硬件控制器利用这些指令使IO设备与系统交互。设备驱动程序告诉I/O控制器对设备的什么位置采取什么动作。
(2)基本文件系统
向对应的设备驱动程序发送通用命令,以读取和写入磁盘的物理块。每个物理块由磁盘地址标识。该层也管理内存缓冲区,并保存各种文件系统、目录和数据块的缓存。在进行磁盘块传输前,分配合适的缓冲区,并对缓冲区进行管理。管理它们对于系统性能的优化至关重要。
(3)文件组织模块
组织文件及其逻辑块和物理块。文件组织模块可以将逻辑块地址转换成物理块地址,每个文件的逻辑块从0到N编号,它与数据的物理块不匹配,因此需要通过转换来定位。文件组织模块还包括空闲空间管理器,以跟踪未分配的块,根据需求提供给文件组织模块。
(4)逻辑文件系统
用于管理元数据信息。元数据包括文件系统的所有结构,而不包括实际数据(或文件内容)。逻辑文件系统管理目录结构,以便根据给定文件名称为文件组织模块提供所需要的信息。它通过文件控制块来维护文件结构。逻辑文件系统还负责文件保护。
文件系统布局
文件系统在磁盘中的结构
文件系统存放在磁盘上,多数磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统。文件系统可能包括如下信息:启动存储在那里的操作系统的方式、总的块数、空闲块的数量和位置、目录结构以及各个具体文件等。
组成
主引导记录(Master Boot Record,MBR)
位于磁盘的0号扇区,用来引导计算机,MBR后面是分区表,该表给出每个分区的起始和结束地址。表中的一个分区被标记为活动分区,当计算机启动时,BIOS读入并执行MBR。MBR做的第一件事是确定活动分区,读入它的第一块,即引导块。
引导块(boot block)
MBR执行引导块中的程序后,该程序负责启动该分区中的操作系统。为统一起见,每个分区都从一个引导块开始,即使它不含有一个可启动的操作系统,也不排除以后会在该分区安装一个操作系统。Windows系统称之为分区引导扇区。除了从引导块开始,磁盘分区的布局是随着文件系统的不同而变化的。
超级块( super block)
包含文件系统的所有关键信息,在计算机启动时,或者在该文件系统首次使用时,超级块会被载入内存。超级块中的典型信息包括分区的块的数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等。
文件系统中空闲块的信息,可以使用位示图或指针链接的形式给出。后面也许跟的是一组i结点,每个文件对应一个结点,i结点说明了文件的方方面面。接着可能是根目录,它存放文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。
文件系统在内存中的结构

内存中的信息用于管理文件系统并通过缓存来提高性能。这些数据在安装文件系统时被加载,在文件系统操作期间被更新,在卸载时被丢弃。
组成
内存中的安装表( mount table):包含每个已安装文件系统分区的有关信息
内存中的目录结构的缓存包含最近访问目录的信息。对安装分区的目录,它可以包括一个指向分区表的指针。
整个系统的打开文件表:包含每个打开文件的FCB副本及其他信息。
每个进程的打开文件表,包含一个指向整个系统的打开文件表中的适当条目的指针,以及其他信息
外存空闲空间管理

实质
文件存储设备分成许多大小相同的物理块,并以块为单位交换信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理,它包括空闲块的组织、分配与回收等问题。
卷
包含文件系统的分区称为卷(一个磁盘可划分为若干个分区)
卷可以时磁盘的一部分,或整个磁盘,或多个磁盘组成的RAID集
卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲空间管理表格及存放卷信息的超级块
空闲表法
定义
连续分配方式,类似内存的动态分配方式,为每个文件分配一块连续的存储空间
系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应于一个空闲表项
表项序号
空闲区的第一个盘块号(递增排列)
空闲区的盘块数
盘块分配
类似内存的动态分配,采用首次适应算法和最佳适应算法
盘块回收
类似内存回收,即要考虑回收区是否于空闲盘块表中插入点的前去和后区相邻接,考虑合并
空闲链表法
空闲盘块链
定义
将磁盘上的所有空闲空间以盘块为单位拉成一条链
分配空间:系统从链首开始,依次摘下适当数目的空闲盘块分配给用户
回收空间:系统将回收的盘块依次插入空闲盘块链的末尾
优点
分配和回收一个盘块的过程非常简单
缺点
为一个文件分配盘块时可能要重复操作多次,效率较低
以盘块为单位的,空闲盘块链会很长
空闲盘区链
定义
将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。每个盘区除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小(盘块数)的信息
分配空间:与内存的动态分区分配类似,通常采用首次适应算法
回收空间:考虑将回收区与相邻接的空闲盘区合并
优点
效率较高,空闲盘区链较短
缺点
分配与回收的过程较复杂
空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表或链表太大
位示图法
定义
磁盘上的每个盘块对应一个二进制,为“0”代表空闲,为“1”代表已分配
盘块分配
(1)顺序扫描位示图,找到一个或一组其值为“0”的二进制位
(2)根据其行列转换为相应的盘块号(设n为每行位数,且行列i、j从1开始编号)
b=n(i-1)+j
(3)修改位示图
map[i,j]=1
盘块回收
(1)将盘块号转换为位示图中的行号和列号
i=(b-1) DIV n+1
j=(b-1) MOD n+1
(2)修改位示图
map[i,j]=0
成组链接法
定义
成组链块:用来存放一组空闲盘块号的盘块
把顺序的n个空闲盘块号保存在第一个成组链块中,其最后一个空闲盘块作为成组链块,保存另一组空闲盘块号,以此递推,系统只需保存指向第一个成组链块的指针
盘块分配
根据第一个成组链块的指针,将其对应的盘块分配给用户,然后将指针下移一格。若该指针指向的是最后一个盘块(即成组链块),由于该盘块记录的是下一组空闲盘块号,因此要将该盘块读入内存,并将指针指向新的成组链块的第一条记录,然后执行上述分配操作。
盘块回收
成组链块的指针上移一格,再记入回收盘块号。当成组链块的链接数达到n时,表示已满,便将现有已记录n个空闲盘块号的成组链块号记入新回收的盘块(作为新的成组链块)。
特点
结合了空闲表和空闲链表的方法,拥有两者的优点,且克服了两种方法均有的表太长的缺点,被UNIX系统所采用
表示空闲空间的位向量表或第一个成组链块,以及卷中的目录区、文件区划分信息都要存放在磁盘中,一般放在卷头位置,在UNIX系统中称为超级块。在对卷中的文件进行操作前,超级块需要预先读入系统空闲的主存,并且经常保持主存超级块与磁盘卷中超级块的一致性。
虚拟文件系统
定义
虚拟文件系统(VFS)为用户程序提供了文件系统操作的统一接口,屏蔽了不同文件系统的差异和操作细节;用户程序可以通过VFS提供的同一调用函数(如open())来操作不同文件系统的文件,而无需考虑具体的文件系统和实际的存储介质
面向对象
抽象模型
VFS定义了通过的文件系统模型和抽象的文件接口,新的文件系统只要支持并实现这些接口,即可安装和使用
对象
每个VFS对象都存放在一个适当的数据结构中,其中包括对象的属性和指向对象方法(函数)表的指针
超级块对象
对应于磁盘上特定扇区的文件系统超级块,用于存储已安装文件系统的元信息
元信息中包含文件系统的基本属性信息,如文件系统类型、文件系统基本块大小、文件系统所挂载的设备、操作方法(函数)指针等
操作方法指针指向该超级块的操作方法表,包含一系列可在超级块对象上调用的操作函数,主要有分配inode、销毁inode、读inode、写inode、文件同步等
索引结点对象
当文件被访问时,在内存中创建索引结点对应,复制磁盘索引结点包含的一些数据
含状态字段表示是否被修改,其值为“脏”时,说明对应的磁盘索引结点必须被更新
目录项对象
目录项对象是一个路径的组成部分,是目录名或文件名;包含指向关联索引节点的指针和指向父目录和子目录的指针
目录项对象在磁盘上没有对应的数据结构,而是VFS在遍历路径的过程中逐级解析而成的
文件对象
文件对象代表进程打开的一个文件,其与物理文件类似于进程和程序的关系
多个进程可以打开和操作同一文件,因此同一文件在内存中可能存在多个文件对象
但这些文件对象对应的索引结点和目录项时唯一的
包含与该文件相关联的目录项对象,该文件的文件系统、文件指针等,以及在该文件对象上调用的一系列操作函数
图4.24所示是一一个进程与文件进行交互的简单实例。三个不同的进程已打开了同一个文件,其中两个进程使用同一个硬链接。在这种情况下,每个进程都使用自己的文件对象,但只需要两个目录项对象,每个硬链接对应一个目录项对象。这两个目录项对象指向同一个索引结点对象,这个索引结点对象标识的是超级块对象及随后的普通磁盘文件。
分区和安装
分区
一个磁盘可以划分为多个分区,每个分区都可以用于创建单独的文件系统,每个分区还可以包含不同的操作系统。分区可以是原始的,没有文件系统,当没有合适的文件系统时,可以使用原始磁盘。例如,UNIX交换空间可以使用原始磁盘格式,而不使用文件系统。
引导块
存储引导信息,有单独的格式(引导时尚未加载文件系统代码,因此不能解释文件系统的格式);引导信息是一系列可加载到内存中的连续块,加载到内存后从其第一条代码开始指向,引导程序便启动一个具体的操作系统
超级块
存储文件系统的有关信息,如文件系统类型、i结点数目、数据块数目
索引结点
文件数据块
安装
定义
文件系统在进程使用前必须先安装(挂载)
Windows系统
维护一个扩展的两级目录结构,用驱动器字母表示设备和卷。卷具有常规树结构的目录,与驱动器号相关联,还含有指向己安装文件系统的指针。特定文件的路径形式为driver-letter:\path\to\file,操作系统找到相应文件系统的指针,并且遍历该设备的目录结构,以查找指定的文件。新版本的Windows允许文件系统安装在目录树下的任意位置,就像UNIX一样。在启动时,Windows操作系统自动发现所有设备,并且安装所有找到的文件系统。
UNIX系统
使用系统的根文件系统,由内核在引导阶段直接安装,其他文件系统要么由初始化脚本安装,要么由用户安装在已安装文件系统的目录下。作为一个目录树,每个文件系统都拥有自己的根目录。安装文件系统的这个目录称为安装点,安装就是将磁盘分区挂载到该安装点下,进入该目录就可以读取该分区的数据。已安装文件系统属于安装点目录的一一个子文件系统。安装的实现是在目录inode的内存副本上加上一个标志,表示该目录是安装点。还有一个域指向安装表的条目,表示哪个设备安装在哪里,这个条目还包括该设备的文件系统超级块的一个指针。