原创
大型软件开发一定要做好设计
2008-5-8 15:07
3654
6
6
分类:
软件与OS
最近一个月一直在忙活一个Linux内核软件的稳定、BUG的修改。这个项目的确做的很辛苦,改别人的东西还不如自己开发,这种体会是在是太深了。
从事Linux内核软件的开发已经接近两年了,从对Linux一无所知到内核机制的整体把握,其中经历了很多的故事,完成了3个大中型软件的项目。这一段时间我一直在考虑,如何更加高效的去设计内核程序?如何更加高效地去测试内核程序?总的来说,我认为内核程序的开发,设计阶段实在是太重要了!设计阶段一定要考虑清楚模块的划分(任务的划分),上下文一定要搞清楚,要十分明确那个任务在那个上下文中运行,哪些资源在哪些上下文中用到,只有搞清楚了这些,我们才能很好的设计数据结构,很好的设计锁的机制。如果在设计的前期这些东西不是很明确,那么开发出来的东西不是效率不高,就是漏洞百出。最后导致东补西堵,整个实现乱成一团,实在是太煞风景了。
我是搞硬件出身的,并且现在也一直在搞硬件设计。软件的设计和硬件的设计在某种程度上是一致的。现代软件设计都是多线程设计,并且往往架构在多核平台之上,能够真正实现线程的并发运行(多个硬件线程,本质上是多个异步时钟域),所以软件的设计就必须划分好线程,划分线程的方法很多,简单的方法是任务划分,当然也可以采用数据域的划分方式。不管采用哪种划分方法,我认为线程与线程之间尽量保持弱耦合关系,尽大可能地让线程并行起来,线程之间共享临界区的数据。这样的一个模型和硬件设计是一致的,多个时钟域通过总线共享数据。在这样的一个模型中,最重要的任务是划分时钟域,设计好总线,即设计好仲裁机制,让每个时钟域能够一致的访问数据。
我现在手头这个Linux driver,就是“仲裁机制”没有设计好,在设计之初没有考虑好,经过长时间的补丁,最后就干脆加了若干把大锁,将多个时钟域串行起来,如果不考虑driver底层某些瓶颈的话,这样的机制实在是太滥了,如果底层瓶颈不存在,无论增加多少个CPU,这个driver的性能将无法得以提升。咳,真有冲动,重新将这个东西设计一把。
以后希望和大家一起共同探讨如何高效设计并发软件以及如何高效测试并发软件的话题。yea...再接再厉!!
文章评论(0条评论)
登录后参与讨论