Operating system 任务调度器

Operating system 任务调度器,operating-system,kernel,scheduling,Operating System,Kernel,Scheduling,与一些同事就实时任务的最佳调度策略进行了有趣的讨论,但并非每个人都对常见或有用的调度策略有很好的理解 对于你的答案,请选择一种策略,并详细讨论它,而不是提供一些关于几种策略的信息。如果你有东西要添加到其他人的描述中,并且内容简短,请添加评论而不是新的答案(如果内容长或有用,或者只是一个更好的描述,请使用答案) 策略是什么-描述一般情况(假设人们知道任务队列是什么、信号量、锁以及调度器本身之外的其他操作系统基础) 此策略针对什么进行了优化(任务延迟、效率、实时性、抖动、资源共享等) 它是实时的,

与一些同事就实时任务的最佳调度策略进行了有趣的讨论,但并非每个人都对常见或有用的调度策略有很好的理解

对于你的答案,请选择一种策略,并详细讨论它,而不是提供一些关于几种策略的信息。如果你有东西要添加到其他人的描述中,并且内容简短,请添加评论而不是新的答案(如果内容长或有用,或者只是一个更好的描述,请使用答案)

  • 策略是什么-描述一般情况(假设人们知道任务队列是什么、信号量、锁以及调度器本身之外的其他操作系统基础)
  • 此策略针对什么进行了优化(任务延迟、效率、实时性、抖动、资源共享等)
  • 它是实时的,还是可以实时生成
目前的战略:


-Adam

正如一篇题为Swaminathan和Chakrabarty的论文中所述,他们描述了在具有多处理器速度和功耗模式的低功耗(嵌入式)设备中实时任务调度的挑战。他们概述的调度算法(在测试中显示仅比最优解差约1%)有一种有趣的任务调度方式,他们称之为LEDF启发式

从报纸上看:

低能耗最早的截止日期 启发式,或简称LEDF,是一种 最早的知名品牌的延伸 截止日期第一(EDF)算法。这个 LEDF的操作如下:LEDF 维护所有已发布内容的列表 任务,称为“准备就绪列表”。什么时候 任务被释放,具有 选择最近的截止日期 执行。执行检查以查看 如果任务截止日期可以在 在较低电压下执行 (速度)。如果能在截止日期前完成, LEDF将较低的电压分配给 任务,任务开始执行。 在任务执行期间,其他 任务可能会进入系统。这些 假定任务已放置 自动进入“准备就绪列表”。 LEDF再次选择具有 最近的执行期限。作为 只要有任务等待完成 执行时,LEDF不保留pro- 或闲置。这个过程是重复的 直到完成所有任务 预定的

在伪代码中:

Repeat forever {
    if tasks are waiting to be scheduled {
        Sort deadlines in ascending order
        Schedule task with earliest deadline
        Check if deadline can be met at lower speed (voltage)
        If deadline can be met,
            schedule task to execute at lower voltage (speed)
        If deadline cannot be met,
            check if deadline can be met at higher speed (voltage)
        If deadline can be met,
            schedule task to execute at higher voltage (speed)
        If deadline cannot be met,
            task cannot be scheduled: run the exception handler!
    }
}

随着小型、低功耗设备变得越来越普遍,实时调度似乎是一个有趣且不断发展的问题。我认为这是一个我们将看到大量进一步研究的领域,我期待着跟上

一种常见的实时调度方案是使用基于优先级的抢占式多任务处理。
每个任务都分配了不同的优先级。
就绪队列上优先级最高的任务将是运行的任务。它将一直运行,直到它放弃CPU(即延迟、等待信号量等),或者更高优先级的任务准备好运行

此方案的优点是,系统设计器可以完全控制哪些任务将以何种优先级运行。调度算法也很简单,应该是确定性的

另一方面,低优先级任务可能缺少CPU。这表明存在设计问题