ThreadX已被微软收购,改名为azure-rtos,但这里仍用原名。
源代码下载地址:https://github.com/azure-rtos
ThreadX 在大多数流行的处理器上实现了亚微秒的上下文切换时间。除了速度快之外,ThreadX 还具有高度确定性。无论准备好 200 个线程还是仅准备一个线程,它都能实现相同的快速性能。
以下是 ThreadX 的一些典型性能特征:
快速启动:ThreadX 的启动时间少于 120 个周期。
可选的错误检查机制:当验证了应用程序代码并且不再需要对每个参数进行错误检查时,可以在编译时跳过 ThreadX 错误检查,优化性能。
Picokernel™ Design(微内核设计):服务不会彼此套用,从而消除了不必要的函数调用开销。
优化的中断处理:除非需要抢占,否则仅在 ISR 进入/退出时才保存/恢复暂存寄存器。
优化的 API 处理:
服务 | 执行时间,单位微妙 |
---|---|
Thread Suspend | 0.6 |
Thread Resume | 0.6 |
Queue Send | 0.3 |
Queue Receive | 0.3 |
Get Semaphore | 0.2 |
Put Semaphore | 0.2 |
Context Switch | 0.4 |
Interrupt Response | 0.0-0.6 |
测试平台:200MHz 处理器。
ThreadX 有自己完善的中间件,称为 ThreadX 全家桶:
中间件下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=103554&extra=page%3D1%26filter%3Dtypeid%26typeid%3D304
ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。
这么多安全认证,公司要入大量财力,人力和物力才可以完成。早前 Micrium 的一篇文章还谈过这个问题,投入了太多资金和人力了,还与风河的 VxWorks 做了简单对比。
ThreadX 的安全认证基本都达到了最高等级,像工业级认证 IEC-61508 达到了最高等级的 SIL4,而uCOS,RTX5,embOS 都是 SIL3。
除了 ThreadX 内核有安全认证,中间件 GUIX,FileX,NetX,甚至是加密库都有安全认证。在安全领域,ThreadX 基本已经做到了登峰造极。
ThreadX的源码两个最主要的部分:common
和port
两个文件夹。
虽然微软提供了ARM诸多芯片的接口,但目前被大部分人成功使用的只有M系列的部分芯片。
除此之外,ThreadX还能在WIN和Linux下运行。
port是对于不同芯片的接口,对ARM的基本都是汇编写的,包括线程调度、上下文保存和恢复、中断控制和定时器等。
这些接口都是直接对芯片进行操作,对于关注操作系统本身的开发者其实不需要太多关注。
common包含了系统初始化函数和所有的API函数,用C语言编写。
系统初始化函数最终还是会进入port提供的接口中。
而API函数包含以下九大类:
对于API的名字上,用户见到是的没有前缀的正常名字,如 tx_[module]_[func]
, 而其实它是经过宏定义的,可能是原型是 _tx_[module]_[func]
或者_txe_[module]_[func]
。
若是_txe_[module]_[func]
,那么它会先进行一些异常状态的判定,若有异常直接返回,若无异常则调用 _tx_[module]_[func]
。
ThreadX 通常以非对称多处理(Asymmetric Multiprocessing, AMP)方式使用,其中 ThreadX 和应用程序(或其它系统)单独在每个内核上执行,并通过共享内存或处理器间通信机制来相互通信。
对于处理器高度动态加载的环境,ThreadX 对称多处理(Symetric Multiprocessing,SMP)可用于以下内核:
ThreadX SMP 在 n 个处理器之间执行动态负载平衡,并允许任何 Core 上的任何线程访问所有ThreadX 资源(队列,信号量,事件标志,内存池等)。ThreadX SMP 在所有内核上启用完整的 API,并引入了适用于 SMP 操作的 API。
对于SMP,ThreadX提供了common_smp
和port_smp
。