原创 实时系统概念『原』

2007-12-12 09:31 2652 4 6 分类: MCU/ 嵌入式

这几天边看电影边整理的笔记。大家得捧场哈!以后会经常有的。


         首先我们的熟悉实时系统的概念,实时系统它分为软实时硬实时
实时系统它是指系统的目的是为了使各个任务尽快的执行,而不要求限定的某一个任务在多长时间内完成,也就是该系统超过规定时间对系统不会产生很大的影响,
系统依然可以运行。而硬实时系统则不仅要求任务执行无误,而且还要做到准时;也就是说在一到达规定的时间,任务必须完成,否则会给系统带来灾难性的后果。


         我以前写的程序很多是没有嵌系统的,所以它们称为/后台系统超循环系统。那么什么是前台,什么是后台呢?我们的程序中有个main函数,这个函数肯定是一个无限循环系统,在循环中调用相应的驱动函数完成相应的功能,这部分可以看成是后台行为一般的系统都是有中断发生的,那么中断服务处理程序可以看成是前台行为;固有这个说法,后台可以成为任务级,前台成为中断级这种前/后台系统有一个很大的缺点,就是任务级的响应时间不是固定的,因为它是循环中的一部分,所以取决于循环运行的时间,所以前/后台系统很容易跑飞。


         代码的临界段也称临界区,指处理时不可分割的代码;所以进入临界区之前必须关中断,临界区代码执行完后,必须马上开中断。


任务,在UCOS-ii实时系统中,一个任务其实就是一个线程,该任务可以认为CPU完全属于它自己。UCOS-ii中的任务拥有自己的堆栈和CPU寄存器,并且赋予一定的优先级,在UCOS-ii中,它可能处于睡眠、就绪、运行、等待、中断服务状态之一。1睡眠状态它是一个什么样的状态呢,它其实是指一个任务在内存中就占用一部分ROM,它没有被操作系统分配任务控制块,它和其他状态下的任务没有任何直接联系,也就是说不能被内核调度,就好比 我们去吃饭,正在路上2就绪状态它是指操作系统给它分配了任务控制块,已经在就绪列表中登记中,它此时不能运行是因为它的优先级不是最高的,就好比我们去吃饭时在那排队一样3运行状态 是指一个任务正在运行,应该好理解,就好比食堂工作人员在给我们打饭4等待状态就是一个任务由于一个的条件没有满足,比如说在等待一个信号量的到来,而被至于等待状态,就像我们在打饭时,如果工作人员还没有来,那你没办法,你就得等拉5中断服务状态就是在某个时刻突然因为一个中断到来,那么 这个任务就会马上被中断掉,从而处于中断服务状态,比如一个饿得受不了的人,如果抢你前面,本来该你打饭的,可是你看到他这个样子,不忍心,那么你就被中断了一会,中断结束后,中断掉的任务才会被继续运行,同样的你才能够打饭;呵呵,这个比喻好像损了点。


在操作系统中,内核提供的基本服务就是任务切换,它实际上可以说是寄存器内容的切换。自然任务切换是需要时间的,CPU寄存器越多,负荷也就越大。


    基于优先级的内核有两种:不可剥夺型和可剥夺型不可剥夺型内核它要求每个任务互相合作,也称为合作型内核每个任务不会被其它任务剥夺去,除非中断的到来,即便如此,当中断结束后,还是会回到原来被中断的程序,而不会切换到具有高优先级的任务中去,这样,高优先级的任务就不能够及时得到执行,所以它的实时性是比较差的。但是它有一个很重要的特点,就是它可以使用不可重入函数,因为每个任务必须执行完,才能释放CPU,这样它对其它任务调用不可重入函数没有影响;同理在大多数情况下它无须使用信号量来保护资源。


    对于可剥夺型内核,只要高优先级任务一就绪,那它就会被执行,而当前正在执行的任务就会被挂起正因为如此,对于系统的资源就不能像不可剥夺型那样去使用,而是在使用前必须检查是否可以使用,即互斥机制来保护临界资源,如果不用的话,那么如果低优先级在使用临界资源时,突然被高优先级把CPU给抢过去了,那么低优先级的临界资源就可能会被告优先级任务给破坏掉,所以可剥夺型内核是不能调用不可重入函数的,必须对共享资源通过互斥来访问。可剥夺型的优点是是系统的响应时间得到了优化,且是可知的


