文件系统及驱动开发中容易出现的问题(以Mac为例)

也许开发一个能够运行的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在很多时候是需要自己调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值