嵌入式操作系统中的基本概念_第1页
嵌入式操作系统中的基本概念_第2页
嵌入式操作系统中的基本概念_第3页
嵌入式操作系统中的基本概念_第4页
嵌入式操作系统中的基本概念_第5页
已阅读5页,还剩47页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式实时操作系统C/OS-II基本概念主讲:刘林真邮箱:l.lz嵌入式操作系统中的基本概念前后台系统调度临界区进程与线程任务与多任务任务切换死锁不可剥夺型内核可剥夺型内核可重入性优先级反转事件互斥同步对存储器要求嵌入式操作系统中的基本概念前后台系统调度临界区进程与线程任务与多任务任务切换死锁不可剥夺型内核可剥夺型内核可重入性优先级反转事件互斥同步对存储器要求 前、后台系统前后台系统应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,可以看成前台行为(foreground)后台也可以叫做任务级。前台也叫中断级。

2、 5中断中断数据采集处理数据处理键盘显示打印传统前后台系统编程处理键盘RTOS数据采集处理数据显示打印中断基于RTOS编程 前、后台系统6调度 (Scheduler)内核的主要职责之一,决定任务运行的次序。 基本的调度算法有先来先服务FCFS,优先级法(Priority),轮转法(Round-Robin)等。 调度的基本方式有可剥夺型和不可剥夺型。 多数实时内核是基于优先级调度的多种方法的复合。7临界区(Critical Section)定义: 指一段不可分割的代码,一旦执行,不能被中断。(用于访问临界资源的代码段;临界资源:任何时候都只允许一个任务访问的资源。)实现临界区的方法有:1、屏蔽中

3、断,通常在代码执行前关闭中断,执行后打开中断。2、通过信号量机制。嵌入式操作系统中的基本概念前后台系统调度临界区进程与线程任务与多任务任务切换死锁不可剥夺型内核可剥夺型内核可重入性优先级反转事件互斥同步对存储器要求9进程1、行为的一个规则叫做程序,程序在处理器上执行时所发生的活动叫做进程。2、进程是可以与其它进程并发执行的计算部分。3、进程是一个独立的可以调度的活动。定义:(常见的三种)10进程1、进程是程序的一次执行过程,是一个动态的概念,而程序是指令的有序集合,是静态的概念。2、进程具有生命期,从创建时存在,到撤销时消失,其存在是暂时的,而程序是是静态的,其存在可以是永久的。3、进程具有结

4、构特征,由程序段、数据段、进程控制块三部分组成,而程序仅是指令的有序集合,是进程的组成部分。4、进程与程序之间不是一一对应的关系。一个程序可同时运行于不同的数据集合上,映射成多个进程。进程与程序之间的区别:11线程 线程是进程内一个相对独立的可调度的执行单元实体。定义:引入线程的优点:(1) 提高了程序并发执行的程度,加快了系统的执行速度。线程是比进程粒度更小的调度单位。一个进程可以有多个线程。(2)大大降低了系统的开销。线程不拥有自己的资源,只共享进程的资源空间,创建、切换、撤销的开销都很小。(3)提高了资源的利用率。(4)更好地为用户提供服务。实现高质量的人机交互。12任务 Task指拥有

5、所有CPU资源的简单程序。任务即是一个进程.UCOS-II是多任务的可抢占操作系统. 我们可以把一个复杂的事情分成多个简单的子任务,每个作为一个进程运行,这样可以简化复杂程序的设计.实时系统中的大部分任务是周期的,体现在编程上每个任务则是一个典型的无限循环。 任务的状态:休眠态、就绪态、运行态、挂起态、被中断态 。13任务:example手持数据采集终端的打印CreateTASK(myprintf, priority) void myprintf( ) for (;) 等待接收队列信息; 往打印机发送打印信息; 挂起状态:任务在等待某一事件的发生还不能运行的状态;被中断状态:因为中断服务程序正

6、在执行而得不到CPU控制权的状态;休眠状态:任务驻留在程序空间之中,还没有交给C/OS-管理的状态,而将任务交给C/OS-管理是通过调用函数OSTaskCreate()实现的;就绪状态:任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行的状态。在C/OS-中,当任务一旦建立,这个任务就进入就绪态准备运行;运行状态:任务掌握了CPU的控制权,正在运行中的状态。任务的状态 运行休眠挂起被中断就绪任务状态描述15任务 Task任务=程序代码+堆栈+任务控制块任务控制块保存着所有与任务相关的信息,包括堆栈的指针和优先级任务的堆栈则用来保存任务分配的局部变量,此外

