首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

linux任务响应模型&linux实时化&RTAI 3.2分析&Adeos分析(2)

linux任务响应模型&linux实时化&RTAI 3.2分析&Adeos分析(2)

1)当系统正在处理中断服务程序的时候,不允许进行抢占;中断服务程序是与进程无关的,异步的,它并不属于某个进程,没有进程属性(也就是说不存在进程上下文环境),所以并不满足抢占的条件(没有被抢占的对象)。
2)当系统正在处理下半部中断(Bottom Half)的时候,不允许进行抢占;这里的原因和第一种情况一样。
3)当系统运行的时候持有自旋锁、写锁或读锁的时候,不允许进行抢占;这些锁用于支持SMP,在SMP系统中,这些锁用来保护临界区,控制不同处理器上运行进程对临界区的互斥访问,也就是说,当内核持有这些锁的时候,它不希望被其它进程所抢占。
4)当内核在运行进程调度程序时,不允许进行抢占;这个是显而易见的,运行进程调度程序实际上本身就是抢占的一个过程,而且此时也没有任何进程的上下文环境。
所以,利用SMP技术实现可抢占内核要完成的主要工作包括修改中断返回代码、修改SMP的自旋锁机制、修改调度程序。
根据资料显示,虽然利用SMP技术实现可抢占内核对调度潜伏期的改善不如增加内核抢占点方法,但由于它易于维护、可移植性好,现在已经被加入了标准的Linux2.6版本。
4        实现细粒度定时器
Linux本身的定时器精度比较粗糙,一般为100HZ,也就是说,定时器的中断周期为10ms;但在实时系统中,对定时器的精度有更高的要求,例如,实时系统中的某个实时任务的运行周期必须小于2ms,在这种情况下,普通的Linux是无法满足要求的,因为当定时器频率为100HZ的时候,定时器中断每10ms才运行一次,才进行一次进程调度,所有周期任务的运行周期至少为10ms。
实现细粒度定时器的一种方法就是提高定时器的频率,这种方法最直接也最容易实现,但由于定时器的频率提高了,定时器的中断服务程序的运行频率也提高了,系统花在任务处理上的时间就会减少,从而降低系统的性能。所以,这种方法有一定的局限性,必须找到一个降低系统性能和提高时钟精度的折衷点。
实现细粒度定时器的另一种方法就是使定时器运行在单触发模式(one-shot mode)。这与周期模式(periodicmode)运行的定时器不同,周期模式运行的定时器,只要对它进行一次初始化操作,以后定时器就会周期的产生中断,不再需要额外的对定时器进行编程操作;而当定时器运行于单触发模式下时,每当定时器产生一次中断后就不再运行,系统再根据当前任务对时间的要求计算出定时器下一次应该产生中断的时间间隔,然后再对定时器进行编程,使它能在系统要求的将来某一时刻产生中断。在单触发模式下,定时器的定时精度能达到微秒级。不过需要注意的是,由于每次中断后都要计算下一次中断的时间,而且还要对定时器进行编程,这两个操作会降低系统的性能。
具体在实时系统中使用哪种定时器方案,一般需要根据具体的应用而定,并不存在一种适用于所有实时应用的定时器方案。
5        优化进程调度
从前述对Linux任务响应模型的分析可知,任务响应时间的长短还与进程调度时间的长短有关,当减少进程调度时间时,也可以有效的加快任务的响应速度。目前,对进程调度的优化主要使用将实时进程和普通进程分开来调度的策略,这可以通过分级调度来实现,通过这样的方法,可以使实时进程的调度时间缩短,从而提高实时任务的响应速度。
6        实时双内核机制
前述的几种Linux内核的实时优化机制虽然可以明显的提高任务的响应速度,增强Linux的实时性,但都无法满足硬实时的要求。由于Linux内核本身的实现方式和复杂度,使得Linux本身始终不能适用于硬实时应用;但随着Linux的应用越来越广泛,对Linux满足硬实时应用的要求越来越强烈;在这种环境下,实时双内核机制开创了Linux支持硬实时应用的先河。在这种技术下,存在一个支持硬实时的微内核,它与Linux内核共同运行于硬件平台上,实时内核的优先级高于Linux内核,它负责处理系统的实时任务,而Linux则负责处理非实时任务,只有当实时内核不再有实时任务需要处理的时候,Linux内核才能得到运行的机会。
实时双内核机制把一个系统看作由两部分组成:实时部分和非实时部分,实时部分由实时微内核处理,非实时部分由Linux处理,它们之间可以通过管道或共享内存的方式进行通信。这种机制虽然在建立实时任务的时候有一套不同于Linux本身的编程接口,但由于它可以与Linux进行通信,从而可以将后续的大量处理工作交给Linux来完成。这样,既保证了实时任务的硬实时要求,也保留了Linux本身的应用编程环境,可以充分的利用Linux下丰富的应用。

实时化Linux发展趋势

从上文对实时化Linux的讨论可知,它的发展实际上有两个方面的驱动因素,一方面因素来自于Linux对提高实时响应的要求,另一方面来自于实时系统对复杂应用的要求(当然,同时还得保持系统的实时性)。
一方面,随着Linux的应用越来越广泛,对Linux本身也提出了更高的要求,其中,提高基于Linux操作系统的系统响应速度就是一个重要的方面,这种要求主要来自于基于Linux的多媒体应用和桌面应用,在这些情况下,如果系统的响应不够及时,就往往会降低用户对系统的满意程度。前面所述的增加内核抢占点、实现可抢占内核的提高任务响应速度的方法,都是由这方面的需求引起的。
另一方面,以前的实时系统都采用的是硬实时的微内核操作系统,这些实时操作系统的设计着眼于系统的实时性,而且系统的应用也相对单一,所以,它们天生就缺乏支持丰富的复杂应用的能力,而且系统本身的可扩展性也较差;而随着目前嵌入式技术的飞速发展,各种嵌入式设备不仅要求具有实时性,而且还要求要支持功能多样的各种应用(如网络、多媒体等),所以,就出现了前面所述的双内核机制的实时操作系统,将实时内核和Linux共同运行于同一个硬件平台之上,系统的任务被分为实时任务和非实时任务,这样,既满足了系统对实时性的要求,也能利用Linux丰富的应用满足系统对功能多样性的要求。
所以说,实时化Linux领域的发展,实际上是Linux领域发展和实时系统领域发展的必然结果,它们的关系如图2-2所示。

从图2-2可以看出,实时化Linux将来的一个重要的发展方向就是进一步融合Linux领域和实时系统领域对Linux的实时化改进技术。
另外,由于对Linux的实时化改进一般都涉及到与硬件相关的中断管理层(尤其是支持硬实时的双内核系统),与硬件平台的依赖性很强,所以,实时化Linux另一方面的工作集中在使其实时化改进能够应用于更多的硬件平台。
在构造实时系统的过程中,对实时操作系统的选择是非常重要的。而系统设计者一般选择实时系统所用的方法就是对其进行实时性评测,所以,如何完善实时化Linux的实时评测工具,也是实时化Linux领域需要解决的一个问题。
继承事业,薪火相传
返回列表