【Linux】Linux操作系统的文件管理系统

操作系统作为磁盘文件系统和用户之间的中介,必须在内核中建立自己的文件系统,为与磁盘文件系统相区别,我们把它叫做操作系统的文件管理系统,简称文件管理系统。

文件管理系统与磁盘文件系统的关系

与处理器相比,磁盘是一种工作速度极其缓慢的外部设备,操作系统很难直接利用磁盘文件系统来对文件进行操作。因此,操作系统必须根据磁盘文件系统提供的各种基本信息在内存中建立必要的缓冲数据结构,一方面为了避免频繁地访问磁盘,另一方面也用来记录文件的一些动态信息。与此同时,还要建立一些操作系统自用的文件管理用表。

文件管理系统中的管理用表及缓冲区主要有:

  • 文件注册表。包含文件系统在磁盘分区中信息的登记表;
  • 全局打开文件表。包含每个打开文件的文件控制块(FCB)的附件以及其他信息;
  • 进程打开文件表。该表为进程所有,它包含一些指针,这些指针指向全局打开文件表中本进程当前所使用的FCB;
  • 目录缓冲区。用来保存近期访问过的目录信息;
  • 索引节点缓冲区;
  • 文件缓冲区。用来保存当前或近期访问文件的内容。

下图以打开文件和读取文件操作表示了文件管理系统和磁盘文件系统的关系:

当用户进程使用系统调用open()打开一个文件时,该系统调用会向磁盘驱动器发出驱动命令,在磁盘的目录文件中按用户进程给出的文件名或者文件存储路径搜索该文件的目录节点;找到后将在内存创建一个该节点的数据结构,将磁盘中的目录节点的信息复制过来,并把该文件的i节点(FCB)存放在一个叫做全局打开文件表的表中。

之所以这么做,是为了使进程可以直接用内存中的数据结构来访问该文件,而不必再去访问慢速的磁盘了。

从上面的叙述中可知,操作系统的文件管理系统就是磁盘文件系统与用户进程之间的中介。

文件缓冲区

为提高访问文件的效率,稍微复杂一些的操作系统都在内存中创建了缓冲区。所谓缓冲,是指系统为当前和最近读写操作过的文件内容在内存中保留一份副本,以便再次需要访问这些内容时就不必费时费力地从磁盘中读入了。当需要写磁盘时,可以先写到副本中,待系统较为空闲时再将副本写入磁盘。

除此之外,文件缓冲区还为多线程共享同一个文件建立了基础。

文件系统的层次结构

从存储位置来看,文件系统的层次结构如下所示:

从组织层次来看,文件系统的层次结构如下所示:

在这种层次结构中,每层都利用底层的功能实现更高级的抽象,甚至把文件变成用户便于理解的方式。

设备驱动层是由设备驱动程序和中断处理程序组成,它处于文件系统的最底层,负责将上层的命令翻译成设备可以理解的底层命令,以驱动硬件设备的数据读写操作。

基本文件系统的任务主要是向驱动层发送合适的驱动命令。该层通常与文件组织模块合并成为文件组织系统。

文件组织模块知道文件及其逻辑块和物理块,知道文件存储块的分配方式和文件的位置,所以文件组织模块负责将上层的逻辑文件操作翻译成实际的驱动命令。另外,文件组织模块还要负责进行空闲块的管理与分配工作。

逻辑文件系统处于最高层,用来接收应用程序的命令。逻辑文件系统负责管理系统用于文件管理的所有数据结构,向文件组织模块提供组织信息(例如添加、删除目录和节点),并通过文件控制块(FCB)来维护文件结构和文件的保护安全。

虚拟文件系统

目前,面对各式各样、各具特点的文件系统,能否以同一界面来使用不同的文件系统就成了衡量通用操作系统性能的标准之一,所以现代操作系统大多都是采用虚拟文件系统(Vitual Filesystem Switch,VFS)。

所谓虚拟文件系统,就是一个本身并没有文件的系统,但它为其他不同的实际文件系统提供了统一的操作界面,也就是说,它相当于一个“书皮”。其设计思想是:既然所有实际文件系统都是用来管理文件的,那么它们总有一些共性,特别是在文件的操作方面,誓如,它们都有文件的打开、关闭、读、写等操作。这样,就可以利用这些共性来构建一个统一的文件系统框架,并用这个框架来容纳实际文件系统,以实现不同文件系统的统一管理。

虚拟文件系统和实际文件系统的关系示意图如下:

简单地说,设置虚拟文件系统的目的就是:统一不同的文件系统,并不让用户与实际文件系统直接见面。

猜你喜欢

转载自blog.csdn.net/qq_38410730/article/details/81349113