文件系统
字数: 0

设计需求

Design Requirements
  • User Interface
  • Support for a variety of storage devices
  • Mapping files onto devices
  • Organising files into directories
  • File Protection, File Sharing
  • Data Integrity & Persistence

文件分配

连续分配

Contiguous allocation,一个文件的所有数据块都被连续存储在磁盘上的相邻物理块中。
假设我们有一个文件,由 11 个 250 字节的记录 (record) 组成,存储在一个具有 16 个物理块的磁盘上,每个物理块的大小为 1000 字节,我们想要访问第 6 个记录并将其读取到程序内存中 ➡️ Read(File, Record=6, Destination=Buffer, NumBytes=250)
哪个物理块包含所需的第6个记录?
  • File 占据的总字节 ,则 File 将占据存储设备上的三个特定物理块(块 2、3 和 4)。
  • ,即第6个记录从 File开始位置计算,偏移了 1250 字节(一个块)
  • 即最终锁定块 3
notion image

链式分配

Linked Allocation
notion image
数据块以链表方式存储,即文件被划分为若干个块,每块包含数据及指向下一个块的指针。
notion image
  • 在顺序访问文件时,只需要按顺序读取每个块,并利用块内的指针找到下一个块,而不需要在其他地方寻找额外的信息。
    • Good performance for sequential access
  • 在随机访问方面效率较低,需要遍历多个块才能找到所需文件,产生额外的资源开销。
    • Random access to data is not as efficient
    • Resource overhead associated
为了提高访问性能,可以通过将所有的链接汇集到一个单独的文件分配表 (File Allocation Table,FAT)FAT 可以从磁盘加载到内存中,跟随指针链来定位文件块,提高随机访问性能。但如果 FAT 受损,可能会导致无法访问所有文件,因此需要进行复制备份。

索引分配

Indexed Allocation
notion image
针对每个文件分配了一个索引块。索引块是一个表格,将逻辑文件块映射到它们的物理块位置。文件的目录项中包含指向该文件的索引块的指针,从而可以立即确定所有文件块的位置。
notion image
  • 由于可以通过查找索引块来任意定位数据块,允许文件的逻辑块在存储设备上分散存储,无论在哪里都可以使用空闲块来存储它。
    • Good performance for both sequential and random record access
    • Scattered across the storage device wherever free blocks
  • 可能造成一部分的资源开销浪费
    • For small files, much of the index block would be wasted

文件命名空间

File Name Space, i.e. a set of name
通过这个集合中的 name,系统利用它可以索引到对应的对象,路径即可视为在文件命名空间中定位和访问文件的方式。
notion image

统一文件命名空间

Unified File Namespace
在传统的系统中,每个计算机或存储设备都有自己的文件系统和命名空间。这意味着文件被存储在不同的设备上,并且在访问这些文件时需要知道它们的具体位置。这给文件的管理和访问带来了复杂性。
通过统一文件命名空间的概念,不同设备上的文件系统可以被组合成一个逻辑上的整体,无论文件实际存储在哪个设备上,用户只需要使用统一的文件路径或名称来访问它们。
  • 应用例子:分布式存储系统 (Hadoop HDFS)、云存储 (Google Cloud Storage)

文件操作

File Access Operations API (System call)
  • Open
  • Close
  • Create
  • Delete
  • Copy
  • Rename
  • Get Attributes
  • Set Attributes
  • Read
  • Write
  • Seek:Search to a specified point in the file
  • Append:在文件末尾添加新的数据,扩展文件大小。
  • Retrieve:Read a record or group of records from a file
  • Update:修改文件中的数据
  • Insert:将数据插入到文件的指定位置
  • Remove:从文件中删除数据

具体文件系统

传统的文件系统在磁盘上的布局如下
notion image
为了对超级块,节点,逻辑块这三部分进行高效的管理,创建了几种不同的数据结构
notion image

用户描述符表

User Descriptor Table

系统文件表

System File Table

Inode 表

索引节点表

虚拟文件系统

Virtual File System,VFS它隐藏了底层文件系统的细节,提供了统一的接口,使得不同的(具体)文件系统可以以相同的方式进行访问和操作。

Vnode

可以理解为 inode 的一种抽象?
notion image
 
2023 - 2026