非科班码农太多,实时非实时 OS都没听过

非实时os:Linux//Windows/mac OSX

实时os:uCOS/VxWorks/RTLinux

到底啥区别?哪个好?

实时os,优先级更高的任务2就绪的时候,即便任务1正在运行中,也必须立刻交出CPU的使用权,就跟中断一样,先执行任务2,等任务2执行完或者主动挂起(sleep)让出CPU的时候,任务1才能接着运行

如 uCOS,是可抢占性的内核,高优先级任务2就绪,而低优先级任务1正在执行没有sleep的时候,高优先级任务2能打断低优先级任务而立即得到执行

Linux/Windows/OSX这些基于时间片轮转,都是非实时os,CPU不可抢占

即便高优先级的任务2就绪了,也不能马上中断低优先级任务而得到执行,必须要等到低优先级任务1主动挂起(sleep)或时间片结束才能得到执行


通用os(Windows、Linux等),由分时os发展而来

基本设计原则:尽量缩短平均响应时间并提高吞吐率,单位时间内为尽可能多的用户请求提供服务

更注重平均表现性能,而非个体表现性能

实时os注重的不是平均表现,而是要求每个实时任务在最坏情况下都要满足其实时性要求,即 注重个体表现,更准确地讲是个体最坏情况表现

资源调度策略/os实现方法差异

资源调度

  • 通用

基于优先级的抢先式调度策略,优先级相同的进程,时间片轮转调度

但用户进程可用系统调用,动态调整自己优先级,os也可按策略调整某些进程的优先级

  • 实时

静态表驱动/固定优先级抢先式调度

静态表驱动

生成任务运行时间表,指定各任务的起始运行时间以及运行长度,调度器在指定时刻启动相应的任务即可

固定优先级抢先式与通用os基本类似,但进程优先级固定不变,且优先级在运行前通过策略(Rate-Monotonic、Deadline-Monotonic等)指定

内存管理

一、虚存管理机制基础上增加页锁功能

可将关键页面锁在内存中,不被swap出内存,提高系统的可预测性

但由于TLB等机制的设计也是按照注重平均表现的原则进行的,系统的可预测性并不能完全得到保障

二、静态内存划分

为每个实时任务划分固定内存

系统有较好可预测性,灵活性不够好,任务对存储器需求有变化就需要重新划分内存,虚存机制好处也丧失

中断处理

通用os

大部分外部中断都开启,中断处理一般由设备驱动程序完成

用户进程一般没有实时性要求,而中断处理程序直接跟硬件设备交互,可能有实时性要求,中断处理程序优先级高于用户进程

实时os

除时钟中断外,屏蔽所有其它中断,中断处理程序变为周期性的轮询操作,保证系统的预测性

主要缺点

对环境变化的响应可能不如上述中断处理方式快,轮询操作一定程度上降低了CPU的有效利用率

另一种

对轮询无法满足需求的外部事件,用中断,其它仍用轮询

但中断处理程序与其它任务一样拥有优先级,调度器根据优先级对处于就绪态的两者统一调度

使外部事件的响应速度加快,并避免了上述中断方式带来第二个问题,但第一个问题仍然存在

共享资源的互斥访问

通用os一般用信号量机制解决

实时os

任务调度用静态表驱动,共享资源的互斥访问题在生成运行时间表时已经考虑到了,运行时无需再考虑

用基于优先级方式,信号量机制在系统运行时容易造成优先级倒置问题(Priority Inversion)

实时os,一般对传统信号量机制进行一些扩展,引入如优先级继承协议(Priority Inheritance Protocol)、优先级顶置协议(Priority Ceiling Protocol)以及Stack Resource Policy等机制,解决优先级倒置的问题

举例

硬实时

代表产品 VxWorks,任务调度模块是人家的压箱底法宝

提供了实时性较好的内核、多种任务通信机制、TCP/IP组件、文件管理及I/O服务

编辑、编译、调试、仿真为一体的集成开发环境,支持用户使用C、C++进行应用程序的开发

Tornado

汽车气囊

当报告车辆碰撞的传感器中断CPU后,os应快速地分配展开气囊的任务,并且不允许任何其他非实时处理进行干扰,晚一秒钟展开气囊比没有气囊的情况更糟糕,这就是一个典型的必须使用硬实时的系统

软实时

代表产品 软实时Linux

IPTV机顶盒,需要实时的处理(解码)视频流,丢失视频帧,造成视频品质更差,但不会对整个系统造成不可挽救的影响

软实时系统就是那些从统计的角度来说,一个任务能够得到有确保的处理时间,到达系统的事件也能够在截止期限到来之前得到处理,但违反截止期限并不会带来致命的错误

linux

2.6 对内核配置可使其可抢占,得到软实时功能

标准 2.6 内核中,用户空间进程执行内核调用时,不能被抢占

低优先级进程进行了系统调用后,高优先级进程必须等到调用结束后才能访问 CPU

2.6 另一项有用的配置选项是高精度定时器。允许定时器以 1μs 的精度运行(底层硬件支持的话),红黑树实现对定时器的高效管理,可以用大量的定时器而不会对定时器子系统(O(log n))的性能造成影响z

实时操作系统概述

http://blog.csdn.net/fovwin/article/details/11020977