rtemsahi一个以线程为基本调度单位的实施操作系统,调度算法是基于优先级的抢占式线程调度,支持256个线程优先级,0代表最高优先级,主要用于内部线程,255是最低线程,是空闲线程的优先级,用户线程的优先级在1-254之间,支持创建同优先级的多个线程,采用时间片轮转调度,调度器寻找下一个最高优先级就绪线程的时间是恒定的,这也是实时性得到保障的一个关键机制。为了保障硬实时的特性,选择了静态调度算法-速率单调调度(rate monitonic scheduling 简称RMS)是为周期性任务解决多任务调度的一种很好的方法。
rtems并没有从底层独立实现这三种API(POSIX、CLASSIC、ITRON),实际上都是在rtems的核心层上的thread handler组件进行封装的。rtems中的threadxxx文件包含的thread_xxx函数就是线程管理的super core层,也就是核心层thread handler的主要实现。
核心层的thread handler组件
提供了thread_control结构体和以此配套的一组基本的线程管理数据和管理函数,涉及线程初始化、线程启动、线程暂停、线程恢复执行、线程切换等,不同的高层api接口实现只是对这些结构和函数的封装,这样线程管理就可以分为两层,对rtems支持不同API接口扩展会很方便。
线程控制块:
thread control block 简称TCB,是thread control handler组件对线程的静态基本情况和动态运行变化过程的描述,包含了与管理线程运行所需要的所有信息集合,是线程存在的唯一标识,因为线程的创建主要体现在为该线程生成一个TCB,终止主要体现在回收其TCB。管理也是。
应用层任务可以通过系统核心层提供的系统调用接口来改变TCB内部的成员变量,同时需要注意的是TCB是rtems中唯一的能经由用户扩展例程被应用访问的rtems内部的数据结构。
线程调度机制:
每个线程运行时间很短,基本上都是采用可抢占的调度方式,为了更加灵活,提供四种机制让用户对线程调度进行干预:
1.用户指定线程优先级。
2.线程抢占控制
3.线程时间片控制
4.主动放弃处理器:可使用rtems_task_wake_after函数主动放弃对处理器的占用。