文件系统将磁盘物理特性转换为用户看到的路径名和文件名,用户无需关心磁柱、磁道、盘面和数据块等信息。
文件系统的主要特性就是存储大量的信息,多个进程可以同时访问一个文件,进程结束也不会影响文件的持续存在。
文件的实现:
- 给文件分配磁盘空间
- 记住这些磁盘空间的位置
- 将文件内容存放在这些空间
数据在磁盘上的存放方式:
- 连续空间存放方式(空间浪费,不易扩展)
- 非连续空间存放方式:
链表方式:但是单链表访问速度慢并且指针占用空间,指针如果损坏无法重构文件。因此,可以使用文件分配表(FAT)的方式,将相应文件的数据块对应的磁盘块指针以索引的方式进行记录,只需要顺着指针找到特定数据块所在的物理磁盘进行读取就可以了。但是随着磁盘空间的增大,因为要维护所有物理磁盘块号的分配表,FAT也会随之增大,会占用较大的内存空间。
索引方式:为了解决上述问题,我么你希望能够将每个文件的所有数据块的磁盘地址进行收集,集中存放在一个索引数据块里,而在文件打开时将该数据块加载到内存,以后访问任何一个数据块都可以从该索引块里面获得物理磁盘地址。内存中只存放我们需要的文件的数据块地址,节约了内存。索引数据块称为inode。
但是单级索引inode伸缩性较差,如果想对文件扩容则需要重新分配,因此引入了多级索引,即类似多级页表的形式,使用顶级inode存放次级inode的磁盘地址和次级inode存放数据块的物理磁盘地址。但是多级索引会增加访问数据块所需要的磁盘访问次数(因为可能要访问多个次级inode)。
综上,单级索引不适合大文件,多级索引不适用小文件,那么考虑将单级和多级进行有机组合:非对称多级索引
非对称索引中索引即可以是单级,也可以是多级,单级用来存放磁盘地址,多级用来存放次级inode地址。根据文件的大小来协调二者的比例。当然,如何文件很大,还可以有三级inode,甚至四级inode,但是文件的访问时间会随着inode的层数增加而增加。