实时操作系统,它通过调度和资源管理,保证实时任务在规定的时间限制内完成。
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等等。
|