我正在编写一个程序,需要以随机顺序读取和写入大量数据,而且由于我不想使用数百个小文件,我正在尝试开发一种写入的虚拟文件系统到一个大文件,跟踪“文件”在“磁盘”文件中的位置。
因此,我一直在努力寻找有关文件系统实现的详细信息,但有一件事似乎从未以我能理解的方式解释:文件系统如何跟踪新文件创建的空闲/删除扇区?例如,FAT在开头的所有扇区的索引似乎是唯一保存此信息的地方,但是以线性,O(n)方式搜索索引以寻找新的可用空间区域似乎会相当低效,特别是如果没有删除的扇区,你必须在列表的末尾插入一些东西。我错过了什么,或者这是文件系统如何真正检测未使用的扇区进行写入?谢谢!
答案 0 :(得分:1)
答案取决于整个文件系统架构。它可以是空闲页面的线性列表,或者可以以与其他文件(例如链接列表)相同的方式计算可用空间。
实际开发高效的文件系统对于您所拥有的辅助任务来说是非常严肃的任务。因此,使用一些已创建的虚拟文件系统是有意义的,例如一个CodeBase商品或我们的Solid File System。
答案 1 :(得分:1)
我找到了一个有用的PDF,解释了如何在linux文件系统中映射可用空间。这更符合我的要求。
http://www.kernel.org/doc/ols/2010/ols2010-pages-121-132.pdf
答案 2 :(得分:-2)
它就像一个链接列表:每个文件可以分隔成许多分区,并且在分区的末尾,每个分区都指向下一个分区的开头,对于自由空间来说也是如此。将可用空间视为一个包含不在另一个文件中的每个字节的大文件!