7、,当任务被切换出去时,堆栈还保存当前寄存器的值16多任务 多任务是指用户可以在同一时间内运行多个应用程序,每个应用程序是一个任务。 多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。 嵌入式操作系统中的基本概念前后台系统调度临界区进程与线程任务与多任务任务切换死锁不可剥夺型内核可剥夺型内核可重入性优先级反转事件互斥同步对存储器要求 任务切换(Context Switch) 当多任务内核决定运行另外的任务时,保存正在运行任务的当前状态,即保存CPU寄存器中的全部内容。这些内容保存在任务自己的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入

8、CPU的寄存器,并开始下一个任务的运行。 这个过程就称为任务切换(任务上下文)。19死锁 所谓死锁,是指各并发任务彼此等待对方所拥有的资源,且这些并发任务在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发任务不能继续向前推进的状态。定义:20防止发生死锁的方法 简单的防止发生死锁的方法是让每个任务做到:先得到全部需要的资源,再做下一步的工作。用同样的顺序去申请多个资源,释放资源时使用相反的顺序。 内核大多允许用户在申请信号量时定义等待超时,以化解死锁。当等待时间超过了某一确定值,信号量还是无效状态时,就会返回某种形式的出现超时错误的代码。这个出错代码

9、告知该任务,不是得到了资源使用权,而是系统错误。死锁一般发生在大型多任务系统中,在嵌入式系统中不易出现。不可剥夺型内核不可剥夺型内核1、任务在运行过程中,中断来了。2、如果此时中断是开着的,CPU由中断向 量进入中断服务子程序。3、中断服务子程序做事件处理,使一个有更高级的 任务进入就绪态。4、中断服务完成以后,中断返回指令,CPU回到原 来被中断的任务。5、 接着执行该任务被中断了的代码。6、直到该任务完成,调用一个内核服务函数以释放 CPU控制权。7、内核将控制权交给那个优先级更高的、并已进入 就绪态的任务这个优先级更高的任务才开始处理中 断服务程序标识的事件 。 可剥夺型内核可剥夺型内核

10、1、任务在运行过程中,中断来了。2、如果此时中断是开着的,CPU由中断向 量进入中断服务子程序。3、中断服务子程序做事件处理,使一个有更高级的 任务进入就绪态。当ISR完成时,进入内核提供的 一种服务(一个内核提供的函数被调用)4、5、 该函数知道一个更重要的任务进入就绪态,于是 内核进行任务切换,执行更重要的任务的代码。 当该任务完成后,内核提供另一个函数。6、7、该函数使得内核看到了低优先级的任务要运行,于是发生另一次任务切换,被中断了的任务继续运行。 使用可剥夺型内核,最高优先级的任务什么时候可以执行以及什么时候可以得到CPU的控制权是可知的。使用占先式内核使得任务级响应时间得以最优化。

11、 使用可剥夺型内核时,应用程序不应该直接使用不可重入型函数。可剥夺型内核嵌入式操作系统中的基本概念前后台系统调度临界区进程与线程任务与多任务任务切换死锁不可剥夺型内核可剥夺型内核可重入性优先级反转事件互斥同步对存储器要求27可重入性(Reentrant) 可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。28可重入性(Reentrant) strcpy(char *dest, char *src) while (*src!=0) *dest=*src; dest+; src+; *dest = 0;-可重入

12、函数29可重入性(Reentrant) int Temp;void swap(int *x, int *y) Temp = *x; *x = *y; *y = Temp;-不可重入函数30使函数具有可重入性的方法把temp定义为局部变量;调用函数之前关中断,调用后再开中断;用信号量禁止该函数在使用过程中被再次调用。31优先级(Priority) 每个任务按其重要性被赋予一定的优先级。注:C/OS-II任务的优先级是任务的唯一标识。 静态优先级与动态优先级。 基于优先级的系统会出现优先级反转(倒置)的问题,一个好的实时内核应该提供解决倒置的方法。32优先级反转优先级列表任务1任务2任务3高低共享

