主页 文档 下载 莱特 沙龙 English

RTESM文档
RTEMS精彩应用
RTEMS版权说明
其他RTOS
ARM/DSP专区
AVR/FPGA/PCB
嵌入式文件系统
ARM AVR仿真器DIY
莱特电子工作室
联系我们
 


多处理器系统管理

作者 Ray

RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray

23.1: 介绍

多处理器实时系统,对传统的实时系统提出了很多新的需求, 例如在多个处理器间共享数据和全局资源。此外,多个处理器协同的工作方式也影响了实时系统的每个方面,使系统的复杂性大为增加。

为了解决多处理器系统的问题,RTEMS提供了一系列灵活有效的机制。RTEMS目前支持的多处理器系统不但包括传统的紧耦合系统与松耦合系统,还对混合耦合系统、异构系统以及混合异构系统都提供了强有力的支持。

RTEMS的一个重要设计目标是超越目标硬件的硬件边界。该目标的实现方法是为应用软件提供了一个目标硬件系统的逻辑视图,在视图中各个处理器是透明的。因此应用软件开发者可以将包括任务、队列、事件、消息、信号量和内存块这样一些对象设计为全局对象。各个处理器节点上的任务可以访问这些全局变量。RTEMS 自动判断被存取的对象处于本地节点上还是处于其他处理器上。简单的说,RTEMS允许整个多处理器系统的软硬件在逻辑上表现为一个系统。

23.2.1 : 处理器结点

RTEMS 系统中一个处理器字系统被称为一个系统结点。每个结点将会由应用设计者分配一个唯一的结点编号。一般来说RTEMS节点的编号是从1开始的连续整数。节点编号、结点、和最大结点数目maximum_nodes都在多处理器节点配置表中定义。maximum_nodes的数值以及全局对象数目maximum_global_objects都应该根据系统需要尽可能的小。

在进行多处理器操作时,节点编号被RTEMS用来区别不同的节点。因此,多处理器通信层(MPCI)必须能以节点编号为基础进行消息路由。

23.2.2 : 全局对象

所有使用GOBAL属性创建的RTEMS对象将会在系统中所有的节点上注册。虽然使用全局节点和本地节点相比有一些限制,但是全局对象可以被所有的节点访问。而且访问全局对象的任务本身可以不用是全局的。全局对象的数目被多处理器配置表中的maximum_global_objects所限制。 任务在多个处理器上的分派在系统设计时由程序员实现。目前系统还不支持任务在多个处理器上的动态自动分配。

23.2.3 : 全局对象表

对于多处理器的RTEMS系统来说,RTEMS维护了二个存放对象信息的表格: 一个本地对象表格和一个全局对象表格。节点上的本地对象表存放了在该结点上创建的所有对象的信息(包括本地上创建的全局对象信息)。全局对象表中包含了系统中的所有全局对象信息。

系统中每个结点上都会维护一个相同的全局对象表。为了使该表能动态更新并且保持一致,每个动态对象创建和销毁的时候,都会向系统中所有节点发布信息。

23.2.4 : 远程调用

当一个应用对远程节点上的全局对象上进行操作时,RTEMS将产生一个远程请求 (RQ) 消息并且将其送到对应的结点。在完成对应的操作后,在完成对应操作后,远程节点将会构建远程响应 (RR) 消息,然后将其发送回请求节点。 对于将会产生副作用的的函数 (例如删除全局变量的任务)被称为远程进程 (RP),RP并不需要接收结点对请求作出答复。

对于远程操作,处理执行时间比本地的操作略微长一些以外,其他并没有什么大的区别。由于RTMES屏蔽了底层通信的细节,所以应用层并不知道对应的操作是否在本地节点上完成。对于远程通信的开销主要取决于通信的手段,此外和MPCI层的效率也有一些关系。

下面是远程操作的基本流程:

•  应用向远程的全局对象发出函数请求,

•  RTEMS 判断对象所在的结点。

•  RTEMS 调用用户提供的 MPCI 例程 GET_PACKET 构建RQ 消息包。

•  构建消息包后,RTEMS 调用用户提供的 MPCI 例程 SEND_PACKET 发送消息包到对象所在结点 ( 目的结点) 。

•  远程调用的发起者将会被阻塞,直到 RR 消息返回,阻塞期间,处理器将执行其他任务。

•  在目的地结点上的 MPCI 层发现消息包( 一般在ISR中) 抵达,就调用 rtems_multiprocessing_announce 函数。 该函数将多重处理服务器就绪。

•  多重处理服务器调用用户提供的 MPCI 例程 RECEIVE_PACKET,运行被请求的操作,构建一个 RR 消息, 然后将其返回给调用结点。

•  在调用结点上的 MPCI 层探测到消息包(一般是通过中断完成), 然后调用 RTEMS的rtems_multiprocessing_announce 函数。 该函数让多重处理服务器就绪。

•  多重处理服务器调用用户提供的 MPCI 例程 RECEIVE_PACKET,使被阻塞的请求任务就绪, 并且将自己阻塞,直到另外的一个消息包到达,控制转到调用者任务。

如果一个无法修正的错误在用户提供的 MPCI 层中发生,异常处理函数将被启动。一般来说RTEMS中的MPCI为消息传输和接收提供可靠保证,所以错误产生几率非常小。

23.2.5 : 代理

代理是驻留在远程节点上的 RTEMS 数据结构,RTEMS使用该结构来代表被阻塞的远程操作。远程调用使用rtems_semaphore_obtain 或者 rtems_message_queue_receive 函数而被阻塞时,RTEMS将会为被阻塞的任务创建代理。如果对象是本地对象,可以通过操纵本地任务的任务控制块来表明该任务因为信号量或者消息被阻塞。然而,对于远程任务,操作就不同了。任务控制块只驻留在在任务所在的节点上,因此,远程节点必须为在其上执行的外来任务分配数据结构来代表这个任务,这就是代理。

代理数目的最大值在多处理器配置表格中定义。系统中每个节点可以使用不同的代理数最大值。代理控制块的分布是应用相关的,随着任务分布不同而不同。

23.2.6 : 多处理器配置表

多处理器系统中,多处理器配置表包含 RTEMS 需要的系统配置信息。 该表格在后面对应的章节还有详细介绍。

 

 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有