2009年,区区的第一个任务是编写一个文件系统,其实以前研究操作系统时,最不感兴趣的就是文件系统的部分。以至于到后来查看SQLite的db虚拟机代码时,对其Btree和页缓冲表的实现惊叹不已。

 

手下指导了一个实习生小Z做毕业设计,题目是嵌入式文件系统,又一个文件系统,他说想参考开源的UFFS,重用的念头浮上来。

 

不过后来,重用UFFS的念头又打消了,起因是小Z有一天拿着UFFS的ECC算法让区区给他讲解。UFFS的ECC用的是一个位图定位的算法,相当有趣,由于过去没有相关经验,区区是给合的UFFS作者的PDF讲解才搞清楚的。

这件事情让在下觉得应该再认真考察一下其它文件系统,不然想实现版本和压缩支持可能会很难(后来得知不必实现这两个高级功能)。当时真的很混乱,不知道怎么入手,还好手头有一本偶然买到的《UNIX Internals》,区区擅自利用了三天时间,把书中与文件系统相关的章节细读了一遍。

 

《UNIX Internals》是95年左右写就,当时山寨王Linux还没怎么红,书中讲解的文件系统都是s5fs,FFS,SunSoft,AFZ,NFS,LFS一类的正统行货。然而细心的阅读真得非常有效,之前对FAT、Subversion文件系统设计中的各种疑惑都消失了。

 

最终一个非常简易的通态inode表设计在区区脑瓜中敲定了,虽然不是什么华丽方案^_^。

 

supernode -- inodes -- inode reserved -- blocks -- blocks extend.

基本分区与s5fs一致,同样是超级块+inode+block,差别在于区区的时间有限,所以只定了两个扩展区,能够在以后增强。

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