实时操作系统基本概念

来源:互联网 发布:哈德逊河迫降 知乎 编辑:程序博客网 时间:2024/05/24 06:34

实时系统与非实时系统的本质区别就在于实时系统中的任务都有时间限制

时间限制有两种:一种是任务的周期性,按一定周期启动执行的任务称为周期性任务。而随机启动执行的任务称为非周期性任务。另一种时间限制为时限,即要求任务在规定时间内完成。

实时系统的特点:

  总的来说实时操作系统是事件驱动的,能对来自外界的作用和信号在限定的时间范围内作出响应。(它强调的是实时性。可靠性和灵活性)

  从实时系统的应用特点来看实时操作系统可以分为两种:一般实时操作系统嵌入式实时操作系统

  一般实时操作系统应用于实时处理系统的上位机和实时查询系统等实时性较弱的实时系统,并且提供了开发、调试、运用一致的环境。

  嵌入式实时操作系统应用于实时性要求高的实时控制系统,而且应用程序的开发过程是通过交叉开发来完成的。嵌入式实时操作系统具有规模小(一般在几k-几十k中)、可固化使用实时性强(在毫秒或微妙数量级上)等特点。(即开发环境与运行环境是不一致的)

实时性要求一般有两层含义:时间上同时发生和过程上同时响应。

  要求一:数据识别、数据建立和正确响应必须在规定时间内完成。

  要求二:对外部事件处理的实时性,即实时系统必须能进行分布式或并行处理。

实时系统重要参数:

  系统响应时间:系统发出处理要求到系统给出应答信号的时间。

  生存时间:数据有效等待时间。

  中断延迟时间:计算机接收到中断信号到操作系统作出响应,并完成转入中断服务程序的时间。

  任务切换时间:任务之间切换而使用的时间。

  吞吐量:在一给定时间内,系统可以处理的事件总数。

按外部过程的要求划分实时系统可以分为:软实时系统硬实时系统。对于软实时系统来说,未能实时完成处理的结果,仅仅是带来了额外的代价,且通常这种代价能够被接受。对于硬实时系统来说,未能实时完成处理是坚决不允许的,它往往导致致命危害。如刹车系统、制导系统。

按系统响应时间划分可以分为:强实时系统(响应时间在100ms、10ms、ms或ms级以下)、一般实时系统(响应时间在s、10s以上)和弱实时系统(响应时间在10s以上或更长,随负载变化)。

按软件结构划分为:轮循系统事件驱动系统(前后台系统,多任务系统,多处理器系统)

轮循:initalize()

            app1_task()

            {

                      if(condition_1)

                              action_1();

                         if(condition_2)

                              action_2();

                           ......

                            if(condition_n)

                              action_n();

            }

            (CPU开销大,适合较慢速的简单系统)

嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。使用实时操作系统主要有以下几个因素:
v 嵌入式实时操作系统提高了系统的可靠性。
v 提高了开发效率,缩短了开发周期。
v 嵌入式实时操作系统充分发挥了CPU的多任务潜力。
优点:在嵌入式实时操作系统环境下开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化;而且对实时性要求苛刻的事件都得到了快速、可靠的处理。通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。
 缺点:但是,使用嵌入式实时操作系统还需要额外的ROM/RAM开销,2~5%的CPU额外负荷,以及内核的费用。
常见的嵌入式操作系统:
嵌入式LINUX:uClinux是一个完全符合GNU/GPL公约的操作系统,完全开放代码。uClinux从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。它是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元(MMU)的处理器,例如ARM7TDMI。它通常用于具有很少内存或Flash的嵌入式系统。它保留了Linux的大部分优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API等。
WINCE:Windows CE是微软开发的一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作,它是精简的Windows 95。Windows CE的图形用户界面相当出色。Win CE具有模块化、结构化和基于Win32应用程序接口以及与处理器无关等特点。Win CE不仅继承了传统的Windows图形界面,并且在Win CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C++等)、使绝大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用。
VxWorks:VxWorks操作系统是美国WIND RIVER公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等,甚至在1997年4月登陆火星表面的火星探测器上也使用到了VxWorks。
Nucleus:Nucleus PLUS是为实时嵌入式应用而设计的一个抢先式多任务操作系统内核,其95%的代码是用ANSIC写成的,因此非常便于移植并能够支持大多数类型的处理器。
    Nucleus PLUS采用了软件组件的方法。每个组件具有单一而明确的目的,通常由几个C及汇编语言模块构成,提供清晰的外部接口,对组件的引用就是通过这些接口完成的。由于采用了软件组件的方法,使Nucleus PLUS 的各个组件非常易于替换和复用。
