VxWorksSMP多核编程指南

上传人:m**** 文档编号:564430771 上传时间:2023-11-17 格式:DOCX 页数:48 大小:482.10KB
返回 下载 相关 举报
VxWorksSMP多核编程指南_第1页
第1页 / 共48页
VxWorksSMP多核编程指南_第2页
第2页 / 共48页
VxWorksSMP多核编程指南_第3页
第3页 / 共48页
VxWorksSMP多核编程指南_第4页
第4页 / 共48页
VxWorksSMP多核编程指南_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《VxWorksSMP多核编程指南》由会员分享,可在线阅读,更多相关《VxWorksSMP多核编程指南(48页珍藏版)》请在金锄头文库上搜索。

1、VxWorksSMP多核编程指南本文摘自vxworks_kernel_programmers_guide_6.8第24草1 .介绍VxWorksSMP是风河公司为VxWorks设计的symmetricmultiprocessing(SMP)系统。它与风河公司的uniporcessor(UP)系统一样,具备实时操作系统的特性。本章节介绍了风河VxWorksSMP系统的特点。介绍了VxWorksSMP的配置过程、它与UP编程的区别,还有就是如何将UP代码移植为SMP代码。2 .关于VxWorksSMP多核系统指的是一个系统中包含两个或两个以上的处理单元。SMP是多核技巧中的一个,它的主要特点是一个

2、OS运行在多个处理单元上,并且内存是共享的。另一种多核技巧是asymmetricmultiprocessing(AMP)系统,即多个处理单元上运行多个OS。(1)技术特点关于CPU与处理器的概念在很多计算机相关书籍里有所介绍。但是,在此我们仍要对这二者在SMP系统中的区别进行详细说明。CPU:一个CPU通常使用CPUID、物理CPU索引、逻辑CPU索引进行标示。一个CPUID通常由系统固件和硬件决定。物理CPU索引从0开始,系统从CPU0开始启动,随着CPU个数的增加,物理CPU索引也会增加。逻辑CPU索引指的是OS实例。例如,UP系统中逻辑CPU的索引永远是0;对于一个4个CPU的SMP系统

3、而言,它的CPU逻辑索引永远是0到3,无论硬件系统中CPU的个数。处理器(processor):是一个包含一个CPU或多个CPU的硅晶体单元。多处理器(multiprocessor):在一个独立的硬件环境中包含两个以上的处理器。单核处理器(uniprocessor):一个包含了一个CPU的硅晶体单元。例如:adual-coreMPC8641D指的是一个处理器上有两个CPU;aquad-coreBroadcom1480指的是一个处理器上有四个CPU。在SMP系统上运行UP代码总会遇到问题,即使将UP代码进行了更新,也很难保证代码很好的利用了SMP系统的特性。对于在SMP上运行的代码,我们分为两个

4、级别:SMP-ready:虽然可以正常的运行在SMP系统上,但是并没有很充分的利用SMP系统的特点,即没有利用到多核处理器的优势;SMP-optimized:不仅可以正常的运行在SMP系统上,而且还能很好的利用SMP系统的特点,使用多个CPU使多个任务可以同时执行,提高系统的效率,比UP系统的效果更加明显。(2)VxWorks SMP OS 特点VxWorks单核编程(UP)与SMP编程在多数情况下是一样的。类似的,多API在数UP和SMP编程中是通用的。一些少数UP编程中的API不能在SMP中使用。与此同时,SMP中的一些API在UP中使用时表现的不是SMP中的效果,而是默认UP的效果,或者

5、压根就不能使用(例如,taskspinlock默认表现为tasklock)o本小节将简短介绍一下VxWorks的对称多处理器的一些特点:多任务:对于传统的UP系统而言,处理多任务的方法是通过任务优先级对CPU资源进行抢占式处理的。而SMP系统则改变了这种方法,它是实实在在的任务、中断的同时执行。实现同时执行的关键是多个任务可以在不同的CPU上执行,当然这需要OS的协调控制。对于UP系统中多任务所谓的同时执行,其实只不过是CPU的快速切换,占有CPU的任务由一个快速切换到另一个。在SMP系统中,同时执行不是幻想而是实实在在存在的。任务调度机制:VxWorksSMP系统中的任务调度机制与UP中的类

