1.1.3 文件系统的基本原理
前文从用户角度和操作系统角度分别对文件系统进行了介绍,可以知道文件系统实现了对磁盘空间的管理,并提供了便于使用的接口。本节介绍一下文件系统的基本原理。
要想理解文件系统,先要从磁盘说起,毕竟文件系统是构建在磁盘中的。虽然磁盘的内部非常复杂,但是磁盘厂商做了很多工作,将磁盘的复杂性掩盖起来。对于普通用户来说,磁盘就是一个线性空间,就好像C语言中的数组一样,通过偏移就可以访问其空间(读/写数据)。
如图1-17所示,一个包含多个盘片的磁盘,经过磁盘控制器和驱动程序之后,普通用户看到的是一个线性的存储空间。其地址空间从0开始,一直到磁盘的最大容量。
图1-17 磁盘与空间的线性化
虽然这种线性空间已经极大地简化了对磁盘的访问,但是对普通用户而言还是非常难以使用的。因此,对操作系统而言,需要为用户提供一个更加直观和易用的使用接口。
文件系统正是操作系统中用于解决磁盘空间管理问题的软件,一方面文件系统对磁盘空间进行统一规划,另一方面文件系统提供给普通用户人性化的接口。就好比仓库中的货架,将空间进行规划和编排,这样根据编号就可以方便地找到具体的货物。而文件系统也有类似功能,将磁盘空间进行规划和编号处理。这样普通用户通过文件名就可以找到具体的数据,而不用关心数据到底是怎么存储的。
以Ext4文件系统为例,它将磁盘空间进行划分。首先将磁盘空间划分为若干个子空间(见图1-18),这些子空间称为块组。然后将每个子空间划分为等份的逻辑块。这里逻辑块是最小的管理单元,逻辑块的大小可以是1KB、2KB或4KB等,由用户在格式化时确定。
图1-18 Ext4文件系统的磁盘布局(Layout)
为了管理这些逻辑块,需要一些区域来记录哪些逻辑块已经被使用了,哪些还没有被使用。记录这些数据的数据通常在磁盘的特殊区域,我们称这些数据为文件系统的元数据(Metadata),如图1-18所示中的数据块位图和inode位图等。通过元数据,文件系统实现了对磁盘空间的管理,最终为用户提供了简单易用的接口。
这样,用户对文件的操作就转化为文件系统对磁盘空间的操作。比如,当用户向某个文件写入数据时,文件系统会将该请求转换为对磁盘的操作,包括分配磁盘空间、写入数据等。而对文件的读操作则转换为定位到磁盘的某个位置、从磁盘读取数据等。
至此,相信大家对文件系统的基本原理有了一个感性的认识,但是有可能还有一种云里雾里的感觉。不用太着急,作者在后续章节会进行更加详细的介绍。