立即注册 登录
独闷闷网 返回首页

又一个暑假的个人空间 http://dumenmen.com/?842 [收藏] [复制] [分享] [RSS]

日志

UCOS笔记

已有 874 次阅读2014-11-20 09:23 |个人分类:学习笔记| UCOS

2.1 代码的临界段
      代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中
断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中
断。 
2.2 资源
    任何为任务所占用的实体都可称为资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资
源也可以是一个变量,一个结构或一个数组等。
2.3 共享资源
    可以被一个以上任务使用的资源叫做共享资源。为了防止数据被破坏,每个任务在与共享资源打交道
时,必须独占该资源。这叫做互斥(mutual exclusion)。在2.18节“互斥”中,将对技术上如何保证互斥条
件做进一步讨论
2.4 多任务
       多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。CPU只有一个,轮番服
务于一系列任务中的某一个。多任务运行很像前后台系统,但后台任务有多个。多任务运行使CPU的利用
率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复
杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。
2.5 任务
一个任务,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全只属该程序自己。实时应
用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋
予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间(如图2.2所示)。
2.6 任务切换(Context Switch or Task Switch)
       Context Switch 在有的书中翻译成上下文切换,实际含义是任务切换,或CPU寄存器内容切换。当多
任务内核决定运行另外的任务时,它保存正在运行任务的当前状态(Context),即CPU寄存器中的全部内
容。这些内容保存在任务的当前状况保存区(Task’s Context Storage area),也就是任务自己的栈区之
中。(见图2.2)。入栈工作完成以后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装
入CPU的寄存器,并开始下一个任务的运行。这个过程叫做任务切换。任务切换过程增加了应用程序的额
外负荷。CPU的内部寄存器越多,额外负荷就越重。做任务切换所需要的时间取决于CPU有多少寄存器要入
栈。实时内核的性能不应该以每秒钟能做多少次任务切换来评价。
2.7 内核(Kernel)
     多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通
讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内
核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空
间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,
这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。
单片机一般不能运行实时内核,因为单片机的RAM很有限。通过提供必不可缺少的系统服务,诸如信
号量管理,邮箱、消息队列、延时等,实时内核使得CPU的利用更为有效。一旦读者用实时内核做过系统
设计,将决不再想返回到前后台系统。
2.8 调度(Scheduler)
      调度(Scheduler),英文还有一词叫dispatcher,也是调度的意思。这是内核的主要职责之一,就是
要决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被
赋予一定的优先级。基于优先级的调度法指,CPU总是让处在就绪态的优先级最高的任务先运行。然而,
究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是不可
剥夺型的还是可剥夺型内核。
2.9 不可剥夺型内核(Non-Preemptive Kernel)
不可剥夺型内核要求每个任务自我放弃CPU的所有权。不可剥夺型调度法也称作合作型多任务,各个
任务彼此合作共享一个CPU。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂
起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃
CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。
不可剥夺型内核的一个优点是响应中断快。在讨论中断响应时会进一步涉及这个问题。在任务级,不
可剥夺型内核允许使用不可重入函数。函数的可重入性以后会讨论。每个任务都可以调用非可重入性函
数,而不必担心其它任务可能正在使用该函数,从而造成数据的破坏。因为每个任务要运行到完成时才释
放CPU的控制权。当然该不可重入型函数本身不得有放弃CPU控制权的企图。
使用不可剥夺型内核时,任务级响应时间比前后台系统快得多。此时的任务级响应时间取决于最长的
任务执行时间。
       不可剥夺型内核的另一个优点是,几乎不需要使用信号量保护共享数据。运行着的任务占有CPU,而
不必担心被别的任务抢占。但这也不是绝对的,在某种情况下,信号量还是用得着的。处理共享I/O设备
时仍需要使用互斥型信号量。例如,在打印机的使用上,仍需要满足互斥条件。图2.4示意不可剥夺型内
核的运行情况,任务在运行过程之中,[L2.4(1)]中断来了,如果此时中断是开着的,CPU由中断向量
[F2.4(2)]进入中断服务子程序,中断服务子程序做事件处理[F2.4(3)],使一个有更高级的任务进入就绪
态。中断服务完成以后,中断返回指令[F2.4(4)], 使CPU回到原来被中断的任务,接着执行该任务的代码
[F2.4(5)]直到该任务完成,调用一个内核服务函数以释放CPU控制权,由内核将控制权交给那个优先级更
高的、并已进入就绪态的任务[F2.4(6)],这个优先级更高的任务才开始处理中断服务程序标识的事件
[F2.4(7)]。
         不可剥夺型内核的最大缺陷在于其响应时间。高优先级的任务已经进入就绪态,但还不能运行,要
等,也许要等很长时间,直到当前运行着的任务释放CPU。与前后系统一样,
不可剥夺型内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU的控制
权,完全取决于应用程序什么时候释放CPU。
         总之,不可剥夺型内核允许每个任务运行,直到该任务自愿放弃CPU的控制权。中断可以打入运行着
的任务。中断服务完成以后将CPU控制权还给被中断了的任务。任务级响应时间要大大好于前后系统,但
仍是不可知的,商业软件几乎没有不可剥夺型内核。
2.10 可剥夺型内核
      当系统响应时间很重要时,要使用可剥夺型内核。因此,μC/OS-Ⅱ以及绝大多数商业上销售的实时内
核都是可剥夺型内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个
比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级
的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成
时,中断了的任务被挂起,优先级高的那个任务开始运行
使用可剥夺型内核,最高优先级的任务什么时候可以执行,可以得到CPU的控制权是可知的。使用可
剥夺型内核使得任务级响应时间得以最优化。
使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥
条件,这一点可以用互斥型信号量来实现。如果调用不可重入型函数时,低优先级的任务CPU的使用权被
高优先级任务剥夺,不可重入型函数中的数据有可能被破坏。综上所述,可剥夺型内核总是让就绪态的高
优先级的任务先运行,中断服务程序可以抢占CPU,到中断服务完成时,内核让此时优先级最高的任务运
行(不一定是那个被中断了的任务)。任务级系统响应时间得到了最优化,且是可知的。μC/OS-Ⅱ属于可
剥夺型内核。)

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-5-18 22:59 , Processed in 0.119672 second(s), 21 queries .

返回顶部