《嵌入式操作系统原理与面向任务程序设计》课件第二讲M_第1页
《嵌入式操作系统原理与面向任务程序设计》课件第二讲M_第2页
《嵌入式操作系统原理与面向任务程序设计》课件第二讲M_第3页
《嵌入式操作系统原理与面向任务程序设计》课件第二讲M_第4页
《嵌入式操作系统原理与面向任务程序设计》课件第二讲M_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式操作系统在嵌入式系统中的位置?应用程序嵌入式实时操作系统BSP抽象的硬件接口函数包(HIP)集成ARM、存储器、时钟、外设的硬件平台进程与线程任务调度与优先级资源内存管理内核与时钟节拍信号量与互斥信号量消息邮箱……嵌入式实时操作系统原理在桌面Windows操作系统下,点击任何一个以.exe为扩展名的可执行文件,或者点击桌面上的程序图标,都可以启动一个应用程序,该应用程序启动后,将成为Windows操作系统管理的一个进程。例如,用户在使用OfficeWord软件时,打开Windows系统任务管理器,如图2-2所示,会出现一个WINWORD.EXE进程。2.1什么是进程?系统中的进程Windows2.1.1进程的特点?动态性异步性并发性独立性结构性正如WindowsVista,WindowsCE是一个完全的多任务和多线程的操作系统。包含可执行代码的Win32文件被称作模块,WindowsCE支持二种类型的模块,即以EXE为扩展名的应用程序和以DLL为扩展名的动态链接库。当WindowsCE装入一个应用程序模块时,它就创建了一个进程。一个进程是应用程序的一个实例。如果二个MicrosoftPocketWord的副本在运行,那么就可以说有二个独立的进程在运行。每个进程有它自己的受保护的地址空间。WindowsCE6允许无限多个进程并发执行。2.1.2DouglasBoling先生谈进程的实质线程是进程中的一个执行单元,但是线程和程序中的函数没有对应关系!线程的工作机制与进程相似,具有独立的堆栈和运行环境,对于单CPU系统来说,任一时刻仅有一个线程处于运行状态,当运行的线程被挂起后,CPU会切换到新的线程执行。进程中的所有线程均使用该进程的资源。每个进程都有一个主线程,且每个进程均可以创建无限多个线程。2.1.3什么是线程在嵌入式实时操作系统下,任务本质上是进程或者线程。例如在µC/OS-II下,任务更像一个具有唯一线程的进程,即每个任务具有唯一的一个优先级,具有独立的堆栈空间,每个时刻仅能有一个任务占用CPU使用权,多个任务间通过任务调度协调运行。2.1.4任务与进程或线程的关系2.1.5µC/OS-II中的任务创建和管理过程2.1.6任务在内存中的示意图所谓调度器就是任务间切换的一种规则,是由嵌入式实时操作系统完成的,在µC/OS-II中,当多个任务同时就绪时,优先级最高的任务得到CPU使用权而执行;当某一任务执行完成后,系统将再次查询就绪态的任务中优先级最高的任务,并将CPU使用权分配给它;当某一任务被中断而中断服务程序执行完毕后,该任务将与所有就绪态的任务一起被调度,即中断退出后,会查询就绪态的优先级最高的任务执行,如果被中断的任务具有最高优先级,则返回到那个任务执行,否则,将切换到其他最高优先级的任务执行。2.1.7什么是调度器任务调度是嵌入式实时操作系统的核心工作,最优化调度策略是嵌入式实时操作系统设计的最终目标。目前大部分实时操作系统均有较高的调度效率。2.2任务调度与优先级2.2.1任务有几种状态所谓任务的就绪态是指当前某个任务处于可执行状态,但是由于CPU正在被其他任务使用,使得该任务无法立即执行,处于就绪态的任务一旦获得CPU使用权,将立即执行。任务的等待态是指该任务正在等待某一事件的发生或处于延时等待状态。2.2.2什么是就绪态等待态任务即使得到了CPU使用权,也不可能执行,当然,它也不会得到CPU使用权;而就绪态任务只要得到CPU使用权,就立即执行。等待态任务等待的是某个条件的满足,例如,它请求的共享资源可以使用了,或延时达到了指定的时长等;就绪态任务等待的是CPU使用权。2.2.3就绪态和等待态的区别当等待态任务的等待条件满足而结束等待后,不能立即进入执行态,必须进入就绪态;而就绪态任务一旦不再等待,便获得了CPU使用权而执行了。也就是说,等待态任务当等待条件满足后就会进入就绪态;而就绪态任务不再等待时将进入执行态。一般来说,等待态任务的等待时间会大于一个时钟节拍,甚至可为成百上千个时钟节拍;而就绪态任务的等待时间必然会小于一个时钟节拍。嵌入式系统要求一个时钟节拍内CPU必须有能力完成所有的就绪态任务。2.2.4什么是任务优先级每个任务在创建时都被分配一个优先级数值,大部分嵌入式实时操作系统的调度是基于优先级实现的,即同处于就绪态的最高优先级的任务将获得CPU使用权而执行,优先级低的就绪态任务必须等高优先级的任务执行完毕后才能按优先级高低依次获得CPU使用权。当优先级相同的多个任务处于就绪态时,嵌入式实时操作系统为它们每个任务分配执行的时间片,当某个任务在其被分配的时间片内还没有执行完时,系统将剥夺其CPU的使用权,分配下一个时间片给同优先级的另一个任务,同样道理,直到这类任务执行完成,这种方法称时间片轮换调度法。2.2.5相同优先级任务的调度法任务切换是指任务状态间的切换,只有在多任务操作系统中才有意义,任务切换为ContextSwitch,有时也被直译为上下文切换,每次任务的切换都伴随有堆栈操作,用于保存或恢复任务的执行环境(或上下文)。2.2.6什么是任务切换1、任务被创建后会进入到就绪态,此时有一个入栈的操作,即把该任务的执行入口地址入栈,因为此时没有运行环境,故运行环境的入栈值是随机数。2.2.7任务间有哪些状态切换2、就绪态的最高优先级任务获得CPU使用权后,由就绪态进入到执行态,此时原执行态的任务有一个入栈的操作,将其运行环境保存在其独立的堆栈中;而进入执行态的任务有一个出栈操作,恢复其运行环境,如果是第一次执行,只有程序计数器指针(PC)指针是有意义的,其他的运行环境值(即CPU寄存器值)没有意义,将在运行中被覆盖掉。3、任一时刻,仅可能有一个任务处于执行态,执行态的任务可以被中断信号中断,从而将CPU使用权转让给中断服务程序,此时有一个入栈操作,保存当前任务的执行环境,从而该任务进入中断态。4、处于中断态的任务相当于一种特殊的就绪态,当中断服务程序执行完成后,系统会调度,从处于中断态的任务和所有就绪态的任务中选择优先级最高的任务执行,如果中断态任务优先级最高,当然就会从中断态恢复到执行态了;如果有比中断态任务优先级高的就绪态任务,则中断态任务将进入就绪态。5、当执行态的任务运行完毕后,CPU使用权会移交出去,此时有一个入栈操作,该任务将进入到等待态,即等待一定时间的延时或等待某个事件的发生。6、等待态任务将不断地请求某个事件或查询延时情况,直到满足其执行条件后,才从等待态进入到就绪态。任何一个任务都不是每时每刻地执行着,都是按照一定的时钟节律在执行,理论上,总可以把一个整体的不间断地执行的工作,分成这种节律性的任务来完成。7、就绪态、等待态和执行态是任务的三个正常调度状态,当任务仍然住留在内存中,但是已不再受系统调度时,就进入了休眠态。任务的休眠态和等待态是不同的,任务一旦进入休眠态,不会有堆栈操作,堆栈内原有的运行环境也没有意义了。休眠态的任务可以再次启动进入到就绪态,这一过程和创建一个新的任务类似。2.2.8为什么堆栈操作越快越好正常任务的切换都会伴随着二个堆栈操作,即放弃CPU占有权的任务入栈操作和获得CPU使用权的任务出栈操作,因此,一个任务切换到另一个任务,并不是一蹴而就的,而是中间需要有一些时间,这些必需的时间开销实际上是任务执行的额外开销,即和任务执行代码无关的。由于这个原因,那些具有快速堆栈操作的CPU芯片在任务切换时效率更高。2.2.9任务调度的原则任务调度往往借助一定的算法规则的,从算法本质意义上讲,任务调度算法是一个查表算法,并且要求随着任务数的增加(即表格的增大),这个查表算法查询特定任务所需要的时间应该大体相同或完全相同。µC/OS-II借助任务就绪表和基于该表的任务调度算法,保证了任务调度时间是确定的,不随任务数的变化而变化。目前的嵌入式实时操作系统的任务调度均是基于优先级的,即保证任一时刻就绪的最高优先级任务得到CPU使用权,这种调度方法称为优先级调度法。2.2.10什么是优先级调度法即使有多个执行权限相同的任务,在单CPU系统下,也不可能同时执行,仍然可以为它们划分不同的优先级。在这些情况下,可通过信号量、消息邮箱等实现这些任务的同步执行。2.2.11为什么使用优先级调度法?采用优先级调度法进行任务调度,调度算法实质上就是如何从就绪的任务中查找优先级最高的任务,一般地优先级号为整数值,若假设整数值越小,任务的优先级越高,则调度算法就是从就绪的任务中找优先级号最小的任务。显然,这种基于整型值的查表是所有类型查表操作中最快的一种方法。2.2.12优先级相同的任务的调度2.2.13调度器的工作流程当中断发生后,应用程序会中止当前程序的执行,而跳转到中断服务例程,中断服务程序执行完毕后,将返回到被中止的程序段继续执行。从中断信号产生到中断服务程序的第一行指令被执行的时间间隔为中断响应时间,这一过程需要完成当前运行环境的入栈操作、关中断、PC指针指向中断服务程序等处理。2.2.14什么是中断响应时间?从中断服务程序退出到恢复被中止的程序的执行的时间间隔称为中断恢复(或返回)时间,这一过程需要完成恢复被中止的程序运行环境、开中断、中断返回(即PC指针指向被中止的程序节点)等处理。2.2.15什么是中断恢复时间2.2.16嵌入式操作系统的实时性体现在哪些方面一、在硬件平台上直接运行应用程序,即祼机加载应用程序,此时应用程序的执行效率最高;在硬件平台上加载嵌入式操作系统后,再在嵌入式操作系统上运行应用程序,由于使用了嵌入式操作系统,应用程序的执行过程中会调用操作系统的服务,应用程序的执行效率会有所下降。在这种意义上,嵌入式操作系统的实时性体现为加载了嵌入式操作系统后应用程序的执行效率与祼机下应用程序的执行效率相当。二、由于中断而造成的额外开销时间为中断响应时间和中断恢复时间的总和,在这种意义下,嵌入式操作系统的实时性在于中断响应时间和中断恢复时间应尽可能得小,尽可能与裸机加载应用程序情况下的中断额外开销时间相当。三、嵌入式操作系统的实时性还体现在应用程序对硬件资源的访问时间上,即借助操作系统API函数访问硬件资源与直接访问硬件资源的时间应大体相当。例如,应用程序访问随机存储器(RAM)的时间在有无操作系统下应大约相同。四、嵌入式操作系统的实时性也体现在操作系统自身上,即没有应用程序运行的情况下,操作系统能有序高效地管理硬件资源,能正确地初始化或启动各种硬件外设,访问硬件资源的时序得到实时性地满足。2.2.17中断处理过程2.3什么是资源资源是指嵌入式系统的宿主硬件系统,具体地说,是指CPU、内存、片上外设和各种输入输出设备等硬件资源,以及硬件系统中装载的可供使用的软件系统资源。从嵌入式操作系统的角度出发,硬件资源可被抽象为寄存器或内存地存空间,例如,显示器被抽象为一块显示缓冲区,即编了地址的内存,简称显存;键盘一般占用一个中断输入和一块内存区域等。因此,这里所谓的资源就是指被任务使用的寄存器或存储空间。2.3.1什么是共享资源所谓的共享资源是指可被多个任务访问的资源。2.3.2共享资源与全局变量的关系共享资源在被某个任务使用时,其他所有请求该共享资源的任务均无法使用该共享资源;某个任务要使用某个共享资源,那么该任务必须首先请求操作系统得到该共享资源,而不是直接使用;某个已经得到了共享资源的任务在使用完该共享资源后,应向操作系统释放该共享资源的使用权,从而使该共享资源可被其他任务使用;共享资源可被看作为嵌入式操作系统管理的一些特殊的全局变量,但注意区分它们与普通全局变量的异同点;信号量和消息邮箱等µC/OS-II的组件隶属于共享资源的范畴。2.3.3什么是变量变量是数据结构的载体,用以存放数据运算的初始值、中间结果和最终结果,一个变量对应于内存空间的某个地址。根据变量的作用域不同,变量分为全局变量和局部变量。一般地,每个函数里面出现的变量,其作用域为该变量定义起到该函数结束,由于作用域限于该函数,故称为局部变量。另一些变量被整个应用程序所使用,从该变量定义起到应用程序结束止,都在起作用,这类变量称为全局变量。2.3.4任务中定义的变量属性某个任务中的变量仅限于该任务所有,其他的任务对该变量不可见,相对于任务所在的应用程序而言,这类变量是局部变量;但是,相对于任务调用的函数而言,由于任务中的函数均能无条件地使用这类变量,故这类变量又可称为全局变量。2.3.5什么是可重入函数仅使用局部变量而不使用全局变量的函数,称为可重入函数。2.3.6什么是死锁当某个共享资源被一个任务使用时,其他的任务均无法使用该共享资源,如果正在使用共享资源的任务优先级较低,当某时刻较高优先级的任务就绪将中断当前任务的执行,如果高优先级的任务也需要使用同一个共享资源,则因请求不到共享资源而处于持续请求状态;原来占用共享资源的任务因优先级低而处于等待CPU状态,这种情况下系统调度器不能实现上述二个任务的调度,而处于死锁状态。2.3.7防止死锁的方法1、临时改变死锁任务中低优先级任务的优先级,从P1临时变为比P2优先级高的P3,这样,调度器会调度到P3任务执行,执行完后再回来执行P2任务,并且把P3任务的优先级还原。在µC/OS-II中使用了这种方法。2、临时改变死锁任务中高优先级任务的优先级,从P2临时变为比P1优先级低的P4,这样,调度器会调度到P1任务执行,执行完后再回来执行P2任务,并且把P4任务的优先级还原。2.4什么是系统内存一般地系统内存被划分为二个空间,即程序空间和数据空间。程序空间与数据空间是分开的,程序空间用于存储可执行代码指令,数据空间用于堆和栈的空间分配。程序空间中存放各个代码段指令时,一般是地址连续存放的,中间没有空闲存储区;而数据空间中各个栈区的空间可随意开辟,要保证各个栈的大小够用,不需考虑栈区间是否相邻,同样堆的空间地址在数据区中也是任意的。2.4.1嵌入式系统内存分配示意2.4.2什么是堆堆为应用程序级别的全局变量。定义一个全局数组,例如:“INT32UmyBuf[10][30];”,即在内存中开辟了一个1200字节的堆。2.4.3什么是栈栈为任务级别的全局变量和局部变量。一般地,使用一维数组作为任务的栈,在这个意义上,可认为栈是堆中的一块固定的静态空间。每个任务的栈区保存这个任务的运行环境和任务中调用的函数的参数及其局部变量。2.4.4什么是内存碎片内存碎片是针对堆而言的。2.4.5µC/OS-II如何解决内存碎片问题使用静态二维数组开辟出一块大的空间;然后,任务中动态空间均从该静态空间中申请,使用完后立即释放。由于使用静态数组作为动态分配的容器空间,因此,这种方法的优点在于可以查询空间中内存的使用情况。2.5内核的定义嵌入式实时操作系统有时也简称为内核,应用程序是加载于内核之上的用户程序。内核的主要服务是任务调度,此外内核中也提供了时钟节拍服务和空闲任务等,常见的内核分为二种类型,即不可抢先型内核和可抢先型内核。2.5.1什么是不可抢先型内核2.5.2什么是可抢先型内核2.5.3什么是时钟节拍操作系统中每个任务都是在等待态、就绪态和执行态三种状态间有规律地循环往复工作着,时钟节拍管理着那些处于等待态的任务的延时,一个时钟节拍的大小是任务等待的最小延时,每个时钟节拍到来后,系统将把等待态的每个任务的延时减少一个时钟节拍值,并判断每个任务是否等待结束,把结束等待的任务调度到就绪态。2.5.4时钟节拍为什么不宜过大或过小时钟节拍一般由硬件系统的定时器中断产生,因此时钟节拍在管理等待态任务的延时时会有中断响应和中断恢复方面的额外开销,如果时钟节拍设定过小,将导致大量的这类额外开销的CPU时间浪费,故时钟节拍不应设定过小。相反地,如果时钟节拍值设定过大也不合适,会造成各个任务的延时分辨率大大降低,例如,时钟节拍周期为5秒,那么延时1秒和延时9秒的二个任务,虽然相差8秒,但是都只能设定延时一个时钟节拍。实际中可根据任务的数量和CPU的处理能力设定时钟节拍的周期,一般地可设为1ms-200ms。2.5.5只有时钟节拍中断时内核服务情况2.5.6时钟节拍和中断都存在时的内核服务情况2.5.7什么是空闲任务空闲任务一般不实现任何功能,只是简单地占用了CPU而已;或者让空闲任务作简单的数值自增或自减操作,此时空闲任务可用于统计CPU的使用情况。此外,还可以根据实际情况使空闲任务关闭一些系统外设,使CPU工作在低功耗模式。2.5.8空闲任务的优先级是多少空闲任务是系统任务,当所有用户任务均处于等待态时,CPU就空闲下来,这时系统会提供一个所谓的空闲任务进入执行态。空闲任务的优先级最低,且永远处于就绪态中,如果就绪态中有用户任务出现,其优先级必然比空闲任务高,从而抢到CPU使用权而得到执行;当就绪态中没有用户任务时,空闲任务成为唯一的就绪任务,此时它得到CPU使用权。2.6信号量和互斥信号量的作用信号量的主要用途在于使一个任务同步另一个任务的执行。普通的信号量用于保护共享资源时易造成死锁,此时应使用互斥信号量。2.6.1什么是信号量可把信号量比喻为一个全局计数器,这个计数器的值只能为0,1,2,3,……等自然数。信号量被创建时可以赋一个初始计数值;在任务中每“释放”一次信号量,其计数值被加1。在任务中每“请求”一次信号量,如果该信号量的计数值大于0,则请求成功,其计数值被减1;如果信号量的计数值为0,则请求会失败,信号量的值保持0不变。上述的“释放”和“请求”是作用于信号量的二个主要操作,因此,在一个任务中有规律的释放信号量,另一个任务持续不断地请求信号量,则必然会导致请求信号量的任务按释放信号量的任务的规律工作。2.6.2信号号请求与释放示意图2.6.3信号量同步示意2.6.4再次讨论什么是死锁假设任务A和B都要使用共享资源R1和R2,且任务A的优先级高于任务B,使用信号量S1保护共享资源R1,信号量S2保护共享资源R2,信号量S1和S2的初值均为1。这二个任务执行过程中可能会出现这种情况:某个时刻,任务B请求到信号量S1,使S1=0,任务B占用了共享资源R1,此时中断发生了;然后,中断返回后,操作系统调度到优先级更高的任务A执行(不妨认为中断服务程序使任务A就绪了),任务B被放入就绪表中;任务A执行到某处后要使用共享资源R2,于是请求信号量S2并使S2=0,接着任务A又要使用共享资源R1,即请求信号量S1,而S1此时的值为0,故任务A处于持续请求等待状态;操作系统调度到任务B继续执行,此时任务B还在占用共享资源R1,

温馨提示

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

评论

0/150

提交评论