6、似,都是基于优先级的。不同的是,当不同的任务运行在不同的CPU上时,可以实现两个任务的同时执行。互斥:由于SMP系统允许任务同时运行的情况存在,因此,在UP系统中通过关中断、锁任务调度等这些保护临界资源的手段在SMP系统中将不再适用。这种在所有CPU上通过强行关闭中断、锁任务调度的方法会影响到SMP系统发挥它的特点,将SMP系统带回到UP系统的模式。VxWorksSMP提供一套特殊的任务间、中断间同步/互斥的方法即UP中的taskLock()和intLock()等将会被VxWorksSMP提供的spinlock,原子操作以及CPU-specific等机制替代。CPU-Affinity:默认情况

7、下,任意任务可以运行在任意CPU上。VxWorksSMP提供了一种叫做CPU-Affinity的机制,即可以分配任务到指定CPU(CPU逻辑索引)上执行。(3) VxWorksSMP硬件特点VxWorksSMP系统要求硬件必须具备对称多处理器。这些处理器必须是一样的,处理器可以共享内存、可以平等的访问所有设备。VxWorksSMP必须遵循uniformmemoryaccess(UMA)结构。图1显示了一个双CPU的SMP系统图1SMP硬件结构无论SMP系统中CPU的个数是多少,它们的重要特点是一样的:内存对所有CPU可见,不存在“只属于某个CPU的内存”的情况。即任意CPU可以在任意内存中执行

8、代码;每个CPU都有MemoryManagementUnit(MMU)。MMU可以使任务在不同的虚拟内存a中同时运行。例如,RTP1的一个任务可以在CPU0上运行,与此同时,RTP2的一个任务可以在CPU1上运行;.每个CPU可以访问所有设备。设备产生的中断可以通过可编程中断控制器发送到任意CPU上执行;通过多CPU,任务和ISR可以实现同步;通过spinlock,任务和ISR可以实现互,斥;d.e.Snoopbus的作用是使CPU之间的datacache总是保持前后一致性。(4) VxWorksSMP与AMP的对比关于SMP与AMP系统中对内存访问的对比如图2所示:图2SMP系统对内存的占用

9、情况在SMP系统中,所有物理内存被所有CPU共享。内存空间可以用来保存VxWorksSMP镜像、Real-TimeProcess(RTP)等。所有CPU可以读、写、运行所有内存。内核任务、用户任务可以在任意CPU中执行。在SMP系统中,所有内存、设备被所有CPU共享,CPU之间的主要通讯是如何防止“同时访问共享资源”的情况发生。图3AMP系统对内存的占用情况在AMP系统中,每个CPU对应一个VxWorks镜像的拷贝,它们只能被对应的CPU访问。因此,CPU1中执行的内核任务不可能在CPU0的内存中执行,反之亦然。对于RTP也是一样的。在AMP系统中,一些内存是共享的,但是在这些共享内存中读写数

10、据是严格受到控制的。例如,在两个VxWorks镜像中传递数据等。硬件资源根据OS被划分,因此CPU之间的通信只有在访问共享内存时才会发生。3. VxWorksSMP配置说明Spinlock的调式版本组件INCLUDE_SPINLOCK_DEBUG提供了spinlock的版本,这对调试SMPAPP有帮助。在包含INCLUDE_SPINLOCK_DEBUG的同时,最好要加入INCLUDE_EDR_ERRLOG组件,它可以记录spinlock的错误信息。CPU配置参数组件INCLUDE_KERNEL组件中包含了一些对VxWorksSMP参数的配置,包括:VX_SMP_NUM_CPUS代表VxWork

