首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年4月26日星期五
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期
QNX工具在多核开发中的重要性

The Importance of Tools in Multi-Core Development

新加坡动力科技高级技术经理 Jason Lee



当前的嵌入式环境下,多核是显著的发展趋势之一,英特尔、飞思卡尔及瑞萨等公司均先后推出满足该趋势的多核产品。

QNX作为软件供应商,在多核环境下关注的核心在于:现在的应用能否在多核环境下运行,同时,当应用从单核移植到多核时,除可以运行外,还应保证实时性,并令性能有所提高,这样移植才有意义。

那么如何利用操作系统和开发环境完成现有应用的移植?通常会碰到的问题之一即线程之间的同步。当前,很多嵌入式应用中,常把线程A得到的结果传给B,然后线程B将继续进行,这在单CPU环境下不存在问题,但如果移植到多核环境下,线程A和B同时运行,则会导致问题出现。其他问题还包括,如,可重用性及线程的安全性问题等。
因此从单CPU移植到多核环境时,应考虑涉及的应用、库、中间件、实时操作系统(RTOS)及调试、优化工具等是否支持多核环境。


多核RTOS(实时操作系统)

多核RTOS包括3种不同的运行模式:首先是AMP(非对称的多重处理模式),如图1所示,系统内有2个不同的核,每个核对应不同的操作系统,这样的模式在运行多重处理时,设计阶段必须决定哪些应用应在第一个核上运行,哪些应在第二个核上运行,而这些均属于静态配置。在系统设计好并出售给客户后,若客户需要增加内核数量时,必须将系统返回,重新设计才能完成升级、满足客户需求。这即是AMP存在的主要问题。

图1 AMP——非对称的多重处理模式(略)

其次是,SMP(对称式多重处理模式),如图2所示,该模式下只有1个操作系统,它在两个不同的核上运行。这极大地简化了设计,只需应用是多线程的,从而由操作系统根据应用分配内核资源,当CPU空闲时,操作系统即把线程调配到该CPU上运行。该模式的问题可能在于,如果程序本身忽略了并发性问题,则多核系统可能将无法正确运行。

图2 SMP——对称式多重处理模式(略)

第三,BMP(限定性多重处理模式),该模式是QNX针对AMP及SMP的现有问题而提倡的新概念,限定性多重处理环境下,仍只有一个操作系统,因为看起来类似于SMP,不过除此之外,BMP还可绑定应用究竟在哪个CPU上运行,如图3所示,可将A1、A2绑定给第1个核,A4、A5绑定给第2个核,而A3不进行绑定,可以自由运行。这样的模式融合了AMP和SMP的优点。

图3 BMP——限定性多重处理模式(略)

图4 系统追踪示意(略)


多核开发工具

当应用从单核移植到多核环境时,首先应确定应用是必须在一个核上运行还是可以在多核环境下运行,此时开发工具即可帮助用户了解,该应用可否在多个自由的核上浮动还是需要绑定。此外,开发工具应支持多核环境的调试。

QNX的开发工具提供了优化选项即系统追踪工具,可以令用户在开发环境下检测瓶颈、进程间的通讯及不同核间的通讯等。实现该功能,是因为QNX的内核中添加了事件的收集,可收集库中的线程、线程的创建、系统的调用及中断等信息,并最终通过开发工具为用户显示出相关信息。

QNX的开发工具提供了应用分析器,它可以获知哪个函数运行耗费最多的时间,由此决定该函数应分为不同的线程还是应由单一线程运行。

函数旨在将数组填满,如图5所示。当数组较大时,耗费时间则相应较长,对于多核环境,可以进行如下优化:如果将该函数移植到多核(4核)CPU上,则可以选择以4个不同的线程同时填充数组。各线程同步填充,为了防止并发性问题,此处需引入同步机制,如:明确有可能相互冲突的线程,令不相冲突的线程同步运行,并根据时序顺序依次运行相互冲突的进程,从而避免问题的发生。

QNX内核的软处理器亲和性,进一步优化了性能。其原理即当线程在某CPU上运行后,内核尽量让该线程在同一CPU上运行,当线程需和另外的线程进行通讯时,内核也会尽量让另外的线程在同一CPU上运行,其主要目的是尽量避免线程移植,因为移植时会浪费缓存的资源。这也就是QNX开发工具基于BMP模式的线程绑定功能。

图5 函数及数组(略)

综上所述,QNX操作系统支持三种不同的多重处理模式,支持单核到多核环境的移植,而开发工具则能令用户观测移植的状 态,查看移植中的同步问题,线程在不同 核 上的迁移问题、线程间的通讯情况等。优良的嵌入式操作系统及开发工 具必将为多核环境 提 供越来越完 善的支持。

《世界电子元器件》2007.11
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com