2009-9-23实时实时LinuxLinux的昨天、今天、明天的昨天、今天、明天22009-9-23版权版权}华清远见嵌入式培训中心版权所有;}未经华清远见明确许可,不能为任何目的以任何形式复制或传播此文档的任何部分;}本文档包含的信息如有更改,恕不另行通知;}保留所有权利。32009-9-23知识点知识点}}实时概念实时概念}}昨天昨天}}今天今天}}明天明天}}各种实时各种实时LinuxLinux简介简介42009-9-23什么是实时系统}}实时实时就是一个特定任务的执行时间必须是确定的,可预测的,并且在任何情况就是一个特定任务的执行时间必须是确定的,可预测的,并且在任何情况下都能保证任务的时限(最大执行时间限制)。实时分软实时和硬实时下都能保证任务的时限(最大执行时间限制)。实时分软实时和硬实时。。}}软实时软实时就是对任务执行时限的要求不那么严苛,即使在一些情况下不能满足时限就是对任务执行时限的要求不那么严苛,即使在一些情况下不能满足时限要求,也不会对系统本身产生致命影响,例如,媒体播放系统,手机要求,也不会对系统本身产生致命影响,例如,媒体播放系统,手机}}硬实时硬实时就是对任务的执行时限的要求非常严格,无论在什么情况下,任务的执行就是对任务的执行时限的要求非常严格,无论在什么情况下,任务的执行实现必须得到绝对保证,否则将产生灾难性后果实现必须得到绝对保证,否则将产生灾难性后果,如汽车控制系统,飞,如汽车控制系统,飞行导航行导航62009-9-23关键技术指标}}中断延迟中断延迟中断延迟就是从一个外部事件发生到相应的中断处理函数的第一条指令开中断延迟就是从一个外部事件发生到相应的中断处理函数的第一条指令开始执行所需要的时间。很多实时任务是靠中断驱动的,而且中断事件必须始执行所需要的时间。很多实时任务是靠中断驱动的,而且中断事件必须在限定的时限内处理,否则将产生灾难性后果,因此中断延迟对于实时系在限定的时限内处理,否则将产生灾难性后果,因此中断延迟对于实时系统来说,是一个非常重要的指标。统来说,是一个非常重要的指标。}}抢占延迟抢占延迟有时也称调度延迟,抢占延迟就是从一个外部事件发生到相应的处理该事有时也称调度延迟,抢占延迟就是从一个外部事件发生到相应的处理该事件的任务的第一条命令开始执行的时间。大多数实时系统都是处理一些周件的任务的第一条命令开始执行的时间。大多数实时系统都是处理一些周期性的或非周期性的重复事件,事件产生的频度就确定了任务的执行时限期性的或非周期性的重复事件,事件产生的频度就确定了任务的执行时限,因此每次事件发生时,相应的处理任务必须及时响应处理,否则将无法,因此每次事件发生时,相应的处理任务必须及时响应处理,否则将无法满足时限。抢占延迟就反映了系统的响应及时程度。满足时限。抢占延迟就反映了系统的响应及时程度。72009-9-23其他指标}}强负载下的稳定性强负载下的稳定性}}开发工具开发工具}}可移植性可移植性}}可裁剪性可裁剪性}}支持的硬件平台支持的硬件平台}}实时应用程序实时应用程序}}实时实时UIUI://昨天直接使用直接使用LinuxLinux标准内核,缺少优化或者自己随意裁剪,可移标准内核,缺少优化或者自己随意裁剪,可移植性差,应用程序不丰富,不标准化植性差,应用程序不丰富,不标准化}}内核不可抢占内核不可抢占在在Linux2.4Linux2.4和以前的版本,内核是不可抢占的,也就是说,和以前的版本,内核是不可抢占的,也就是说,如果当前任务运行在内核态,即使当前有更紧急的任务需要如果当前任务运行在内核态,即使当前有更紧急的任务需要运行,当前任务也不能被抢占。因此那个紧急任务必须等到运行,当前任务也不能被抢占。因此那个紧急任务必须等到当前任务执行完内核态的操作返回用户态后或当前任务因需当前任务执行完内核态的操作返回用户态后或当前任务因需要等待某些条件满足而主动让出要等待某些条件满足而主动让出CPUCPU才能被考虑执行,这很才能被考虑执行,这很明显严重影响抢占延迟。明显严重影响抢占延迟。}}中断关闭中断关闭LinuxLinux在一些同步操作中使用了中断关闭指令,中断关闭将在一些同步操作中使用了中断关闭指令,中断关闭将增大中断延迟,降低系统的实时性。增大中断延迟,降低系统的实时性。92009-9-23}}自旋锁(自旋锁(spinlockspinlock))自旋锁是在可抢占内核和自旋锁是在可抢占内核和SMPSMP情况下对共享资源的一种同步机情况下对共享资源的一种同步机制,一般地一个任务对共享资源的访问是非常短暂的,如果两制,一般地一个任务对共享资源的访问是非常短暂的,如果两个任务竞争一个共享的资源时,没有得到资源的任务将自旋以个任务竞争一个共享的资源时,没有得到资源的任务将自旋以等待另一个任务使用完该共享资源。这种锁机制是非常高效的等待另一个任务使用完该共享资源。这种锁机制是非常高效的,但是在保持自旋锁期间将失效抢占,这意味着抢占延迟将增,但是在保持自旋锁期间将失效抢占,这意味着抢占延迟将增加。加。}}中断总是最高优先级的中断总是最高优先级的在在LinuxLinux中,中断(包括软中断)是最高优先级的,不论在任何中,中断(包括软中断)是最高优先级的,不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理函时刻,只要产生中断事件,内核将立即执行相应的中断处理函数以及软中断,等到所有挂起的中断和软中断处理完毕有才执数以及软中断,等到所有挂起的中断和软中断处理完毕有才执行正常的任务。因此在标准的行正常的任务。因此在标准的LinuxLinux系统上,实时任务根本不可系统上,实时任务根本不可能得到实时性保证。能得到实时性保证。昨天102009-9-23昨天}}调度算法和调度点调度算法和调度点在在Linux2.4Linux2.4和以前的版本,调度器的时间复杂度是和以前的版本,调度器的时间复杂度是O(nO(n))的的,而且在,而且在SMPSMP的情况下性能低,因为所有的的情况下性能低,因为所有的CPUCPU共享一个共享一个任务链表,任何时刻只能有一个调度器运行。因此,抢占任务链表,任何时刻只能有一个调度器运行。因此,抢占延迟很大程度上以来于当前系统的任务数,具有非常大的延迟很大程度上以来于当前系统的任务数,具有非常大的不确定性和不可预测性。不确定性和不可预测性。}}LinuxLinux虚拟内存的可裁剪性,虚拟内存的可裁剪性,如如uCLinuxuCLinux112009-9-23今天内核大幅优化,支持硬实时,出现为实时系统定制的图内核大幅优化,支持硬实时,出现为实时系统定制的图形界面及应用包形界面及应用包}}LinuxLinux支持内核可抢占模式支持内核可抢占模式在在Linux2.6Linux2.6中,内核已经可以抢占,因而实时性得到了中,内核已经可以抢占,因而实时性得到了加强。但是内核中仍有大量的不可抢占区域,加强。但是内核中仍有大量的不可抢占区域,如由自旋如由自旋锁锁((spinlockspinlock)保护的临界区,以及一些显式使用)保护的临界区,以及一些显式使用preempt_disablepreempt_disable失效抢占的临界区。失效抢占的临界区。}}LinuxLinux增强中断下半部分增强中断下半部分tasklettasklet,,workqueueworkqueue增强对多处理器的支持,中断线程化,减少对实时任务增强对多处理器的支持,中断线程化,减少对实时任务的延迟的延迟122009-9-23今天}}LinuxLinux采用采用O(1)O(1)的调度算法的调度算法在在2.62.6内核中引入的内核中引入的O(1)O(1)调度器很好地解决了这些问题。调度器很好地解决了这些问题。此外,即使内核是可抢占的,也不是在任何地方可以发此外,即使内核是可抢占的,也不是在任何地方可以发生调度,例如在中断上下文,一个中断处理函数可能唤生调度,例如在中断上下文,一个中断处理函数可能唤醒了某一高优先级进程,但是该进程并不能立即运行,醒了某一高优先级进程,但是该进程并不能立即运行,因为在中断上下文不能发生调度,中断处理完了之后内因为在中断上下文不能发生调度,中断处理完了之后内核还要执行挂起的软中断,等它们处理完之后才有机会核还要执行挂起的软中断,等它们处理完之后才有机会调度刚才唤醒的进程。在标准调度刚才唤醒的进程。在标准LinuxLinux内核中,调度点(内核中,调度点(有意安排的执行任务调度的点)并不多,对有意安排的执行任务调度的点)并不多,对2.42.4和和2.62.6内内核测试的结果表明,缺乏调度点是影响核测试的结果表明,缺乏调度点是影响LinuxLinux实时性的实时性的一个因素。一个因素。132009-9-23今天}}WindRiverWindRiverLinuxLinux}}RTRT--Linux/RTAILinux/RTAI}}MontavistaMontavistaLinuxLinux}}OtopiaOtopia((基于基于QT)QT)}}MaemoMaemo((基于基于GTK,NokiatableOS,N800)GTK,NokiatableOS,N800)142009-9-23明天内核优化几近完善,硬件加速逐渐普及,应用开发包越来越内核优化几近完善,硬件加速逐渐普及,应用开发包越来越丰富,出现行业定制模板,标准接口,良好的开发环境丰富,出现行业定制模板,标准接口,良好的开发环境}}基于基于3D3D的的UI:ClutterUI:Clutter}}GLXGLX--XGLXGL}}标准接口标准接口}}近近VisualstudioVisualstudio的友好开发环境的友好开发环境}}AndroidAndroid}}IntelIntelMoblinMoblin152009-9-23}}快速创建生动多样的可移植的用户图形界面的工具快速创建生动多样的可移植的用户图形界面的工具基于基于OpenGLOpenGL或者或者openGLESopenGLES,,创建了一套控件及创建了一套控件及APIAPI}}明天172009-9-23}}XglXgl是一个是一个XserverXserver,借由,借由OpenGLOpenGL技术充分发挥了新一代技术充分发挥了新一代显卡优异的显卡优异的3D3D立体画面表现能力;利用了立体画面表现能力;利用了聚合视窗管理器聚合视窗管理器的帮助(如的帮助(如CompizCompiz或或BerylBeryl)对所有使用)对所有使用XX、、OpenGLOpenGL和和XVideoXVideo所制作的应用和图形效果提供了所制作的应用和图形效果提供了硬件加速硬件加速的支援的支援}}能表现出包含调整视窗透明度、可旋转的能表现出包含调整视窗透明度、可旋转的3D3D桌面、果冻效桌面、果冻效