RTEMS:驱动与多处理器系统
22.3: 设备驱动
%A
%A 设备驱动为输入/输出管理器提供了访问特定的外围设备并且进行管理控制的接口(对于不包含RTEMS API的应用,则可以通过驱动直接访问驱动接口)。RTEMS的输入/输出管理器又为应用程序访问驱动程序提供了统一的逻辑接口。板支持包一般包含了访问目标硬件的驱动程序,常见的驱动包括串口驱动与并口驱动、实时时钟、定时器(看门狗)、IDE接口、网口等。
%A 22.3.1 : 时钟滴哒(tick)设备驱动
%A
%A 对于实时的应用,时钟驱动无疑是非常重要的。大多数的 RTEMS 应用都会包括时钟驱动,该驱动会周期型的调用rtems_clock_tick 函数。由于如果系统使用了时间片复用、定时器、日期管理、单调周期管理以及超时管理这些功能,就必须包含时钟驱动。
%A
%A 系统时钟tick通常使用计时器或者实时时钟RTC提供的中断来实现。当使用硬件定时器来提供tick,那么定时器的工作模式通常在驱动中设置为连续操作模式。该模式下,驱动将定期初始化计数器,然后自动进行倒计时。这样不但能减少处理器处理ISR的开销,还能提高时钟的精度。计数器的初始值通常是基于 RTEMS配置表中的microseconds_per_tick 字段为基础。此外,也可以将计数器初始化为一个固定的时间值(例如一微秒),然后让ISR在microseconds_per_tick 到达时调用 rtems_clock_tick。不过这种方式的缺陷是如果时钟中断周期不是microseconds_per_tick的整数倍,就会产生误差。
%A
%A 需要说明,RTEMS中时钟tick精度直接影响RTEMS中各种和时间相关操作的精度。但是同时,如果时钟的精度太高,系统执行时钟ISR的时间会比较多,系统开销也会增加。
%A 22.4 用户扩展
%A
%A 用户扩展多用来对系统进行监控,此外也可以处理其他系统事件。例如线程切换时,用户扩展可以为非标准数字协处理器提供上下文切换服务。此时,任务的建立和删除扩展被用来分配与删除任务上下文,任务初始化扩展用来初始化上下文区域,任务切换扩展用来处理任务切换。
%A 22.5: 多处理器通信接口 (MPCI)
%A
%A 对于多处理器系统,RTEMS使用MPCI提供多处理器通信接口。MPCI层必须为多个处理器节点提供可靠有效的的通信机制。在不同的结点上的运行的任务通过MPCI实现同步。在不同的硬件平台上,必须对MPCI进行剪裁以适应平台需求。
%A 22.5.1 : 紧耦合系统
%A
%A 在紧耦合系统中,各个处理器只能使用共享内存进行通信。在这种系统中,MPCI只用将通信报文放在共享内存中就可以实现处理期间的通信了。在这种系统中需要考虑的两个主要问题是如何保证数据的一致性以及如何通知其它节点数据报文已经发送。
%A
%A 数据一致性问题可使用 “ 测试和置位 ” 原子操作给共享内存 “ 加锁 ” 。但是此时需要注意任何一个处理器都不应该长时间的给共享内存加锁。
%A
%A 通知对应的节点数据报文到达可以使用下面的技术。第一种是处理器间的中断机制,数据报文传输后,向对应的处理器发送中断,当然,这种机制需要处理器的硬件支持。另一种方式是让节点对内存区进行轮询,不过这种方式会造成不必要的处理器开销。
%A 22.5.2 : 松耦合系统
%A
%A 松耦合系统中,各个处理器可以使用除共享存储区以外的手段进行通信。MPCI在处理器间的通信链路中发送消息报文。处理器间的通信手段不同,对MPCI的要求也不一样。例如通信的带宽将会限制最大的通信流量。
%A
%A 使用共享通信链路时,链路的特性也会对MPCI造成影响。例如以太网就支持点到点通信和广播服务,这些服务可以被MPCI有效利用。
%A 22.5.3 : 混合的耦合系统
%A
%A 混合耦合系统中,处理器节点可以同时使用共享内存和通信链接进行通信。混合耦合系统中,一个结点可能不能同时使用上面的两种手段通信。因此在混合耦合系统中,需要对消息包进行路由。系统消息包路由可以有多种算法,路由算法需要保证数据报在节点间可靠的传输,同时也需要为数据包提供多种路由路径,这样,如果某些结点负载过重,可以使用其他路径传输。
%A 22.5.4 : 异构系统
%A
%A 异构系统指的是系统中处理器的类型不同(例如ARM+DSP,PowerPC+ARM)等。RTEMS中为异构系统间通信做了很多工作,程序员的工作量大为减少。但是需要说明的是,RTMES中的异构系统通常是两个32位(或准32位)系统。
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。