MIT S6.828 Lab5(实验记录一)

141 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

今天又要开新坑了MIT S6.828 的Lab5

Lab5

文件系统的前置知识

我们将使用的文件系统比大多数“真实”文件系统(包括 xv6 UNIX 的文件系统)简单得多,但它足够强大,可以提供基本功能:创建、读取、写入和删除分层目录结构中组织的文件。

我们目前只开发一个单用户操作系统,它提供了足够的保护来捕获错误,但不能保护多个相互可疑的用户。因此,我们的文件系统不支持 UNIX 的文件所有权或权限概念。我们的文件系统目前也不像大多数UNIX文件系统那样支持硬链接,符号链接,时间戳或特殊设备文件。

磁盘文件系统结构

大多数 UNIX 文件系统将可用磁盘空间划分为两种主要类型的区域:inode区域和数据区域。UNIX 文件系统为文件系统中的每个文件分配一个inode,文件的 inode 保存有关文件的关键元数据,例如其stat属性和指向其数据块的指针。数据区域被划分为更大的(通常为8KB或更多)的数据块,文件系统在其中存储文件数据和目录元数据。目录条目包含文件名和指向 inode 的指针。如果文件系统中的多个目录条目引用该文件的 inode,则称该文件为硬链接。由于我们的文件系统不支持硬链接,因此我们不需要这种级别的间接寻址,因此可以进行方便的简化:我们的文件系统根本不使用inode,而是简单地将文件(或子目录)的所有元数据存储在描述该文件的(一个且唯一的)目录条目中。

文件和目录在逻辑上都由一系列数据块组成,这些数据块可能分散在整个磁盘中,就像环境的虚拟地址空间的页面可以分散在整个物理内存中一样。文件系统环境隐藏了块布局的细节,提供了用于在文件中任意偏移量读取和写入字节序列的接口。文件系统环境在内部处理对目录的所有修改,作为执行文件创建和删除等操作的一部分。我们的文件系统确实允许用户环境直接读取目录元数据(例如:read ),这意味着用户环境可以自己执行目录扫描操作(例如:实现ls),而不必依赖对文件系统的其他特殊调用。这种目录扫描方法的缺点,以及大多数现代UNIX变体不鼓励它的原因,是它使应用程序依赖于目录元数据的格式,使得在不更改或至少重新编译应用程序的情况下难以更改文件系统的内部布局。

扇区和区块

大多数磁盘无法以字节粒度执行读取和写入,而是以扇区为单位执行读取和写入。在 JOS 中,每个扇区为 512 字节。文件系统实际上以块为单位分配和使用磁盘存储。请注意这两个术语之间的区别:扇区大小是磁盘硬件的属性,而块大小是使用磁盘的操作系统的一个方式。文件系统的块大小必须是基础磁盘扇区大小的倍数。

UNIX xv6 文件系统使用的块大小为 512 字节,与基础磁盘的扇区大小相同。然而,大多数现代文件系统使用更大的块大小,因为存储空间变得便宜得多,并且以更大的粒度管理存储更有效。我们的文件系统将使用 4096 字节的块大小,方便地匹配处理器的页面大小。

超级街区

磁盘布局

文件系统通常将某些磁盘块保留在磁盘上“易于查找”的位置(例如最开始或最末端),以保存描述整个文件系统属性的元数据,例如块大小,磁盘大小,查找根目录所需的任何元数据,文件系统上次挂载的时间, 上次检查文件系统是否存在错误的时间,依此类推。这些特殊块称为超级块(super block)。

我们的文件系统只有一个超级块,它将始终位于磁盘上的块 1 中。它的布局由inc/fs.h中的struct Super定义。而块 0 通常用于保存引导加载程序和分区表,因此文件系统通常不使用第一个磁盘块。许多“真正的”文件系统维护多个超级块,这些超级块复制到磁盘的几个宽间隔区域中,因此,如果其中一个超级块损坏或磁盘在该区域中出现媒介错误,仍然可以找到其他超级块并用于访问文件系统。

文件元数据

File structure

我们文件系统中文件的元数据的布局由 inc/fs.h 中的struct File 描述。此元数据包括文件的名称、大小、类型(常规文件或目录)以及指向组成该文件的块的指针。如上所述,我们没有inode,因此此元数据存储在磁盘上的目录条目中。与大多数“真实”文件系统不同,为简单起见,我们将使用File 这个结构体来描述文件元数据,因为它同时出现在磁盘和内存中。

struct File 中的f_direct数组包含用于存储文件前 10(NDIRECT)个块的块编号的空间,我们称之为文件的直接块。对于大小不超过 10 x 4096 = 40KB 的小文件,这意味着所有文件块的块编号将直接适合于File 结构体本身。但是,对于较大的文件,我们需要一个位置来保存文件的其余块编号。因此,对于任何大小大于 40KB 的文件,我们会分配一个额外的磁盘块(称为文件的间接块),以容纳多达 4096/4 = 1024 个额外的块编号。因此,我们的文件系统允许文件的大小达到1034个块,略高于4兆字节。为了支持更大的文件,“真实”文件系统通常也支持双重间接和三重间接块。

总结

这次写的内容都比较文字性,重要都是模型概念的理解,主要就是讲了三个点磁盘文件系统结构,扇区和区块,文件元数据 下一篇文章在完善一些内容