4.2 磁盘文件的存储
UNIX文件系统的存储通过目录和文件系统结构共同完成,其中前者存储了文件的层次结构,后者存储了文件的位置与内容。
1目录文件
在UNIX中,目录是一种特殊的文件,它的内容是一系列的目录项,每个目录项由该目录下的一个文件名及此文件占用的i节点编号两部分组成。可以通过”ls –ai”命令查看各目录项内容。
目录搭建了一个树状文件结构体系,并且记录了文件名称和i节点之间的对应关系,从而在文件名与文件属性,内容之间架起了一座桥梁。
2磁盘文件
文件系统通过目录记载文件名称及其对应的i节点编号,通过i节点记录文件的信息与内容。事实上,i节点直接记录的只是文件的属性,文件的具体内容存储在数据区的数据块中,i节点中仅保留了一个”磁盘地址表”来记录文件内容存储的位置。
“磁盘地址表”由13个块号组成,每个块号占用4个字节,代表了数据区的一个数据块编号。
UNIX文件系统采用三级索引结构存储文件,它把”磁盘地址表”分为直接索引地址,一级间接索引地址,二级间接索引地址和三级间接索引地址四个部分。
UNIX文件存储方式复杂,在处理大文件时,由于间接索引的存在,导致磁盘利用率低,数据寻址速度慢,但是在处理小文件时却非常便利,长度不高于10K的文件可以直接寻址,实际上,统计数据表明,在UNIX中,80%为小文件,20%为大文件,其中85%的文件小于8K,48%的文件小于1KB,只有1%的文件为超大文件。
3链接文件
链接文件分为硬链接文件和符号链接文件。创建文件的硬链接并不占用额外的磁盘块,它在目录文件中增加一个目录项。登记了文件名和被链接文件的i节点号,再将i节点中di_nlink(文件链接数)字段值加1即可。链接文件是原文件的另外一个访问路径,二者指向同一块磁盘区域,因此,通过硬链接更改文件,就是更改原文件本身。
在执行删除文件操作时,文件系统将i节点di_nlink字段减1,只有当值为0时,即没有任何链接指向该节点时,才真正从磁盘上删除文件。
硬链接只能在文件系统内实现,当跨越文件系统链接时,需要创建符号链接,符号链接又名软链接,它类似于window中的快捷方式,本身是占用磁盘块的文件,内容上记录了一个指向目标文件的链接,访问时操作系统先读取此链接再读取目标文件。
4磁盘文件读取工作原理
下面,我们以命令”cat T1.c”执行过程为例
步骤一:在当前目录文件中查找文件T1.c及对应的i节点编号,假设为1109
步骤二:在i节点表中读取第1109号节点
步骤三:读取i节点中文件属性,访问权限等信息。
步骤四:读取i节点中磁盘地址表,按照三级索引规则在数据区读取文件内容。