处理器调度(或CPU调度)根据诸如抢先式和非抢先式调度(也称为合作调度)之类的调度模型,确定将哪些进程分配给CPU或从中删除。

较早的系统可以在简单的独立模式下运行,但是随着对响应式,灵活系统以及虚拟化的需求不断增长,有效管理多重处理可对所有任务处理请求提供快速响应。

调度单元通常被称为任务,调度器的任务是在需要时运行和管理这些任务。调度程序会根据使用的调度模型选择要删除的任务并分配给CPU进行处理。

调度程序如何知道哪些任务是优先级?

调度程序需要运行一个公平,高效的选择过程,同时考虑变量,动态处理请求并充分利用CPU周期。

在处理任务时,任务可以处于两种状态:

  • 在CPU正在执行计算以处理任务的CPU突发中(CPU突发的时间因任务而异,并且因程序而异)。
  • 在输入/输出(I/O)突发中,等待从系统接收或发送数据。

当CPU空闲时,调度程序将读取Ready队列,并选择要运行的下一个任务。然后,由分派器提供对CPU的选定任务控制,因此它需要快速!分派器占用的任何时间都称为分派延迟。

有不同的结构和自定义参数来定义Ready队列,还有几种可用于管理调度过程复杂性的方法。

通常,它关于优化和最大化CPU利用率,吞吐量等。

调度程序必须在以下阶段之一做出决定:

  • 当任务从运行状态更改为等待状态时(例如,在I / O请求期间等待)。
  • 当任务从运行更改为就绪时(例如,响应中断)。
  • 当任务从等待更改为就绪时(例如,一个I / O请求已完成)。

如果发生第1或第4阶段以确保CPU的充分利用,则必须选择一个新的Task;在第2阶段和第3阶段,该任务可以继续运行或选择一个新任务。

在了解了任务的处理方式之后,我们来看两个处理CPU中断的调度模型。两者都具有与任务,任务状态,队列和优先级(静态或动态)相似的功能:

  • 非抢占式调度是指任务运行到(自愿)停止或完成为止。 Windows®在Windows 3.x之前具有非抢先式计划,此后从Windows 95更改为抢先式。
  • 抢占式调度是一种可以通过CPU中断强制挂起任务的方法,与非抢占式调度不同,非抢占式调度是在任务释放CPU的控制权之前运行。

非抢占式调度

非抢先系统中的任务将运行到完成。
然后,计划程序会检查所有任务的状态,并以就绪状态计划下一个优先级最高的任务。
使用非抢先式调度,一旦将任务分配给CPU,即使短任务不得不等待较长的任务完成,也无法将其取消。
所有任务之间的调度管理是“公平的”,响应时间是可预测的,因为高优先级任务无法将等待任务进一步推向队列。
计划程序可确保每个任务获得其CPU的份额,从而避免任何任务拖延。分配给CPU的“时间”不一定相等,这取决于任务完成所需的时间。

抢占式调度

与具有“运行完成”方法的非抢先式调度相比,此调度模型允许任务被中断。
可以从外部调用启动的中断会调用调度程序暂停正在运行的任务以管理另一个更高优先级的任务-因此可以抢占CPU的控制权。
执行处于“就绪”状态的最高优先级任务,从而可以快速响应实时事件。
抢占式调度的一些弊端涉及使用中断时资源的开销增加,并且两个任务共享数据可能会发生问题,因为一个任务可能会在更新共享数据结构时被中断,并可能对数据完整性产生负面影响。
另一方面,能够暂停一项任务以管理另一个可能很关键的任务是很实际的。

总结

可以定义不同策略中的许多差异和依赖性,例如使用“循环策略”,其中每个任务(具有相同优先级)运行一次,然后在下一个循环中放入队列的末尾。

其他策略包括先进先出,最短作业优先,最短作业下一步,最短剩余时间等。

对历史数据的分析可以提供有关各个方面的信息,例如新任务的到达速度,CPU和I/O突发次数等,因此概率分布可以计算任务等待时间的特征,从而使管理员可以使用相关数据来定义调度模型。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:抢先式和非抢先式调度
本文链接:https://www.vsdiffer.com/vs/10783.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。