本系列文章为408考研操作系统知识点整理仅涉及到一些重要的考研知识点并不是完全系统全面的知识,参考书目和视频资料:汤小丹 计算机操作系统(第四版),操作系统考研复习指导,B站王道考研操作系统视频课。

4.2.1 目录

目录:是一个文件,持久化的存储在磁盘
目录项:是内核的一个数据结构,缓存在内存
这是因为查询目录时会频繁读磁盘,导致效率低下,所以内核会把已经读过的目录用目录项这个数据结构缓存在内存,下次再读到相同目录时,只需从内存读取即可

文件控制块和索引结点

文件控制块(FCB):是用来存放控制文件需要的各种信息的数据结构,以实现按名存取。FCB的有序集合称为文件目录,因此一个FCB是一个文件目录项。系统在创建新文件时,还会分配一个FCB并存放在文件目录中,成为目录项。FCB主要包含以下信息:
基本信息:如文件名、文件的物理位置、逻辑结构、物理结构等等
存取控制信息:如文件存取权限等等
使用信息:如文件建立时间、修改时间等等

索引结点(inode):在检索目录文件的过程中,其实只用到了文件名,而且仅当文件名与目录项匹配时才需要从该目录项中读出其他信息。换句话说,在检索时,文件的其他信息可以不用调入。所以可以将文件名和文件描述信息分开。同时,文件描述信息单独形成一个称为索引结点的数据结构,在文件目录中的每个目录项仅由文件名和指向该文件所对应的inode结点的指针构成。当索引结点存放在外存时就称为磁盘索引结点,放入内存后则称为内存索引结点

目录结构

单级目录结构是指在整个文件系统中只建立一张目录表,然后每个文件占一个目录项。

单级目录实现了“按名存取”,但是不允许文件重名。在创建文件时,需要先检查目录表中有没有重名文件,确定不重名后才允许建立文件,并将新文件对应的目录项插入目录表中。所以单级目录结构并不适合于多用户操作系统

两级目录结构分为主文件目录(MFD)用户文件目录(UFD)
主文件目录项纪录用户名及相应用户文件目录所在的存储位置
用户文件目录项纪录该用户文件的FCB信息

当某用户想要访问它自己的文件时,只需要搜索该用户对应的UFD,这样即解决了重名问题又在一定程度上保证了文件安全。不过,两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类

多级目录结构中,一个目录下可以有文件也可以有目录,不同目录下的文件可以重命

用户想要访问文件时,用文件的路径表示文件,文件路径是一个字符串,所有目录名和文件名均用“/”有绝对路径和相对路径之分

以/A/B/C.txt这样的路径为例:刚开始系统会从外存读入根目录的目录表,找到A目录存放位置后,再从外存读入对应的目录表;然后找到B目录的存放位置,接着依然从外存读入对应目录表,最后才找到文件C.x的存放位置。整个过程会经历3次I/O操作
可以看出,树形目录结构可以很方便地对文件进行分类归纳,层次十分清晰,也易于对文件进行管理和保护。但缺点就是不便于实现文件的共享

为了解决文件共享问题,在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图

除此,之外,还需要为每个结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点;当用户想要删除结点时,只是删除了该用户的FCB,并使共享计数器减一,并不会直接删除共享结点,只有当共享计数器减为0时,结点才会被真正删除
共享文件不是复制文件,只要其中一个用户修改了文件数据,其他用户也可以看到变化

文件共享

所谓文件共享就是指使多个用户(进程)共享同一个文件,而系统只需要保留文件的一个副本

基于索引结点的共享方式(硬链接)

在索引结点设置一个链接计数器count,用于表示链接到本索引结点(即文件)上的用户目录项的数目
若count=2则表示有两个用户共享此文件
User1创建新文件时,它便是该文件的所有者,此时count置为1;User2要共享此文件时,只需在User2的目录中增加一个目录项,并令其索引结点指针指向该索引结点,此时count变为2

当User1不再需要比文件时,不能将文件直接删除,因为如果删除了该文件那么索引节点也就不存在了,比时User2将无法访问该文件。只有当count=0时才可以真正删除

硬链接有很大的缺点
硬链接不能用与该链接不在同一磁盘分区的文件
硬连接是无法引用目录的

利用符号链实现文件共享(软链接)

在软链接方式中,只有文件的拥有者才拥有指向其索引结点的指针,而文件的共享者只有该文件的路径名。它们拥有的是一个全新的文件,只不过该文件记录了共享文件的存放路径

当文件拥有者删除共享文件时,其他共享者在访问时就会出现错误,但是只把软链接删除却没有任何影响
。这就类似于Windows中的快捷方式

4.2.2 外存空闲空间管理

空闲表法

空闲表法:适用于连续分配方式。系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应一个空闲表项,其中包括表项序号、该空闲区第一个盘块号,该区的空闲盘块数等信息,然后将所有空闲区按其起始盘块号递增的顺序排列

空闲链表法

空闲链表法:将所有空闲盘区拉成一条空闲链,然后根据构成链所用基本元素的不同,可以把链表分为空闲盘块链和空闲盘区链
·空闲盘块链:以盘块为单位组成一条空闲链;该种方式适用于离散分配的物理结构,并且为文件分配多个盘块时可能要重复多次操作
·空闲盘区链:以盘区为单位组成一条空闲链;该种方式即适用于离散分配也适用于连续分配,并且为一个文件分配多个盘块时效率更高

位示图法

位示图法:这是采用二进制的一位表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应
若为“0”:表示对应盘块空闲
若为“1”:表示对应盘块已分配

位示图一般用连续的“字”来表示,字中的每一位对应一个盘块。所以可以采用(字号,位号)对应一个盘块号

成组链接法

成组链接法:空闲表法和空闲链表法都不适合用于大型文件系统。在UNIX和类UNIX系统中采用的是成组链表法,这种方法结合了空闲表和空闲链表。具体来说,把顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区则保存另一个空闲扇区的地址,如此继续下去,直到所有空闲扇区均被链接。系统只需要保存一个指向第一个空闲扇区的指针

表示文件存储器空闲空间的第一个成组链块以及卷中的目录区、文件区划分信息都需要保存在辅存储器中,一般放在卷头位置,在UNIX系统中称之为超级块