0%

操作系统文件管理

文件系统是操作系统中文件的管理者。文件系统为上层用户提供文件抽象并实现文件访问所需要的接口,同时以特定的存储格式在下层存储设备中维护每个文件的数据以及元数据。操作系统将存储设备抽象为块设备,块设备上的的存储空间被划分为固定大小的存储块,每个存储块有一个地址被称为块号。

基于inode的文件系统

inode

inode是“index node”的简写,即索引节点,记录了一个文件所对应的所有存储块号。inode中保存了三种存储指针,第一种指针为直接指针,其直接指向数据块,数据块中保存了文件数据;第二种指针为间接指针,指向了一个一级索引块,一级索引块中存放者指向数据块的指针。第三种指针为二级间接指针,指向一个二级索引块,二级索引块的每个指针都指向一个一级索引块,进而指向多个数据块。

inode数据索引

通过上述的组织方式可以看出,一个文件系统所支持的最大文件大小收到文件数据组织方式的限制,通过调整inode的设计可以改变其能够管理的最大文件大小。为了支持更大的文件,inode还可以启用三级或者四级间接指针。

inode还会记录该文件的其他元数据,例如文件模式、链接数、文件大小、文件访问时间等。

存储结构

文件系统以特定的存储布局将文件数据以及元数据保存在存储设备之中。为了高效的管理这些文件数据以及元数据,文件系统通常将存储空间划分为不同区域,分别用于不同功能。通常一个存储设备会被划分为超级块、块分配信息、inode分配信息、inode表以及文件数据块等区域。

超级块记录了整个文件系统的全局元数据,例如文件系统的版本、所管理空间大小、最后一次的挂载时间以及一些统计信息(例如最大inode数、空闲inode数、最大块数量、空闲块数量)。

块分配信息使用位图(bitmap)的格式来标记文件数据块区域中各个块的使用情况,如果为比特位为1则表示对应的数据块已经被分配和使用,若为0则代表对应的数据块空闲。inode分配信息与块分配信息类似,其对应的是每个inode的使用情况。

inode表以数组的形式存放整个文件系统的所有inode结构,文件系统使用inode在此表中的索引对不同inode进行区分。

剩余的存储空间为文件数据块区域,用于保存文件的数据。

虚拟文件系统VFS

在一个计算机之中可能存在多个文件系统,需要使用到虚拟文件系统(VFS)对多种文件系统进行管理和协调,允许它们在同一个操作系统上共同工作。VFS定义了一系列内存数据结构,并要求底层的不同文件系统提供指定的方法,利用这些方法将不同文件系统的元数据统一转化为VFS的内存数据结构。