eCos:eCos是RedHat公司开发的源代码开放的嵌入式RTOS产品,是一个可配置、可移植的嵌入式实时操作系统,设计的运行环境为RedHat的GNUPro和GNU开发环境。eCOS的所有部分都开放源代码,可以按照需要自由修改和添加。eCOS的关键技术是操作系统可配置性,允许用户组和自己的实时组件和函数以及实现方式,特别允许eCOS的开发则定制自己的面向应用的操作系统,使eCos能有更广泛的应用范围。
uC/OS-II:μC/OS-II是一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统。其绝大部分源码是用ANSI C写的,使其可以方便的移植并支持大多数类型的处理器。μC/OS-II通过了联邦航空局(FAA)商用航行器认证。自1992年问世以来,μC/OS-II已经被应用到数以百计的产品中。μC/OS-II占用很少的系统资源,并且在高校教学使用是不需要申请许可证。
uITRON:TRON是指“实时操作系统内核(The Real-time Operating system Nucleux)”,它是在1984年由东京大学的Sakamura博士提出的,目的是为了建立一个理想的计算机体系结构。通过工业界和大学院校的合作,TRON方案正被逐步用到全新概念的计算机体系结构中。
    uITRON是TRON的一个子方案,它具有标准的实时内核,适用于任何小规模的嵌入式系统,日本国内现有很多基于该内核的产品,其中消费电器较多。目前已成为日本事实上的工业标准。
代码的临界段:
     代码的临界段也称为临界区,指处理时不可分割的代码,运行这些代码不允许被打断。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界区代码的执行,在进入临界区之前要关中断,而临界区代码执行完成以后要立即开中断。(这不是绝对的)
共享资源:可以被一个以上的任务使用的资源叫做共享资源。为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥
任务的优先级:每个任务都有其优先级(priority),分为静态优先级动态优先级两种。应用程序执行过程中诸任务优先级不变,则称之为静态优先级。在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。应用程序执行过程中,如果任务的优先级是可变的,则称之为动态优先级。
调度方式:
  不可抢占(non-preemptive)调度方式:一个进程若被选中就一直运行下去,直到它被阻塞(I/O,或正在等待其他进程),或主动地交出CPU。
  可抢占(preemptive)调度方式:当一个进程在运行时,调度程序可以打断它。另外,在其他一些情形下,如就绪队列中有新进程的优先级高于当前正运行的进程,也可能立即进行调度。
死锁:指两个任务无限期地互相等待对方控制着的资源。设任务T1正独享资源R1 ,任务T2正独享资源R2,此时任务T1又要使用资源R2,任务T2也要使用资源R1,于是两个任务都无法继续执行了。
防止死锁的方法:
  1)先得到全部需要的资源,再做下一步的工作;
  2)用同样的顺序申请多个资源;
  3)释放资源时,使用相反的顺序;
  4)使用等待超时。
中断:
  中断是一种硬件机制,通知CPU有个异步事件发生了。
  中断一旦被识别,CPU保存部分或全部现场(context)后跳转到中断服务子程序(ISR) ,ISR结束后可返回到:
      • 在前/后台系统中,返回到后台程序;
      • 对不可剥夺型内核,返回到被中断了的任务;
      • 对可剥夺型内核,返回到就绪状态优先级最高的任务。
  中断使得CPU可以在事件发生时才进行处理,而不必让CPU不断地查询是否有事件发生。
  通过开/关中断可以让CPU响应或不响应中断。
  在实时环境应注意不要使关中断时间过长。
一个完整的任务应该有如下三部分:
  任务代码(程序)
  任务的私有堆栈(用以保护运行环境)
  任务控制块(提供私有堆栈也是虚拟处理器的位置)
这些都是任务方应该提供的基本信息。