零星事件调度策略
发布时间:2008/5/27 0:00:00 访问次数:582
    
    
    零星发生的事件是困扰很多实时系统的一大难题,正确管理这些非周期性事件有助于实现稳定可靠的实时系统设计。本文介绍了posix零星调度策略,利用该策略可使系统在过载时满足关键线程的时限要求,保障系统的可靠性。
    大多数实时操作系统均采用基于优先级的占先调度器以使多线程共享单个cpu。这种调度器尤其适用于那些完全由固定周期性线程组成的系统,这些系统都只具有有限的外部激励。然而,实际应用中软件系统通常具有无限的外部激励,因此需要进行时变运算。在这些情况下,事件可能使那些由典型rtos调度器构建的系统陷入过载,而无法满足关键时限时间(deadline)要求。
    
    理论与实际的冲突
    
    
    
    在我们早期的项目中,设计组历经数月才定义出数字交换机系统控制器的软件架构。由于通信交换机必须满足严格的时间要求,因此我们选择了据称能很好地满足实时应用的操作系统。数月之后,产品质量(qa)部门的工程师开始报告出现间歇的系统死锁。在这些死锁期间,用户接口不响应键盘操作,而表征处理器工作状态的led则一直保持为闪亮状态。这时,固件驱动指示灯仍然闪烁,好像没有产生任何故障。
    
    由于不仅处理器的led指示内核运行状态连续,而且具有最高优先级的心跳中断服务程序也正常运行,因此可以推断死锁产生的原因是在无限循环中产生中等优先级中断服务程序。由于故障出现是间歇的,因此找到故障根源非常困难。最初,这种问题只在一个系统中出现,但随后在另一系统也出现同样的问题。通过检查,最后在电路板上发现了一条短路线,这条线使闪存的电平感应中断请求信号电平升高。尽管系统可执行高优先级的心跳线程,但无法对低优先级的键盘i/o信号进行响应,因为系统需要不断地处理中等优先级的闪存控制器中断线程。
    
    在过去几年中,我们碰到过类似的死锁:如大量的数据包使网络接口控制器过载、大量突发的输入输出字符使串行控制器过载、scsi总线上连续不断的数据使磁盘控制器过载。我们开始感到困惑:为什么外部事件能够如此轻易地影响到系统呢?事实上,实际应用环境通常不符合我们简化的设计假设:因为线程并非严格周期性,我们很难构造解决抖动和过载的系统,实时操作系统只是解决这些问题的方案开始部分。
    
    优先级处理
    
    静态优先级占先调度器要求设计工程师为每个线程分配唯一的优先级,这样当有多个线程就绪时,调度器知道运行哪个线程。确定特定线程优先级的常规方法通常有几种,而非常规方法还有很多。在这些方法中,考虑时间约束与线程优先级的方法远优于那些考虑主观测量(如线程重要性)与优先级的方法。
    
    
    
    时限时间单调(dm)和速率单调(rm)算法是两种最佳的优先级分配方法,这些方法为那些具有较短时限时间和周期的线程分配更高的优先级。这些方法的优点在于,如果能以任何静态优先级算法调度系统,那么也可以采用dm或rm算法调度系统。此外,如果这些优化算法不能有效地调度特定应用的线程,那么其它静态优先级分配方法也无能为力。
    
    尽管静态优先级占先调度机制不能调度所有系统,设计工程师通常仍会选用该方法,商用的rtos也提供静态优先级占先调度方法,因为该方法可提供比动态优先级调度方法更高的稳定性和可预测性。静态优先级占先调度器的实现还相对简单,且要求的操作系统开销最小。
    
    数字控制
    
    静态优先级占先调度尤其适用于数字控制系统,包括导航设备、家用电器、工业制造、化学处理和汽车应用。
    
    图1给出了一个简单的单输入/单输出(siso)控制系统框图。更为复杂的控制系统能以不同的速率管理多个设备,并采用多输入/多输出(mimo)控制器。
    
    利用标准的rtos,编程人员可以轻松地实现带有3个并行闭环控制线程的mimo控制器,这些
    
    
    零星发生的事件是困扰很多实时系统的一大难题,正确管理这些非周期性事件有助于实现稳定可靠的实时系统设计。本文介绍了posix零星调度策略,利用该策略可使系统在过载时满足关键线程的时限要求,保障系统的可靠性。
    大多数实时操作系统均采用基于优先级的占先调度器以使多线程共享单个cpu。这种调度器尤其适用于那些完全由固定周期性线程组成的系统,这些系统都只具有有限的外部激励。然而,实际应用中软件系统通常具有无限的外部激励,因此需要进行时变运算。在这些情况下,事件可能使那些由典型rtos调度器构建的系统陷入过载,而无法满足关键时限时间(deadline)要求。
    
    理论与实际的冲突
    
    
    
    在我们早期的项目中,设计组历经数月才定义出数字交换机系统控制器的软件架构。由于通信交换机必须满足严格的时间要求,因此我们选择了据称能很好地满足实时应用的操作系统。数月之后,产品质量(qa)部门的工程师开始报告出现间歇的系统死锁。在这些死锁期间,用户接口不响应键盘操作,而表征处理器工作状态的led则一直保持为闪亮状态。这时,固件驱动指示灯仍然闪烁,好像没有产生任何故障。
    
    由于不仅处理器的led指示内核运行状态连续,而且具有最高优先级的心跳中断服务程序也正常运行,因此可以推断死锁产生的原因是在无限循环中产生中等优先级中断服务程序。由于故障出现是间歇的,因此找到故障根源非常困难。最初,这种问题只在一个系统中出现,但随后在另一系统也出现同样的问题。通过检查,最后在电路板上发现了一条短路线,这条线使闪存的电平感应中断请求信号电平升高。尽管系统可执行高优先级的心跳线程,但无法对低优先级的键盘i/o信号进行响应,因为系统需要不断地处理中等优先级的闪存控制器中断线程。
    
    在过去几年中,我们碰到过类似的死锁:如大量的数据包使网络接口控制器过载、大量突发的输入输出字符使串行控制器过载、scsi总线上连续不断的数据使磁盘控制器过载。我们开始感到困惑:为什么外部事件能够如此轻易地影响到系统呢?事实上,实际应用环境通常不符合我们简化的设计假设:因为线程并非严格周期性,我们很难构造解决抖动和过载的系统,实时操作系统只是解决这些问题的方案开始部分。
    
    优先级处理
    
    静态优先级占先调度器要求设计工程师为每个线程分配唯一的优先级,这样当有多个线程就绪时,调度器知道运行哪个线程。确定特定线程优先级的常规方法通常有几种,而非常规方法还有很多。在这些方法中,考虑时间约束与线程优先级的方法远优于那些考虑主观测量(如线程重要性)与优先级的方法。
    
    
    
    时限时间单调(dm)和速率单调(rm)算法是两种最佳的优先级分配方法,这些方法为那些具有较短时限时间和周期的线程分配更高的优先级。这些方法的优点在于,如果能以任何静态优先级算法调度系统,那么也可以采用dm或rm算法调度系统。此外,如果这些优化算法不能有效地调度特定应用的线程,那么其它静态优先级分配方法也无能为力。
    
    尽管静态优先级占先调度机制不能调度所有系统,设计工程师通常仍会选用该方法,商用的rtos也提供静态优先级占先调度方法,因为该方法可提供比动态优先级调度方法更高的稳定性和可预测性。静态优先级占先调度器的实现还相对简单,且要求的操作系统开销最小。
    
    数字控制
    
    静态优先级占先调度尤其适用于数字控制系统,包括导航设备、家用电器、工业制造、化学处理和汽车应用。
    
    图1给出了一个简单的单输入/单输出(siso)控制系统框图。更为复杂的控制系统能以不同的速率管理多个设备,并采用多输入/多输出(mimo)控制器。
    
    利用标准的rtos,编程人员可以轻松地实现带有3个并行闭环控制线程的mimo控制器,这些
上一篇:基于DSP的数字助听器开拓
上一篇:CAB-2型汽车音响方案