您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 4 嵌入式操作系统原理
操作系统基本原理邹昕光哈尔滨工业大学自动化测控所联系电话:86413531-609E-mail:xgzou@dsp.hit.edu.cn任务多任务一个任务也可以称为一个进程。每个任务都是整个应用系统的一个部分。每个任务都赋予一定的优先级,有自己一套CPU寄存器和自己的栈空间。典型的每个任务都是一个无限循环,每个任务都存在某种状态下:休眠态、运行态、挂起态(等待某一个事件发生)和被中断态。任务多任务任务状态休眠态-该任务驻留在内存中,但并不被多任务内核所调度。就绪态-任务已经准备好,但由于该任务的优先级比正在运行的任务的优先级低,暂时不能运行。运行态-该任务掌握了CPU的控制权,正在运行中。挂起态-也称为等待事件态,指该任务正在等待某一个或一些事件的发生。被中断态-由于CPU开始处理中断请求,使该任务的执行被打断。任务状态内核内核负责为每个任务分配CPU时间。内核负责任务间通信。内核负责任务切换工作。负责任务调度,按照一定的策略,在就绪态的任务中选择一个任务执行。实时内核调度算法基于优先级调度,总是让处于就绪态的优先级最高的任务先运行。非占先式内核非占先式内核non-preemptive-内核要求每个任务自我放弃CPU的所有权。-中断可以使一个高优先级的任务由挂起状态变为就绪态,但中断服务以后控制权还是回到原来被中断的那个任务,直到该任务主动放弃CPU的使用权。-更高优先权的任务不能打断正在执行的较低优先权的任务,直到较低优先权任务主动放弃CPU的控制权。非占先式内核占先式内核占先式内核preemptive-最高优先级的任务一旦就绪,总能得到CPU的控制权。-高优先级的就绪任务可以打断正在执行的较低优先级的任务,进入执行态;被抢占的较低优先级任务进入就绪任务队列,等待下一次调度。-商业上销售的实时内核都是抢占式内核。占先式内核可重入性可重入性reentrancy-可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。-可重入型函数任何时候可以被中断,一段时间后又可以执行,而相应的数据不会丢失。-可重入型函数只使用局部变量,即变量保存在CPU寄存器中或堆栈中。可重入型函数不可重入型函数时间片轮转调度时间片轮转调度round-robinscheduling当两个或两个以上的任务具有同样的优先级,内核运行一个任务运行事先确定的一段时间,叫做时间额度(quantum),然后切换给另一个任务。满足下列条件时,把CPU控制权交给下一个就绪任务-当前任务无事可作。-当前任务的时间片还没有用完任务就结束了。-当前任务的时间片用完了。基于优先级调度根据任务的优先级和状态决定任务的调度。基于优先级抢占式调度。基于优先级非抢占式调度。任务优先级静态优先级-任务在执行过程中优先级不改变,各个任务的优先级在编译时就确定了。动态优先级-任务在执行过程中,优先级是可变的。优先级反转高优先级的任务在申请已经被低优先级任务占据的资源时,高优先级被迫进入等待态,如果有一个中优先级的任务一直在执行,则高优先级将无法执行。优先级反转问题实例优先级反转的解决方法优先级继承-拥有资源的低优先级任务被高优先级抢占。-高优先级任务开始申请被低优先级占据的资源。-此时,拥有该资源的低优先级任务的优先级上升到高于高优先级的任务。-拥有资源的任务得到运行机会,就有机会尽快释放资源。-释放资源,该任务回到原来的优先级。-高优先级任务得到运行机会,占有资源。信号量信号量semaphore-控制共享资源的使用权-标志某个事件发生-使两个任务的行为同步二进制信号量-信号只有两个值0和1计数式信号量-信号有一个取值范围,例如0-255信号量信号量的操作创建Create-初始化二进制或计数式信号量的信号值等待Wait-如果信号量值非0,则得到信号,信号量值减1给信号Signal-信号量值加1二进制信号量计数式信号量死锁死锁deadlock-指两个任务无限期地互相等待对方控制的资源。防止死锁的方法-先得到全部的资源再做下一步工作。-所有任务用同样的顺序去申请多个资源。-释放资源时使用相反的顺序。-定义任务等待资源的时间,如果一段时间内没有等到资源就产生超时,化解死锁。同步利用信号量进行同步事件标志应用于任务和多个事件同步的场合。独立型事件标志-任何等待的一个事件发生,则唤醒任务关联型事件标志-所有等待的事件同时发生,则唤醒任务事件标志消息邮箱消息邮箱messagemailbox-通过内核一个任务或一个中断服务程序可以把一则消息(一个指针)放到邮箱中。-通过内核一个或多个任务可以通过内核接收这则消息。-每个邮箱有相应的等待消息的任务列表,如果邮箱为空,则等待消息的任务将被挂起。-每个邮箱也应该有相应的发送消息的任务列表,如果邮箱满,则发送消息的任务将被挂起。消息队列消息队列messagequeue-消息队列实际上是邮箱阵列。-通过内核一个任务或一个中断服务程序可以把一则消息(一个指针)放到消息队列中。-通过内核一个或多个任务可以通过内核接收这则消息。-每个消息队列有相应的等待消息的任务列表,如果消息队列为空,则等待消息的任务将被挂起。-每个消息队列也应该有相应的发送消息的任务列表,如果消息队列满,则发送消息的任务将被挂起。中断中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被识别,CPU保存部分(或全部)上下文(context),即部分或全部寄存器的值,跳转到专门的中断服务子程序ISR,进行中断处理。处理完毕后,程序回到:-对于非占先式内核而言,程序回到被中断了的任务。-对于占先式内核而言,让进入就绪态的优先级最高的任务开始运行。中断处理中断处理流程-关闭中断-保存当前上下文-确定中断源-查中中断向量-打开中断-调用中断处理程序-恢复被中断的上下文-中断返回中断嵌套中断的性能指标中断延迟-中断关闭的时间长度。对于非占先式和占先式内核:中断延迟=关中断的最长时间+开始执行中断服务子程序的第一条指令的时间中断的性能指标中断响应-从中断发生到开始执行用户的中断服务子程序的时间。对于非占先式内核-中断响应时间=中断延迟+保存CPU内部寄存器的时间对于占先式内核-中断响应时间=中断延迟+保存CPU内部寄存器的时间+内核进入中断服务函数的执行时间中断的性能指标中断恢复时间-CPU返回到被中断了的程序代码所需要的时间。对于占先式内核-中断恢复时间=恢复CPU内部寄存器值的时间+执行中断返回指令的时间对于非占先式内核-中断恢复时间=判定是否有优先级更高的任务进入了就绪态+恢复那个优先级更高任务的CPU内部寄存器的时间+执行中断返回指令的时间非占先式内核中断的性能指标占先式内核中断的性能指标
本文标题:4 嵌入式操作系统原理
链接地址:https://www.777doc.com/doc-3956522 .html