FAT 和 UNIX 文件系统 (磁盘上的数据结构) [南京大学2023操作系统

00:00
文件系统是操作系统中用于管理文件的一种机制。文件系统将文件抽象为虚拟的磁盘,并通过索引结构来管理大量文件。文件系统的实现可以基于磁盘的读写操作,并提供文件的读取、写入和大小调整等功能。文件可以是文本文件、二进制文件或数据库等形式。目录是文件的集合,可以通过层级结构来组织文件。
05:06
目录和文件是操作系统中重要的数据结构,可以通过API进行创建、删除、链接等操作。实现m命令时,只需修改目录的API,通过路径解析和表的挂载,可以将节点移动到另一个文件系统中重新解析。文件系统的重要部分是实现文件的读写和目录的管理,可以借助动态数组和映射来实现。
10:32
在实现文件系统时,可以定义一个共同的基类,用于表示文件和目录。在数据结构课程中,内存被假设为无限大的随机访问内存,但实际上内存访问是有成本的。因此,在磁盘上实现数据结构时,可以使用内存作为磁盘的缓存,并延迟将数据写回磁盘。这种做法类似于内存和硬盘之间的缓存层次结构。
15:41
文件系统的设计需要解决读放大和写放大的问题。为了减少读放大和写放大的现象,可以通过合理排列数据来提高数据的访问效率。同时,考虑整个操作系统的视角,将数据进行适当的排列,可以减轻读放大和写放大的现象。
20:37
该段字幕主要讲述了在实现文件系统时需要考虑的一些因素,如磁盘容量、文件大小等。在小容量磁盘上实现文件系统时,可以使用简单的数据结构,如链表来表示文件和目录。同时,还需要额外的数据结构来记录文件的大小和块的分配情况。
26:24
目录在操作系统中是一个普通的文件,但有特殊的结构。可以使用链表来实现目录,有两种设计方式:一种是每个块存储一部分数据和下一个块的指针,另一种是将所有的下一个块的指针集中存储在某个地方。
31:54
该段字幕主要讨论了文件系统中数据的存储方式和优缺点。一种方式是在每个数据块后面放置指针,这样实现简单但存在查找效率低和数据完整性问题;另一种方式是将指针集中存放在文件系统的某一区域,这样查找效率高但存在磁盘损坏导致数据丢失的风险。最终,提出了将指针放在内存中缓存,并存储多份以提高可靠性的解决方案,即FAT文件系统的设计。
37:25
文件系统是由字节序列组成的,其中包含了元数据和文件分配表。文件分配表是由一系列的next指针组成的,用来指向文件的数据块。文件系统中的最小单位是cluster,而fat文件系统的next指针的大小取决于文件系统的类型。实验中需要读取文件系统的结构和数据来还原照片。阅读文件系统的手册是实验的关键。
42:23
文件系统的重要概念包括每个簇的扇区数、合法的数值范围、以及next数组的用途。next数组不仅用于存储下一个簇的编号,还可以用来标记簇的分配情况,如可分配、保留和损坏等。文件系统可以通过标记损坏的簇来绕过磁盘的损坏部分,延长机械盘的寿命。
47:35
文件系统中的重要细节包括文件的短文件名和扩展名、文件类型、目录标记、长文件名的处理等。这些细节在操作系统中是不可分割的,对于理解和实现文件系统非常重要。
52:23
文件系统中的特殊字符和元数据的存储位置对系统的影响。文件系统的特殊字符集可能导致命名冲突和错误。在FAT文件系统中,文件的元数据存储在目录项中,而不是文件头部,这样可以提高局部性。然而,如果目录文件损坏,其中的文件也会受到影响。可以通过遍历文件系统的工具来查看文件系统的目录结构。
58:02
操作系统提供了一些API,我们可以使用这些API来实现一些应用需求。通过查阅手册,我们可以了解到操作系统提供的API的使用方法。在操作系统中,文件系统的格式化是将文件分配表抹掉,但目录文件仍然存在,我们可以通过扫描文件系统找到目录文件,并根据目录结构找到文件的第一块。
63:55
位图是按照行的方式存储的,可以通过找到一行最接近的图片来拼接整张图片。文件系统的设计使用了局部性,但对于大文件和随机访问不太友好,容易产生碎片。
69:13
文件系统设计需要考虑存储容错和性能,UNIX文件系统使用索引节点(i-node)来存储文件的元数据,每个文件都有唯一的i-node编号。创建新文件时需要分配未使用的i-node。
74:34
Unix文件系统使用了一种称为i-node的数据结构来管理文件和目录。i-node包含了文件的元数据和指向文件数据块的指针。文件系统还使用了一种称为big map的数据结构来快速查找空闲的i-node。此外,Unix文件系统支持文件的链接和大小文件的访问优化。
80:14
文件系统保存文件的各种信息,包括文件的权限、大小、时间等。文件可以通过索引块来找到对应的磁盘块。对于小文件,直接通过前12个磁盘块就可以找到数据。对于大文件,可以使用索引列表来进行索引,将一个磁盘块看成是1024个32位指针,通过多级索引可以找到对应的磁盘块。
86:12
该段字幕主要讲述了文件系统中的索引和分组设计,以及文件系统的头部和目录项的结构。其中提到了一级、二级和三级索引的设计,以及使用位图来存储空闲的i节点和数据块。此外,还提到了文件系统的头部信息和目录项的简单结构。
91:17
Unix文件系统的目录实现简化了Windows和FAT文件系统的复杂性,通过使用i节点的机制,将文件和目录的元数据分开存储,提高了性能和可靠性。它将相近的数据放在一起,通过内存缓存减少了读写操作,支持链接i节点和连续存储,但仍存在碎片问题。
97:01
文件系统的重要信息都放在一个结构体中,包括文件的位置和大小。如果要对文件系统造成最大伤害,应该打击super block。修复bug可能导致文件系统头部信息丢失,但如果能找回l区域,文件系统仍可恢复。打击i know区域会导致索引和数据丢失,难以恢复。文件系统是磁盘上的数据结构。
(by gpt-3.5-turbo,尝试中)