磁盘可以被分区,分区中可以安装文件系统,常见的文件系统有 fat32、ext2、ext4 等。分区后的磁盘结构布局如下图,其中主引导扇区记录了分区信息,并且包含引导代码可用于引导操作系统。

分区内可以安装指定文件系统,同一磁盘多个分区文件系统不要求相同。MINIX文件系统布局如下:

用于存放磁盘设备上文件系统结构的信息,说明各部分的大小。
图中列出的数据包含两部分:出现在盘上和内存中的字段和仅在内存中使用的字段,仅在内存中使用的字段是内核读取超级块后所附加的一些用于管理使用的字段信息。

inode节点保存对应文件的属性信息,其中i_zone数组使用类似多级页表的方式维护文件数据块,即记录文件逻辑块到物理块之间的映射关系。

i_zone数组包含直接盘块号、一次间接盘块号和二次间接盘块号。一次盘块号可视为单级页表,一次间接盘块号可视为二级页表、二次间接盘块号可视为三级页表。
这种处理方式的好处在于,对于小文件,通过直接块号可快速定位数据块;对于中等类型的文件,一次间接块可以维护较多数据块的同时,具有较快的访问速度;对于大型文件,二次间接盘块号可以维护大量磁盘块,但访问速度较慢。
内存多级页表与i_zone直接区别:不同进程具有固定大小的虚地址空间,并且对其整个虚地址空间的内存,都有可能访问到,因此使用多级页表。文件系统内存在很多大小不一的文件,综合考虑对不同大小文件的特点,使用1-3级磁盘块表可以分别处理小、中、大文件。

文件系统目录结构为树形,根节点为根目录,目录可以指向若干个子目录或子文件。

通过文件inode节点,可以定位文件数据块,那如何通过文件路径定位到具体文件?
文件系统主要包含文件和目录两种文件,目录是一种特殊的文件,其文件内容存储其目录下文件名->inode节点号的映射信息。文件查找开始于根目录,根目录号固定为0,不需要查找即可直接打开。
举例说明文件查找过程,给定存在路径/name1/name2/name3查找具体文件过程:
文件数据块定位过程

硬链接,在指定目录文件中,生成一个文件,即建立文件名->inode节点号的映射。不同之处在于,硬链接文件的inode号是其它文件的inode号,即多个文件共享一个inode。多个文件共享inode节点时,会引起inode节点引用计数增加。
硬链接示意图如下。

软链接,在指定目录文件中,生成一个文件,建立文件名->文件路径的映射。软链接文件项不直接指向被指向文件的inode号,而是记录其文件路径。符号链接不直接共享inode,不会引起inode节点引用计数增加。
打开软链接文件时,先获取其指向的文件路径,再通过指向的文件路径打开文件。
软链接文件示意图如下,其中蓝色线表示软链接。

硬链接:多个文件指向同一个inode节点,引用计数等于文件数量,删除其中一个文件,只会导致引用计数减小1,引用计数为零时,文件才会被删除。
软链接:删除软链接,不会对被指向文件产生任何影响;删除被指向文件,软链接可能会失效。
星标公众号,第一时间看文章!
小哥搜集了一些嵌入式学习资料,公众号内回复【1024】即可找到下载链接!
推荐好文点击蓝色字体即可跳转
☞专辑|Linux应用程序编程大全 ☞ 专辑|学点网络知识 ☞ 专辑|手撕C语言 ☞ 专辑|手撕C++语言 ☞ 专辑|经验分享 ☞ 专辑|从单片机到Linux ☞ 专辑|电能控制技术 ☞ 专辑|嵌入式必备数学知识 ☞ MCU进阶专辑
☞ 经验分享