0. 缘起
Linux是一个通用的操作系统,满足不了实时应用:
0.1 关中断问题
在系统调用中,为了保护临界区资源,Linux处于内核临界区时,中断会被系统屏蔽,这就意味着如果当前进程正处于临界区,即使它的优先级较低,也会延迟高优先级的中断请求。在实时应用中,这是一个十分严重的问题。
0.2 进程调度问题
Linux采用标准的UNIX技术使得内核是不可抢占的。采用基于固定时间片的可变优先级调度,不论进程的优先级多么低,Linux总会在某个时候分给该 进程一个时间片运行,即使同时有可以运行的高优先级进程,它也必须等待低优先级进程的时间片用完,这对一些要求高优先级进程立即抢占CPU的实时应用是不 能满足要求的。
0.3 时钟问题
Linux为了提高系统的平均吞吐率,将时钟中断的最小间隔设置为10ms,这对于一个周期性的实时任务,间隔要求小于10ms时,就不能满足实时任务的 需要。如果要把时钟的间隔改小以满足周期性的实时任务的需要,由于Linux的进程切换比较费时,时钟中断越频繁,而花在中断处理上的时间就越多,系统的 大部分时间是调用进程调度程序进行进程调度而不能进行正常的处理。
1. 改进
两种改进的思想:
1.1 修改内核,增强其实时性
往这方面努力的有:TimeSys 和 MontaVista,其中MontaVista 贡献巨大,所主持的kernel preemption project (http://sourceforge.net/projects/kpreempt/) 早已进入内核主源码树。
1.2 与其它RTOS混合 (A hybird Operating System Architecture)
这方面的有名例子有: RTLinux 和 RTAI (https://www.rtai.org/)
其基本思想就是将标准Linux内核作为一个进程,运行于RTOS上:
这种改进的优点为:
可以集合两种OS的优点,既能满足实时应用,又能尽可能复用现有资源(应用软件、开发工具以及开发人员等等)
缺点为:
进程不能同时请求Linux和RTOS为其服务 (实时的文件管理)
混合的结构也使开发环境和进程变得复杂 (调试器得支持两种OS才行)
2. Reference
[1] “Linux on ITRON”: A Hybrid Operating System Architecture for Embedded Systems
[2] RTLinux versus RTAI
[3] 嵌入式实时操作系统RTLinux的分析和实现