real time OS

实时操作系统,它通过调度和资源管理,保证实时任务在规定的时间限制内完成。

linux不是实时操作系统,主要是因为:

1
2
3
4
5
6
存在关中断机制,低优先级的进程如果关闭了中断(进入临界区等),高优先级的进程中断发生也无法响应。
内核禁止抢占,进程进入内核,直到系统调用结束/被阻塞,高优先级进程无法被调度。
调度策略,分为实时任务和普通任务,只意味着谁优先被CPU调度,而没有保证完成时间。
虚拟内存机制通过 swap 可能让进程访问内存的时间不可预测。
高优先级的进程不能抢占低优先级进程的资源。如果高优先级的进程要使用低优先级进程正在使用的资源时,它必须等待低优先级的进程释放资源,容易产生优先级倒置;
Linux的周期模式定时器频率仅为100Hz,远不能满足多种实时应用的要求

RTlinux,后演变为preempt_rt,在linux的基础上打补丁,增加了

1
2
3
4
5
中断线程化:把传统硬中断 top-half 的大部分逻辑移到内核线程里运行。可以被调度,减少CPU被不可抢占硬中断占用的时间。
开启可抢占RCU配置。
当低优先级任务(持锁)阻塞高优先级任务时,临时提升持锁低优先级任务的优先级,防止中等优先级任务抢占,缩短高优先级任务的等待时间。
使用rt_mutex替代spin lock,可抢占。支持优先级继承。
使用hwtimer替代jeffies等等。