小节回顾
指用户看来文件内部的数据应该使如何组织起来的。
无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如txt文件。
有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。
有结构文件
小节回顾
文件控制块
FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项。
FCB中包含了文件的基本信息,最重要最基本的是文件名、文件存放的物理地址。
目录结构
索引节点
当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在改问该文件等。
小节回顾
磁盘中存储单元也会被分为一个个“磁盘块”,而磁盘块会分成与内存页面大小相等的页面。
在外存管理中,为了方便对文件数据管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。
文件的逻辑地址可以表示为(逻辑块号,块内地址)的形式。
要求每个文件在磁盘上占有一组连续的块。
目录表中应当由**“起始块号”与“长度”字段。用户给出要访问的逻辑块号,则物理块号=起始块号+逻辑块号**。
优点:
1、连续分配方式支持随机访问和顺序访问。
2、连续分配的文件在读写时速度最快。
缺点:
1、物理上采用连续分配的文件拓展不方便
2、物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片。可以采用紧凑方式处理磁盘碎片。
⭐若题目中未指明是什么链接,则一律以隐式链接为准。⭐
1、隐式链接
缺点:只支持顺序访问,不支持随机访问,查找效率低。
优点:很方便文件拓展,不会有碎片问题,外存利用率高
2、显示链接
用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表FAT。
注:一个磁盘仅设置一张FAT。开机时,将FAT读入内存,并常驻内存。FAT各个表项在物理上连续存储,每个表项长度相同,所以物理块号可以隐含。
优点:很方便文件拓展,不会有碎片问题,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
缺点:文件分配表的需要占用一定的存储空间。
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表――建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
⭐⭐超级超级超级重要考点⭐⭐
①要会根据多层索引、混合索引的结构计算出文件的最大长度(Key:各级索引表最大不能超过一个块)
②要能自己分析访问某个数据块所需要的读磁盘次数(Key:FCB中会存有指向顶级索引块的指针,因此可以根据FCB读入顶级索引块。每次读入下一级的索引块都需要一次读磁盘操作。另外,要注意题目条件——顶级索引块是否已调入内存)
存储空间的划分与初始化
记录每一个空闲区间的起始块号和区间大小(空闲盘块数)
与内存管理中的动态分区分配类似,可以采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
在回收时也与内存管理类似,进行表项的合并。
空闲盘块链:以单个空闲块为单位
空闲盘区链:以连续的空闲盘区为单位。
空闲盘块链
空闲盘区链
连续分配与离散分配都适用。
⭐⭐重要:要能自己推出盘块号与(字号,位号)相互转换的公式⭐⭐。
第一个为超级块,标明了下一组空闲盘块数和空闲块号。当第一个盘块号为-1时标明已经没有分组了,下一组无分组。
回收与分配都要讲超级块当成链头来看待,进行回收与分配。
操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件。(系统中只有一份数据,一个用户修改其他用户也看得到修改)
小节回顾
保护文件数据的安全
小节回顾
磁盘分区
open系统调用打开文件
近期访问过的目录项都会放入目录缓存中。
虚拟文件系统
①向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
②VFS要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
③每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统。
文件系统挂载
即文件系统安装/装载——如何将一个系统挂载到操作系统中。
①在VFS中注册新挂载的文件系统。内存中的挂载表( mount table)包含每个文件系统的相关信息,包括文件系统类型、容量大小等。
②新挂载的文件系统,要向VFS提供一个函数地址列表
③将新文件系统加到挂载点(mount point) ,也就是将新文件系统挂载在某个父目录下
由于我的书是王道2022,跟这2023的有偏差,所以这里会有一些缺。但也问题不大。