操作系统-文件管理知识点回顾
1.先理解直接地址索引、一级间接索引、二级间接索引
直接地址索引:直接指向一个存数据的磁盘块
一级间接索引:指向一个内容全部是直接地址索引的磁盘块,它所指向的这个磁盘块中的每个直接地址索引,又指向不同的存数据的磁盘块
二级间接索引:先指向一个包含一级间接索引的磁盘块,每个一级间接索引再指向一个包含直接地址索引的磁盘块,每个直接地址索引再直接指向一个存数据的磁盘块
2.分析
每个磁盘块大小256B,每个地址项大小为4B,因此一个磁盘块可以存放256/4=64个地址项,因此,在一级间接索引和二级间接索引的那些中间的存放地址索引的磁盘块,每个可以存放64个地址
单个文件的索引结点包含的地址项所指向的存放数据的磁盘,若都是存放这个文件的数据,没有其他文件的数据跟它共享一个磁盘块,那这些所有所指的存放数据的磁盘块的大小就是单个文件的最大长度
4个直接地址索引,直接指向4个存放数据的磁盘块,这部分数据大小为4*256B=1024B
1个一级间接地址索引,指向一个包含64个直接地址索引的磁盘块,每个直接地址索引又指向一个存放数据的磁盘块,因此,一个一级间接地址索引所对应的数据大小为64*256B=16384B
1个二级间接地址索引,指向一个包含64个一级间接地址的磁盘块,每个一级间接地址又指向64个直接地址索引,因此一个二级间接地址索引一共指向6464个直接地址索引,因此一个二级间接地址索引对应的数据大小为6464*256=1048576B
因此,一个文件的索引结点包含的4个直接地址索引+2个一级间接索引+1个二级间接索引所能表示的单个文件最大长度为1024B+2*16384B+1048576B=1082368B=1057KB
索引式文件系统
在UNIX时代,就已经实现了索引式的文件系统。它的原理是为一个文件的所有块建立一个索引表,索引表就是块地址数组,每个数组元素就是块的地址,第n个数组元素指向文件中的第n个块,这样访问任意一个块的时候,只需要从索引表中获得块地址就可以了。而且文件中的块依然可以分散到不连续的零散空间中。其结构如下图所示
索引表的索引结构称为inode,用来索引,跟踪一个文件的所有块。inode是文件索引结构组织形式的具体体现,一个文件就必须对应一个inode。
索引表本身要占用存储空间,如果文件很大时,块就比较多,索引表就会很大。UNIX为了解决这个问题,采用间接索引表来处理。
具体的做法是:每个索引表中有15个索引项,前12个索引项对应文件的12个块,他们是文件的直接块。若文件大于12块,就再建立一个新的块索引表,新索引表称为一级间接索引表,表中可容纳256个块地址,这个索引表也会占用一个物理块,老的索引表的第13个索引项就会指向这个索引表所在的物理块。通过一级间接索引表,文件最大可达到 12 + 256 = 268块。
如果文件超过268块的大小,就再建立二级间接索引表,此表中各个表项存储的是一级间接索引表,老的索引表中的第14个索引项就会指向这个二级间接索引表,此时的文件最大可到 268 + 256 * 256。如果块大小为4KB的话,大约可以表示257MB的文件。
如果任然不够用的话,就会建立三级间接索引表,让老索引表的第15个索引项指向这个三级间接索引表。此时能表示的文件大小大约是64GB。
inode的结构如图所示
![](https://img2022.cnblogs.com/blog/841795/202208/841795-20220826110546350-700442131.png)