文件组织结构
硬盘的读写单位是扇区,为了避免频繁访问硬盘,操作系统会等到数据积累到一定大小,才进行硬盘读写操作。这个一定大小的数据称为块或簇。
块是文件系统的基本单位,因此文件会被拆分成多个块来存储(至少1个),文件的组织结构,就是如何将这些块组织在一起。
链式存储
FAT文件系统采用链式结构来组织块,在每块的最后存储下一个块的地址。
-
优点
文件可以不连续存储,提升了磁盘的利用率
-
缺点
当访问文件中的某个块时,必须从头开始遍历块节点。增加了访问频率。
inode 索引结构
UINX操作系统中使用另一种文件组织形式---inode 索引结构。此文件系统为每个文件都建立了一个索引表,保存文件中每个块地址。
因此,在UINX文件系统中, 一个文件必须对应一个inode,磁盘中有多少文件,就要有多少inode。
为避免文件太大时,inode中索引项过多,索引表过大,UNIX将一部分块放在索引表中,将其它块放在另一个索引表中。
具体实现:
老索引表中共15个索引项,前12个索引项为文件的前12个块地址。
当文件大于12个块时,建立新的块索引表(一级间接索引表),此表可包含256个块地址,使用一个物理块来储存,该物理块地址存储在老索引表第13项。此时文件大小可达 (12 + 256)块。
当文件大于258时,建立二级块索引表(256项),此表中每项为一级索引表地址。文件大小可达(12 + 256 + 256 * 256),二级索引表地址,放入老索引表14项。
当文件大于(12 + 256 + 256 * 256)时,建立三级索引表。三级索引表地址,放入老索引表15项。
inode中也包含了文件的相关信息,如权限、创建时间等。为方便管理,分区中所有文件的inode通过一个大表格来维护--inode_table。
目录简介
在Linux中,目录和文件都用inode来表示,因此目录也是文件。普通文件inode指向的数据块为文件自己的数据。而目录文件inode指向的数据块为一个目录结构,目录结构中的每一项为目录项。
目录项中包含文件名、inode编号和文件类型等。如:
操作系统通过inode对文件进行操作,不关心文件名。而用户需要通过文件名,来进行文件操作。目录项将文件名与inode编号进行了绑定。
Linux中根目录‘/’是所有目录的父目录,当根目录数据库地址固定以后,所有文件都可以从根目录开始往下查询。
inode与目录项关系:
超级块
超级快用来保存整个文件系统的元信息,如inode数组地址,inode数组长度,数据块数量、根目录地址等。
超级块的位置是固定的,存储在个分区的第二个扇区,通常占用一个扇区的大小。
参考
《操作系统真相还原》