阅读linux内核代码的一大好处

大家可能都在想现在linux内核的学习到底对自己工作能带来多少好处。如果自己不是搞linux内核相关的工作,要不要去看内核那些深奥的代码。

我的HPC组的一些经历能很好地给出一点启发吧。

(我的讲话方式比较喜欢联想一些其他的东西,貌似这些东西跟我谈的主要话题也很有关系)


做HPC项目时,富士通理研所把他们的PJSD模块整个结构设计文档发给我们,看看我们能不能提供些更好的建议,怎么让模块设计得更好。

由于之前在linux组做过内核性能测试相关工作,对linux内核源码比较熟悉。没想到这一经验还派上用场了。

linux内核设计的一大好处是将链表,红黑树,哈希表全部设计成可重用的组件,这样就很厉害了。这样就告诉你用C可以做到面向对象设计编程,可以做到函数式编程(用函数指针吧,具体我还在探索中)。

语言没差别的,差别在设计——linus 驳斥c++时这样说过。

我用C++的优良特性(比如引用,const)去更好的改善我的C设计——云风。

所以要想知道怎么进行底层系统编程,请看那些比较出名的开源软件代码。

C语言中void指针(详见博文:工业级的内存拷贝函数实现),函数指针貌似可以实现类似多态的功能。内核中的那些常用数据结构实现也完全的与数据类型无关,你可以方便的用list_head,hlist_head,rb_node嵌入到你定义的数据结构中,而且还可以用list_entry的方式直接由结构体里的成员地址得到该结构体的存储地址,这样就与C++的this指针实现方式一样了,也具有了C++的功能。

我觉得C语言是比较朴实的语言,不会制造些时尚名词,不会炒作(像政府炒作物联网,云计算为了骗点国家的钱)。C语言很朴实,简单直接。linux的不断壮大造就了C语言的肥沃开发土壤。怎么朴实了?比如为什么有面向对象概念,当初不就为了解决软件代码的可复用性,linux内核的这个设计恰恰体现了这点,简单直接地告诉你设计思想,而不是繁多复杂的概念。

不要小看C语言的指针。C的指针体现了对存储地址的抽象。老美搞软件为什么比我们强,一方面是英语的作用。英语本身就是一门抽象的语言,英语是逻辑拼接,着重描述形状结构,汉语是会意,汉字只要会了,句子结构逻辑性这方面就次要了。我就感觉自己计算机逻辑思维一强起来,英语阅读能力也提高很快。

C指针应用详见我转载的另一篇博文《linus批驳黑客们其实不知道怎么使用指针》

C语言写出的程序好处可能在更好地对把握程序的内存分配布局和进行代码优化(用oprofile工具)。

当你吝啬存储容量,并且想取得更高的性能和更好的内存分配可知性时,可以用C。(可以看看PTmalloc源代码中怎么灵活节省存储空间,自由地搭建自己的链表来储存chunk)

我闲扯了这么多,其实告诉大家阅读linux内核代码时要进行思考,以此提升自己写程序的功底。

好了,回到刚才的话题,我发现日方的结构设计文档有一些需要改善,比如我觉得像这种PJSD模块应该比较复杂庞大了。那么里面大量使用的链表,hash表都没有做到可复用性。而且链表的访问方式还不太灵活。于是我想到了linux。HPC软件和linux都是讲究性能,用C的,为什么不能用linux的改善下HPC的。

我觉得一个上规模的开源软件,里面一些基本数据结构组件应该首先设计出或者选好。那么如果有一个比较健壮的库的话,开发者就可以把注意力集中在业务逻辑实现上了。

要做到业务逻辑实现和基本开发组件实现相分离,像JAVA那样。





你可能感兴趣的:(C/C++编程经验,工作随感)