设计需求
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
链式分配
Linked Allocation
数据块以链表方式存储,即文件被划分为若干个块,每块包含数据及指向下一个块的指针。
- 在顺序访问文件时,只需要按顺序读取每个块,并利用块内的指针找到下一个块,而不需要在其他地方寻找额外的信息。
- Good performance for sequential access
- 在随机访问方面效率较低,需要遍历多个块才能找到所需文件,产生额外的资源开销。
- Random access to data is not as efficient
- Resource overhead associated
为了提高访问性能,可以通过将所有的链接汇集到一个单独的文件分配表 (File Allocation Table,FAT)。FAT 可以从磁盘加载到内存中,跟随指针链来定位文件块,提高随机访问性能。但如果 FAT 受损,可能会导致无法访问所有文件,因此需要进行复制备份。
索引分配
Indexed Allocation
针对每个文件分配了一个索引块。索引块是一个表格,将逻辑文件块映射到它们的物理块位置。文件的目录项中包含指向该文件的索引块的指针,从而可以立即确定所有文件块的位置。
- 由于可以通过查找索引块来任意定位数据块,允许文件的逻辑块在存储设备上分散存储,无论在哪里都可以使用空闲块来存储它。
- 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,系统利用它可以索引到对应的对象,路径即可视为在文件命名空间中定位和访问文件的方式。
统一文件命名空间
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:从文件中删除数据
具体文件系统
传统的文件系统在磁盘上的布局如下
为了对超级块,节点,逻辑块这三部分进行高效的管理,创建了几种不同的数据结构
用户描述符表
User Descriptor Table
系统文件表
System File Table
Inode 表
索引节点表
虚拟文件系统
Virtual File System,VFS,它隐藏了底层文件系统的细节,提供了统一的接口,使得不同的(具体)文件系统可以以相同的方式进行访问和操作。
Vnode
可以理解为 inode 的一种抽象?