文件系统
人们注意到,仅有内存作为储存信息的媒介是不够的。因为当内存发生断电时,所有信息都会丢失。因此我们需要一种持久化的储存媒介。持久化的储存媒介种类很多,比如固态硬盘、机械硬盘、光盘等等。在操作系统中,我们统一将这些媒介抽象为块设备。
从用户的角度来看,用户希望能够使用多个文件,这样可以更方便地区分不同的信息。这意味着我们需要制定一个格式,用于在块设备上确定每个文件中的数据所在的位置。这个格式就是文件系统。
尽管文件系统是一个复杂的子系统,但是通过模块化设计,我们可以将文件系统分为三个层次,每个层次负责不同的功能。这样可以使得文件系统的设计更加清晰。三个层次分别为:
- 块设备驱动:负责与块设备进行交互,读写数据,这里面有很多跟硬件交互的逻辑。
- 文件系统驱动:负责将文件系统的操作转换为块设备的操作,由于已经有了块设备抽象,这个部分只需要关注核心逻辑即可。
- 系统调用:发生系统调用时,用户程序的内核部分会调用文件系统驱动(这里面可能还会有一些逻辑上的转换,如文件描述符到对应 inode 的转换)。