实时系统中,中断优先级反转这一问题是出现得最多的,这问题的本质其实也不能理解,就是低优先级的任务占有高优先级的任务所需要的资源,而使高优先级不得不等低优先级把资源释放才能执行,UCOS中一样也存在这问题。不过我们可以人为解决这问题,因为UCOS中可以动态的修改任务的优先级,那么我们可以通过优先级极限法实际上就是把低优先级的任务的优先级提高为0级;使该任务不会被其他任务所中断,直到该任务执行完共享资源的代码后再回到原来的优先级。其实还有一种方法叫优先级继承法它的含义就是把低优先级任务的优先级提高至与要用到该低优先级任务所占用的资源;这要求内核能够允许一个优先级可以对应于多个任务,同时支持时间片段轮度调度;显然UCOS是不支持它的。更多的请见嵌入式实时系统中的优先级反转问题


上面提到了互斥,就简要描述下互斥的条件;互斥我们一般在于共享资源打交道时经常用到,那么我们对这些共享资源要怎么才能做到合理利用而被破坏呢,那就要使当时内核的环境满足互斥条件:关中断、使用测试并置位指令(要求有相应的硬件)、禁止做任务切换、利用信号量。


信号量实际上是一种约束机制,熟悉操作系统应该都懂它,他有以下作用:1>控制共享资源的使用权『满足互斥机制』2>标志某事件的发生3>使2个任务的行为同步。信号量可是01的两个值也可以是0nn>2)的计数式的信号量;总之内核是时刻跟踪信号量的『这句话可要好好理解』。一般说信号量只能实施3种操作:初始化,也可以称是建立,此时要初始化信号量的初始值,记住是不能小于0的;等待信号量,这时等待信号量的任务一般处于挂起状态,等待的任务如果发现信号量大于0,信号量的值减1,然后继续执行,如果为0,该任务就挂起;然后就是发送信号量,发送时,信号量会增一,同时会进行任务调度。


死锁也称为抱死,指两个任务无限期的等待对方的资源;防止死锁的方法1>先得到全部资源,再做下一步的工作2>用同样的顺序申请多个资源3>释放资源是,使用相反的顺序。还有就是定义超时来化解死锁。


任务间的信息的传递有两个途径:全程变量和发消息给另一个任务。任务只能通过全程变量和中断服务子程序通信。


文章评论2条评论)

登录后参与讨论

用户1481494 2011-3-22 12:17

通俗易懂。楼主理解的深刻啊

用户95687 2009-5-9 15:34

能把枯燥的操作系统理论讲的这么通俗易懂!! 佩服佩服!!!!!!!!
相关推荐阅读
用户1242722 2008-10-19 20:27
累+无语【原】
       最近工作的主要内容是支持客户,和公版的软件编写,在支持客户中,头都大了,真害怕接到客户电话,因为他们反馈的问题真是千奇古怪,自己也在想我们这个软件的稳定性,想着想着越想越觉得无语,希望早...
用户1242722 2008-10-12 16:34
shell函数的使用【原】
2008年10月11日 星期六 21:11      这周开始在老大的本本上试了下我前面写的自动编译脚本,发现我./jiaoben_test时cygwin不识别我里面用到的source这个命令,呵呵,...
用户1242722 2008-10-12 16:33
写自动编译的脚本所遇问题【原】
2008年10月03日 星期五 19:11       好不容易有时间学习linux,今天在公司弄个脚本,让它自动对我们的工程文件编译,而不需要我们自己手动去输入命令,特别是宏开关,因为客户之多,宏开...
用户1242722 2008-10-12 16:32
linux中“男人”几个常用命令[原]
2008年09月21日 星期日 11:54今天早上一起来,肚子疼得很厉害,本来打算去公司的,于是找了这个借口待在宿舍。也趁着这个宝贵时间学习linux相关,刚刚发现在man中有几个我以前不晓得的几个常...
用户1242722 2008-10-12 16:22
累【原】
2008年09月21日 星期日 09:35        最近忙得不亦乐乎,中秋三天假都没有休息,忙着敢项目,到现在,脑袋一直处于高速运转中,幸亏没有发生交通事故,哈哈哈!好不容易有时间休息,发现自己...
用户1242722 2008-10-12 16:21
中秋快乐!【原】
2008年09月14日 星期日 13:04^_^,刚刚想起今天是个很特别的纪念日,^_^,四个月咯,继续努力,祝大家中秋快乐哦!...
我要评论
2
4
关闭 站长推荐上一条 /2 下一条