也许开发一个能够运行的fileSystem及驱动程序并不难,只是对着已有框架往里面添东西就行,可做一个较完善的、Crash概率小的却不简单,下面就自己在Mac上fs开发的一些经验总结一下,算是疑难点集录,应该也是一些大家容易犯的错误。
一,数据的同步。一说到同步大家都知道Lock,可Lock的追加却是有讲究的,并且在后续维护中的成本是很大的,我在开发中就碰到过缺少Lock,导致Save异常,准确定位次问题,花费我月余。当然可能是我经验少,工具使用不熟吧。当然估计牛人也不来看我这博客,呵呵。
一般来说,Lock的追加需要注意一下原则:
1.只针对共享数据,不针对代码;
2.注意顺序,防止死锁。比如同时有两层锁,先加的一定要先解。
3.细心,保证匹配,不能有遗漏。
稍微说点三种Lock的区别:
信号量:允许使用它的代码休眠,持有锁的时间可相对较长。
互斥体:信号量的特殊形式。只有0、1两种状态
自旋锁::低开销,但持有锁的时间应尽量短,不允许使用它的代码休眠
二,跨平台相关
1。字符集的问题。
别的平台上的驱动我接触不多,但在Mac上,要保证Mac上命名的Dir在windows,Linux等上正常,一定得注意UTF8在这几种平台的差异:Mac上是NFD模式,而其他上面是NFC模式。
所以为保证硬件的通用性,一定需要加以转化。
三,堆栈越界
一般来说,文件系统中会处理大量的字符串,而字符数组是不二的选择,可这往往暗含着风险,因为数组是有边界的,一定得考虑周到可能出现的各种导致越界的情况。
四,引用计数的正确使用。
vnode_get和vnode_put使用一定得匹配。一般来说,put函数可以不显式调用,让vfs来处理,而get在很多时候是需要自己调用。