本项目在基于RTEMS实时操作系统,将SElinux的强制访问机制移植到实时操作系统中,实现一个嵌入式强制访问控制实时操作系统。
RTEMS, 即: 实时多处理器系统(Real Time Executive for Multiprocessor Systems),是一个开源的无版税实时嵌入操作系统RTOS。 它最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military Systems),现在由OAR公司负责版本的升级与维护。无论是航空航天、军工,还是民用领域RTEMS都有着极为广泛的应用。
一、RTEMS介绍
RTEMS,即多进程实时操作系统(Real Time Executive for Multiprocessor Systems),是一个开源的无版税实时嵌入操作系统RTOS。 它最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military Systems),现在由OAR公司负责版本的升级与维护。无论是航空航天、军工,还是民用领域RTEMS都有着极为广泛的应用:
1).通信:Tech S.A.T GmbH AFDX,FMVS FDDI-II Voice-Data Backbone
2).医疗:Frye Electronics Fonix7000 hearing aid test system,AMV Technics TECHNIC I, syringe pump for high-precision pharmaceutical dispensing
3).航空航天:Venus Express: VMC (RTEMS, LEON),Flight Data Recorder FDR
4).科学:EPICS - Many research laboratories use EPICS in conjunction with RTEMS.
5).军事:Avenger Forward Air Defense System
6).工业:Microsol XCell Remote Terminal Unit (RTU) Main Processor Module,GC2000 Power Generator Controller
7).其他:HybridZ Self-Guided Commercial Lawn Mower
常见的实时OS系统的比较:
图1-1.实时OS的比较
图1-2.实时OS的比较
对象
RTEMS 提供的命令可以允许用户动态的创建,删除,和产生一些预先定义的对象类型。这些类型包括:任务,信息队列,信号量,内存区域,内存分块,时钟,端口和速率单调周期等。面向对象的本意是 RTEMS 鼓励用户创建的模块是可以重用的。每一个对象, 都有一个名字和 ID,名字是用户任意取的, 通常是能标是这个对象意义的符号。ID 是 RTEMS 给分配的,在执行中使用。对象名和 ID 都是 32 位无符号数。有三部分组成:
class: node :index
其中,高 6 位为 Class 项,表示该对象的类型,例如是一个任务或者是消息。中间 10 位为Node 项, 指的是该对象所在节点的号,即所在处理器的节点。低 16 位为 Index 项,代表这个对象在他所在的对象类中的索引。这三部分组合起来,使得在一个复杂的多处理器的系统中也可以很快的找到指定的对象。可以通过特殊的服务,得到每一小部分的值:
rtems_unsigned32 rtems_get_class( rtems_id );
rtems_unsigned32 rtems_get_node( rtems_id );
rtems_unsigned32 rtems_get_index( rtems_id );
而且可以通过 object identification derectives 对给定的一个名字,动态的得到他的 ID.
RTEMS 通过这种方式,即使是最复杂的应用中也可以轻易的定位一个对象。
通信和同步
对一个实时的应用应该具有以下能力:
Data transfer between cooperating tasks 合作任务之间的数据传送
Data transfer between tasks and ISRs 任务和中断服务之间的数据传送
Synchronization of cooperating tasks 合作任务之间的同步
Synchronization of tasks and ISRs 任务和中断之间的同步
有几种 RTEMS 的管理机制可以提供通信和同步。但是不同的机制,可以提供的通信和同步的灵活性级别不同,可以根据用户和应用的需要,选择适当的机制。这几种机制包括:
Semaphore 信号量支持对共享资源的互斥和同步存取。二元信号量可以使用优先级继承法来避免优先级的倒转的问题。
Message Queue 信息队列管理既支持通信又支持同步。
Event 事件机制主要的提供很好的同步机制。
Signal 信号管理支持异步通信,通常在意外处理中使用。
二、RTEMS内核模块管理及系统调用
RTEMS 的一个重要的设计特征就是在一个实时应用的两层中间提供一个桥。RTEMS 就象一个在应用代码和目标硬件中的缓冲区。RTEMS 的I/O 接口管理提供一个有效的工具将这些硬件依赖融合在一个系统中,同时为用户的应用提供一种通用的机制。一个设计良好的的实时系统可以从这体系结构中获得好处,通过建立丰富的标准应用库来可以重复使用在不同的实时应用中。
RTEMS系统的体系结构:
图2.RTEMS体系结构
RTEMS内核模块一共包括了17个模块,分别是:初始化、多任务管理、中断管理、系统时钟、定时器Timer、信号量(semaphore)、消息通信、事件管理、信号量管理、分区管理(固定大小内存管理)、区域管理(变长内存区管理)、双口/多口内存、IO管理、错误与异常管理、单调周期管理、用户扩展和多处理器管理。其中,初始化和任务模块是必须的,其他模块可以根据用户的需要自行剪裁。内核模块详见图3。
图3.RTEMS内核模块图