首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年4月20日星期六
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
设计和优化多核处理器软件

新加坡动力科技公司 Daniel Ang & Jason Lee


随着多核芯片的应用越来越多,设计软件的思路也开始转变。因为在多核的环境下,应用模式已经转变为并行,采用传统的设计观点肯定会出现问题。按照传统的顺序控制、循环控制模式也无法发挥多核芯片的性能。在设计的过程中,如何共享资源和解决冲突的问题是必须考虑的。另外,如何找到一个可靠的基础进行软件移植,使原来开发的代码还可以继续使用。

QNX在多核领域做的很完善。QNX在1997年率先将SMP引入嵌入式行业,1984年QNX就开始支持透明式的分布式处理。另外,QNX能够支持多核环境开发工具。

操作系统主要分为三种内核结构。实时执行(Realtime Executive)操作系统(如VxWorks 5.x)没有完整的MMU和完整的内存保护,程序运行在一个内核的空间里,如果任何一个程序出现问题,就会导致操作系统出现死机。另外一种是整体内核 (Monolithic kernel)操作系统,包括NT/ Unix等,提供了部分的内存保护,自己设计的程序放在用户的空间,内核和驱动程序放在另一个空间。如果内核出现问题,并不会导致驱动程序出现问题;但是当驱动程序出现问题时,内核会受到影响。

而QNX是微内核(Microkernel)结构的操作系统,QNX的内存管理被封装在一起,任何其他组件出现问题不会对其造成影响。QNX内核是完全独立的,其他应用程序完全放在自己的内存空间里面,它们相互之间不会受到干扰。而且文件或系统应用可以随时启动停止,不需要重启系统,完全可在运行的时候进行。

在多核环境下进行开发,主要是非对称多重处理和对称多重处理。非对称多重处理是两个CPU可以同时运行不同的操作系统。这就要求设计的时候各种资源都要分配好,否则每个操作系统都只能看到部分资源,导致升级很困难。在1984年,QNX已经有了透明的分布式处理,CPU能够完全共享资源。这样就可以充分利用硬件资源。各核之间的通信是通过扩展总线进行的。其好处是两个核上面的资源不需要修改代码。

而对称多重处理是在两个CPU上跑一个操作系统,由操作系统完成里面的分配工作。操作系统可以看到现有资源,CPU负载的平衡由操作系统动态的进行。它的缺点是,在对CPU和内存进行指定分配时,如果设置的不好,就会出现问题。一般情况下,都需要修改原来的软件。

QNX是一个多核标准的系统,可以把进程划分成一个个独立的线程,线程都会共享进程的资源。线程完全是由操作系统配置的,这样可以充分利用CPU。在非对称模式下,如果增加一个线程,就要处理线程和进程之间的共享,导致工作量非常大。而在对称模式下,这个工作很简单,不需要做任何的工作,系统可以自动的分配。
Q NX还提供了一套多核环境下的开发工具,里面包括了代码编译器、调试器和系统分析、应用分析、内存分析等工具。

在设计单核应用和多核应用时,最主要的不同点就是在多核的应用下要考虑到并发。中断来了要判断是哪个CPU响应。通常的做法是,把一个外围的事件分布到一个线程上去,把不同的操作分布到不同的CPU。单核的环境下喜欢用先进先出,但多核的情况下必须考虑到并发的情况,必须设定优先级。QNX的线程优先级可以动态分配,可以提到20-25。在移植到多核的情况下,如果选择AMP,就要作分区。可以用CPU的负载作分区,或者以数据的共享需求作分区。在对称多重处理的环境下,考虑的问题是线程的进度,同一个线程在不同的CPU上运行,就会有干扰问题。当然,也可以把一个线程只设置到一个CPU上。
《世界电子元器件》2006.11
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com