面试题答案
一键面试文件创建场景
- 具体过程:
- 当创建文件时,文件系统首先需要找到一个空闲的inode。它会遍历inode位图,找到一个未使用的inode位,将其标记为已使用。
- 然后初始化该inode的相关信息,如文件类型、权限、所有者等。
- 为文件分配数据块,同样通过遍历数据块位图找到空闲的数据块并标记为已使用。
- 更新超级块中有关空闲inode数量和空闲数据块数量的信息,空闲inode数量减1,空闲数据块数量根据实际分配的块数相应减少。
- 关键数据结构:
- 超级块(Superblock):存储文件系统的整体信息,如总inode数、空闲inode数、总数据块数、空闲数据块数等。在文件创建时,其中空闲inode数和空闲数据块数字段会被更新。
- inode位图(inode bitmap):用于记录inode的使用情况,每个位对应一个inode,0表示空闲,1表示已使用。在文件创建时,通过修改该位图来标记新分配的inode。
- 数据块位图(block bitmap):记录数据块的使用状态,每个位对应一个数据块,0代表空闲,1代表已使用。文件创建分配数据块时会更新此位图。
- inode:存放文件的元数据,如文件大小、权限、时间戳等。文件创建时会初始化一个新的inode。
文件删除场景
- 具体过程:
- 首先根据文件路径找到对应的inode。从目录项中获取文件的inode编号,进而定位到inode。
- 释放文件占用的数据块,将数据块在位图中标记为空闲,更新超级块中空闲数据块数量,使其增加。
- 释放inode,将inode在位图中标记为空闲,同时更新超级块中空闲inode数量,使其增加。
- 如果目录项为空(即目录中所有文件都被删除),可能还需要对目录的inode和数据块进行释放和相应超级块信息更新。
- 关键数据结构:
- 超级块:与文件创建相反,空闲inode数和空闲数据块数会增加,更新对应字段。
- inode位图:将被删除文件的inode在位图中的位设为0,表示该inode已空闲。
- 数据块位图:把文件占用的数据块在位图中的位设为0,标记为空闲。
- inode:获取被删除文件的inode信息,释放其占用的资源。
文件系统挂载场景
- 具体过程:
- 操作系统从存储设备(如磁盘)读取超级块信息到内存中。超级块包含文件系统的关键参数,如文件系统类型、块大小、inode大小等。
- 根据超级块中的信息,初始化文件系统相关的数据结构,如inode表、数据块管理结构等。
- 建立文件系统根目录的inode和目录项等结构,使得可以从根目录开始访问文件系统中的文件和目录。
- 关键数据结构:
- 超级块:是挂载过程的核心,提供了文件系统初始化所需的所有基本参数。从存储设备读取到内存后,其信息用于后续文件系统结构的构建。
- inode表:根据超级块中的inode总数等信息进行初始化,用于存储文件和目录的元数据。
- 目录项结构:用于构建文件系统的目录层次结构,挂载时从根目录开始建立初始的目录项。
文件系统卸载场景
- 具体过程:
- 首先确保文件系统处于一致状态,即所有未完成的I/O操作都已完成。这可能涉及将缓存中的数据写回存储设备。
- 释放内存中与该文件系统相关的数据结构,如inode表、目录项缓存等。
- 将超级块中的一些信息(如文件系统的修改时间等)写回存储设备,确保下次挂载时能获取准确信息。
- 关键数据结构:
- 超级块:其修改时间等状态信息可能会被更新并写回存储设备。内存中的超级块副本会被释放。
- inode表:内存中的inode表占用的内存会被释放,inode表中的信息可能已在卸载前同步到存储设备。
- 目录项缓存:缓存的目录项数据占用的内存会被释放。