实时嵌入式操作系统的线程调度程序

roo*_*ook 0 assembly multithreading kernel real-time

我被赋予了修复用C/C++编写的嵌入式操作系统的任务.正在使用的当前线程调度程序与循环调度非常相似,不同之处在于它缺少一个非常重要的特性,即中断线程然后返回执行的能力,从而创建可执行的"切片"执行时间.

我的问题是,如何中断运行代码,执行另一个任务然后优雅地返回执行?我相信这种行为需要特定于架构的汇编程序.这是操作系统将运行的芯片:http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code = MPC860

另一方面,这是航空电子软件,因此它必须是"确定性的".除此之外,没有堆使用,所有内存必须有界限.

当前系统是"周期性过程",其中下一个任务必须等待第一个任务完成.这很简单,如果操作系统的一部分崩溃,让我们说ATN堆栈,那么整个操作系统就会陷入困境.(在这里插入坠毁的飞机......虽然这是B级软件,这意味着如果系统飞机不会崩溃.)

Aid*_*ell 7

免责声明:不要使用我的建议.找一个专家,如果人们的福祉取决于一个系统,那么不要把它留给机会/黑客/ SO建议!

飞机哎呀http://xs.to/thumb-AF83_4B54A285.jpg

您应该能够编写一个新的过程,该过程通过中断以已知的间隔输入,使用现有的调度函数保存线程状态并更改线程上下文.此外,确保您的锁定原语与新的调度一起使用,并且您不会将基于非原子/非指令的T&S锁定或其他任何操作.

该网站提供了有关线程切换,状态保存等的良好信息.最终中断特定于您的CPU /硬件.保存线程状态的方式还取决于系统的约束和您使用的线程结构.

现代操作系统第3版包含了理论上的一些好的块,但实现依赖于现有代码和您所使用的硬件的最佳实践,以及内核中处理中断,信号等的其他代码.

此外,"Phillip A. Laplante的实时系统设计和分析"可能是使现有调度程序适应新要求的良好资源.另一个有趣的文字