《操作系统》书上说:文件系统是块设备,一般是4KB一块。本文尝试以字节为单位管理文件系统。
关键是空闲空间的管理。在传统的文件系统中,用的是bitmap,在新的方法中,用的是“双B+树”。
空闲空间用一张两列多行的表来描述,每行代表一个空闲空间,A列表示从哪开始,B列表示有多长。用双B+树分别对A列和B列进行索引,但这两个B+树又略有不同,见下文。
创建一个长100字节的文件,要求在B列找到略大于100的一块空闲空间。略大于指的是:在大于等于100的数字里,最接近100的那一个。这叫做B+树的偏大搜索。
删除位于2000的一段文件,需要在A列运行B+树的偏小搜索。具体方法是:找到小于2000的数字里,最接近2000的那一个,例如是1950,查看它的B列,如果正好是50,则说明可以合并空闲空间;如果小于50,说明不可合并;如果大于50,说明出错了。
说一些自相矛盾的话,以字节为单位管理文件系统,不是必须的。中、大文件以块为单位管理,小文件放在注册表里,这套方案就不错。小文件数量虽多,但总体积似乎也就几百MB。
总结:
用从哪开始的,几个字节,来描述空闲空间。
用双B+树索引A列和B列。
创建和删除文件时,用到了B+树的偏大、偏小搜索。