13、资源 假设任务1和任务3共享一个资源,任务2为优先级介于任务1和任务3之间的一个与该共享资源无关任务,分析优先级反转问题。任务2优先级高于任务3而进入运行状态任务1申请共享资源而处于等待状态此时,虽然任务1比任务2优先级更高,但却在任务2之后运行,这种现象就是优先级反转。任务3得到共享资源而处于运行状态34优先级反转问题的解决优先级继承 优先级继承(Priority inheritance):为防止发生优先级反转,内核能自动变换任务的优先级。 将占用共享资源的低优先级任务的优先级提升到略高于等待共享资源的高优先级任务的优先级。这个略高于高优先级任务的优先级称为:优先级继承优先级(Priorit

14、y Inheritance Priority,PIP)优先级列表优先级继承任务1任务2任务3高低共享资源任务3共享资源 假设任务1和任务3共享一个资源,定义优先级继承优先级,任务2为优先级介于任务1和任务3之间的一个与该共享资源无关任务。任务2优先级不够高无法获得CPU任务1申请共享资源而处于等待状态任务3此时,任务2无法在任务1之前得到运行,不发生优先级反转共享资源任务1任务3获得CPU,且优先级升到优先级继承优先级任务1获得CPU嵌入式操作系统中的基本概念前后台系统调度临界区进程与线程任务与多任务任务切换死锁不可剥夺型内核可剥夺型内核可重入性优先级反转事件互斥同步对存储器要求37事件 一个

15、任务或者中断服务子程序可以通过内核服务来向另外的任务发信号,这里所有的信号被看作事件(Event)。包括信号量、消息邮箱、消息队列。38事件信号量 信号量是一种程序间的约定机制,这种约定决定哪个程序(任务)可以执行。信号量类型:二值信号量;计数式信号量 信号量像是通行证,且通行证的数目是有限的。任务要运行下去,要先拿到通行证。如果信号量已被别的任务占用,则该任务只得被挂起,直到信号量被当前使用者释放掉。 我们知道酒店的桌子数是固定的,因此可以这样理解其最大桌子数就是计数器的初值,假设一人占用一张桌子,因此每进去一人,计数器就会自动减1,而只有出去一人时计数器才会自动加1。即就是说,如果计数器大

16、于0,就可以进去吃饭,否则只好等待有人出来才能进去,这种计数信号就是信号量。酒店人计数器(能容纳的人数)3210人人人禁止其它客人进入人没有空位,不能再容纳客人有空位,能再容纳1位客人40事件信号量 一般地说,对信号量只能实施三种操作:初始化,也可称做建立;等信号,也可称做挂起;给信号或发信号。信号量初始化时要给信号量赋初值,等待信号量的任务表应清为空。41事件消息邮箱 通过内核服务可以给任务发送消息。用一个指针型变量,通过内核服务,一个任务或一个中断服务程序可以把一则消息(即一个指针)放到邮箱里去。同样,一个或多个任务可以通过内核服务接收这则消息。 用来传递消息缓冲区指针的数据结构叫做消息邮

17、箱。 消息是任务之间的一种通信手段,当同步过程需要传输具体内容时就不能使用信号量,此时可以选择消息邮箱,即通过内核服务可以给任务发送带具体内容的消息。 通过上述图解可知,用来传递消息缓冲区指针的数据结构就是消息邮箱。 消息缓存区消息邮箱PCPC一个邮箱只能存放一个消息指针 43事件消息队列 消息队列用于给任务发消息。通过内核提供的服务,任务或中断服务子程序可以将一条消息放入消息队列。同样,一个或多个任务可以通过内核服务从消息队列中得到消息。通常,消息队列传递的是一个指针,以便任务可以通过它发送和接收任意类型数据(即消息,也就是指针指向的内容)。44消息邮箱:实际上就是个数据结构,里面有个成员变

18、量是个指针,该指针指向一条消息.消息队列:和消息邮箱基本相同,只是它可以放入多条消息,而邮箱通常只有一条消息。45互斥(mutual exclusion)资源的使用必须独占,叫做互斥。解决办法: 禁止中断(关中断) 禁止抢占(禁止做任务切换) 利用信号量 测试并置位46禁止中断void Function (void) OS_ENTER_CRITICAL(); /宏调用,关中断 /*在这里处理共享数据*/ OS_EXIT_CRITICAL(); /宏调用,开中断47禁止抢占void Function (void) OSSchedLock(); /内核函数,调度上锁 /*在这里处理共享数据(中断是开着的)*/ OSSchedUnlock(); /内核函数,调度解锁注意:这种办法只能保证多个任务之间的互斥,不能保证任务与中断服务程序之间的互斥48同步定义:一个工作的完成需要多个任务或者 多个任务与多个中断共同完成,它们之间必须互相配合、协调动作,甚至交换信息,这就要用到同步技术。 任务之间这种制约性的合作运行机制叫做任务间的同步。系统中是依靠任务与任务之间相互发送消息来保证同步。同步方法:信号量、事件标志组、消息邮箱、消息队列嵌入式操作系统中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论