注意:以下大部分知识源自邵贝贝老师以及任哲老师的书,本人只是加上个人理解后作为学习笔记使用,商业用途请联系原作者。
1、前后台系统
前台:中断服务程序处理异常事件;所以前台可以叫做中断级;(可以理解为处理特殊军情的军机处)
后台:无线循环的应用程序,循环中调用相应的函数完成相应的操作;所以后台也可称为任务级;(处理日常事务的内阁)
2、代码的临界段
也叫临界区,指处理时不可分割的代码。在该代码执行的时候,它是不允许任何中断插入打断的;
所以为了确保临界段不被打扰,执行前通常关中断,执行完之后通常开中断;
3、资源与共享资源
资源就是被任务所占用的实体,比如变量数组结构体,又或是打印机、键盘显示器等设备;
共享资源就是可以被两个或以上的任务所使用的实体。然而,虽说是共享,就像是公**立卫生间
一样,任务在使用它时是必须独占它的,为了防止数据被破坏。这个就叫互斥!(以后将会多次提到,共享资源的前提是必须满足信号量互斥!这点谨记哦)
4、任务切换
当多任务内核决定运行另外的程序时,就会把当前正在运行的任务的当前状态(寄存器中的全部内容),保存在自己任务的栈区中;然后再将下一个要运行的任务的当前状况从该任务的栈中装入CPU的寄存器,开始运行。这个过程叫做任务切换。
5、内核
Kernel 内核在多任务系统中负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务间的通信。
内核本身的代码会增加ROM的用量,本身的数据结构会增加RAM的用量。然而, 这并不是内存的最大占用。每一个任务都要有自己的堆栈空间,这部分占用内存相当多。所以,一般单片机不能运行实时内核,因为其RAM有限。除非扩展。
基于优先级调度的内核有两种:可剥夺型和不可剥夺型。
(1)不可剥夺型内核: 最鲜明的特点是用户不可强制剥夺某一个任务对CPU的使用权,而只能要求每个任务主动放弃CPU的使用权。异步事件还是由中断服务程序来处理,但是CPU是通过各个任务彼此合作共享的,好比是政治中的内阁一样,通过各个大臣共同协商来决定一件事,然后突发事件比如说倭寇入侵,那么就直接交给军机处(中断服务程序)了。中断服务后,使用权还是回到被中断前的那个任务,继续执行,直到任务执行完毕释放CPU为止。
不可剥夺性内核有两个优点:
①第 一个就是他有一个很不错的救火消防员--响应中断速度快;
②第二个就是无须请额外的保镖(信号量)来保护家中那些共享资源,因为运行着的任务就是独立地占有着CPU,别的任务是不敢过来抢夺的,为啥,因为我就是不可剥夺型内核啊,敢造反不成!!!O(∩_∩)O
诚然,不可剥夺型内核的缺点还是有的,而且有得很明显——任务响应时间慢。那就是你再有特权,背景比我深,本事比我强,优先级比我高,那也不行,就绪后还得在我使用完CPU后才能给你,你还不能抢。所以,有时候,会把你搞得很委屈,因为也许你要等我很久。。很久。。。
(2)可剥夺型内核
必须指出一点就是:当你的系统响应时间很重要时,那就不要使用不可剥夺性内核了,instead,你要使用可剥夺型内核,事实上,很多商业实时内核,包括uc/os都是可剥夺型内核哦!!这下子就是讲究谁的权力更大的时候了、
可剥夺型内核的世界里,规矩很简单——谁的优先级最高,一旦就绪,我总会给你CPU的使用权的,而不必等。比如说A在使用CPU,然后异常中断B来了,于是A暂停,去处理B,在处理B时,比A更高优先级的任务C来了,嗯,处理完B,注意,请注意,这不是演习(哈哈,爱情公寓、、)这里我的理解是哪怕是C的优先级比B还高,应该也是要等中断B执行完毕后再去执行C的,而A?不好意思,继续等着。谁叫你优先级低。。。
可剥夺型内核的优点是任务级系统的响应时间得到了最优化,而且是可知的(因为优先级就是用户自己给任务设定的。所以时间也可以自己推算)
6、可重入函数
可重入,顾名思义,当然是可以随时被中断打断,可以被一个以上的任务所调用,而不必担心函数中的数据被破坏掉。它会自动地将变量和数据保存在CPU寄存器或者堆栈中。
比如说我们对字符串的操作中有个函数就是字符串复制:strcpy 就是个可重入函数。
谁是可重入函数,谁是不可重入函数,不是我们自己定义的,UC/OS开发人已经定义好,我们会区分使用即可。
7、时间片轮番调度法
当2个或者2个以上的任务具有相同的优先级的时候,内核允许一个任务运行事先确定的一段时间(称为时间额度),然后切换给另外一个任务。这个过程就叫做“时间片轮番调度法”。
注意的是:
(1)UC/OS-II不支持时间片轮番调度法,所以用户在最多的256个优先级里必须给任务设定不同的优先级;
(2)最新发布的UC/OS-III不仅任务和优先级无数目限制,而且支持了时间片轮番调度。
文章评论(0条评论)
登录后参与讨论