📜  操作系统中的文件系统实现(1)

📅  最后修改于: 2023-12-03 15:10:13.019000             🧑  作者: Mango

操作系统中的文件系统实现

一个操作系统中的文件系统是负责管理和组织存储和检索数据的一组软件程序。文件系统可用于硬盘驱动器、闪存驱动器、网络驱动器等。以下是一个典型的文件系统由以下三个组成部分:

  • 文件管理器:实现在文件系统中创建、修改、复制、移动、删除和查找文件以及文件夹的操作。

  • 存储管理器:负责存储文件、将文件分配到物理磁盘上并维护文件的存储和检索流程。

  • 分配表:存储磁盘上的文件信息,包括文件的起始簇,并管理和分配文件。

存储器空间的分配
磁盘的物理结构

在操作系统中,硬盘通常是分为若干个扇区,每个扇区大小通常为512字节。扇区是存储磁盘上数据的最小单位。硬盘的物理结构如下:

硬盘的物理结构

不分区式文件系统分配方式

不分区式文件系统是将整个磁盘作为一个文件系统使用,文件直接存储在磁盘上。这种方式容易实现,但文件分配时间长,因为必须逐个查找整个磁盘的空闲分区。

分区式文件系统分配方式

分区式文件系统将磁盘划分为若干区块,每个区块叫做一个分区,每个分区上可以建立一个文件系统。每个文件系统管理者各自的文件,并直接利用其相邻的空闲区块。因为每个分区可以单独管理,所以可以减少文件分配时间。

分区式文件系统分配方式

文件分配

常见的文件分配方式有顺序分配、链接分配和索引分配。

顺序分配

顺序分配是指文件内容存储在相邻的扇区中。要分配文件时,找到磁盘上第一个可用的连续扇区,分配给文件。这种方式简单直观,但不利于文件的修改。

顺序分配

链接分配

链接分配把文件分成许多大小相等的簇,每个簇可以是连续的空闲扇区,文件各簇采用链式方法链接。每个簇中记录了下一个簇的地址,通过此方式形成一个链式结构。这种方式不容易产生磁盘碎片,利于文件修改,但是找一个文件较困难。

链接分配

索引分配

索引分配把文件分成许多大小相等的簇,每一个簇被分配到磁盘上一组索引块。索引块含有指向文件数据所在磁盘块地址的指针。按照此方式,每个文件只需要1个索引块即可便捷地找到文件。这种方式适合大文件。

索引分配

文件系统结构
UNIX文件系统

UNIX文件系统主要由以下组成部分:

  • 超级块:文件系统描述信息,如文件系统的大小、块的大小、索引节点的数量等等。

  • i节点区:i节点保存文件的元信息,包括文件的类型、属主信息、读、写和执行权限、时间戳、文件大小等信息。

  • 数据块:用来存放普通文件中实际的文件数据。每个数据块通常大小为512B-8192B。

  • 目录项:指向文件或子目录i节点的指针。

  • 根目录:整个文件系统的起点,由此开始访问整个文件系统。

FAT文件系统

FAT文件系统通过FAT表来实现文件的分配。FAT表如下所示:

FAT表

FAT表采用链接分配方式,每个目录项包含指向文件第一个簇的FAT编号。访问文件时只需要从其第一个簇开始沿着链找到所有数据簇即可。由于FAT表包含了所有簇的状态信息,因此该文件系统的最大缺点是存储效率比较低。