11、sSMP的使能CPU个数。所有体系结构的最大使能CPU个数如下:ARM=4,IA32=8,MlPS=32,PowerPC=8,VxWorksSimulator=32。ENABLE_ALL_CPUS默认是TRUE,代表所有已配置的CPU使能。这个参数也可以设置为FALSE,一般出于调试目的,此时只有逻辑CPU0是使能的,只有通过kernelCpuEnable0才可以使能指定的CPU。VX_ENABLE_CPU_TIME0UT代表CPU使能超时时长,当ENABLE_ALL_CPUS是TRUE时,该值表示所有CPU的使能时长,当ENABLE_ALL_CPUS是FALSE时,在kernelCpuEna

12、ble()被调用时,它用来表示CPU的启动时长。VX_SMP_CPU_EXPLICIT_RESERVE表示将指定CPU排除在“可使用CPU-Affinity属性的CPU池”之外。它是一个字符串,若填写“23r,则代表CPU2,3,7不能使用CPU-Affinity属性。即不能通过taskCpuAffinitySet()分配任务到这些CPU上运行。当某个CPU被VX_SMP_CPU_EXPLICIT_RESERVE包含,唯一能够使他们恢复预留属性的方法是调用vxCpuReserve()。4.在多核AMP系统上配置VxWorks SMP5. 启动VxWorksSMP在WorkBench开启后会有默

13、认的SMP的simulator,如图4所示:+ Localvas 1 inu 1 it rnu m ver ,赤,2K v, v vxsiml_smp Wind River VxWorks 6. 8) w-d vxsim_ConfigIPlindRivetVxWorks6;::)vxsim_IPv6OTindRiverVxWorks6.8)但,vxsim_VOSC/iindEi-zrVx,rorks.6L)Ll图4WR自带的SMP虚拟机点击连接后启动,启动过程如图5所示,代表目前已经进入VxWorksSMP系统以及当前CPU的个数。图5SMP虚拟机启动过程启动后在SHELL中输入i可以查看系统

14、目前运行的任务,你会发现两推任务,它们分别运行在两个不同的PUo如图6所示。图6SMP系统任务运行情况6. VxWorksSMP编程VxWorks单核编程(UP)与SMP编程在多数情况下是一样的。类似的,多数API在UP和SMP编程中是通用的。一些少数UP编程中的API不能在SMP中使用。与此同时,SMP中的一些API在UP中使用时表现的不是SMP中的效果,而是默认UP的效果,或者压根就不能使用(例如,taskspinlock默认表现为tasklock)。由于SMP系统的特殊性,因此SMP编程需要特别注意,尤其是在互斥/同步机制上,在使用的时候需要充分考虑如何提高系统的性能。在VxWorksS

15、MP系统中针对每个CPU都有一个idle任务,这在UP中是没有的。Idle任务是最低优先级(用户级任务是不能达到这么低优先级的)。当CPU进出idle状态时,idle任务会提供任务上下文,这可以用来监视CPU的利用率情况。当CPU无事可做时,Idle任务的存在不会影响CPU进入睡眠状态(当电源管理开启时)o可以使用kernelIsCpuldleO或者kerneIIsSystemIdIe()这两个API查看一个指定CPU是否执行了idle任务或者所有CPU是否执行了idle任务。【注意】不要对idle任务进行挂起、关闭、跟踪、改变优先级等一系列操作。SMP的互斥/同步机制SMP编程与UP编程最大的一个不同就是互斥/同步API的使用。有一些API在这两种编程中都可以使用,而有一些则不同。此外,UP编程中的一些隐式同步技巧(例如使用任务优先级替代显示同步锁等)在SMP中是不能用的。与UP系统不同,SMP系统允许真正意义上的同时执行。即多个任务或多个中断可以同时执行。在绝大多数情况下,UP系统中与SMP系统中的互斥/同步机制(例如,信号量、消息队列等)是一样的。但是,UP中的一些机制(例如,关中断、挂起任务抢占机制以此来保护临界资源等)在SMP中是不适用的。这是因为这些机制阻碍了同时执行的理念,降低了CPU的利用率,是的SMP系统向UP系统的回溯。SMP编程与UP编程的一点不同是关于

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号