操作系统中的抢占式和非抢占式调度
处理器调度 (要么 CPU调度 )根据诸如的调度模型,确定将哪些进程分配给CPU并从CPU中删除 先发制人 和 非抢先式调度 (也称为 合作调度).
较旧的系统可以在简单的独立模式下运行,但随着对响应灵活的系统以及虚拟化的需求不断增加,有效管理多处理可以快速响应所有任务处理请求。
调度单元通常被称为a 任务 并且在任何需要时运行和管理这些任务是调度程序的工作;调度程序根据使用的调度模型选择要删除的任务并分配给CPU进行处理。
调度程序如何知道哪些任务是优先级?
调度程序需要运行公平有效的选择过程,同时考虑变量,动态处理请求以及充分利用CPU周期。
在处理过程中,任务可以处于两种状态:
- 在一个 CPU Burst CPU执行计算以处理任务的位置(CPU突发的周期因任务而异,程序编程为程序)。
- 在一个 输入/输出(I / O)突发 等待从系统接收或发送数据。
当CPU空闲时,调度程序将读取 准备好队列 ,并选择要运行的下一个任务。然后,它是 调度员 这给了CPU的选定任务控制,所以它需要快!调度员占用的任何时间都被称为 调度延迟.
有不同的结构和自定义参数来定义 准备好队列 ,以及几种可用于管理调度过程复杂性的方法。
通常,它关于优化和最大化CPU利用率,吞吐量等。
调度程序必须在以下某个阶段做出决定:
- 当任务从a更改时 运行 到了 等待国 (例如,在I / O请求期间等待)。
- 任务更改时 运行 至 准备 (例如响应中断)。
- 任务更改时 等候 至 准备 (例如,I / O请求已完成)。
- 当。。。的时候 任务
如果发生阶段1或阶段4以确保CPU的完全利用,则必须选择新任务,并且在阶段2和阶段3中,任务可以继续运行或选择新任务。
在了解了如何处理任务之后,让我们看看两个处理CPU中断的调度模型。
两者都具有与任务,任务状态,队列和优先级(静态或动态)类似的功能:
- 非抢先式调度 是一个任务运行,直到它停止(自愿),或完成。 Windows®在Windows 3.x之前进行了非抢占式调度,之后从Windows 95更改为Preemptive。
- 抢先式调度 是一个CPU中断强制挂起任务的地方,与非抢占式任务不同,任务一直运行直到它释放CPU的控制权。
非抢先式调度
非抢先系统中的任务将一直运行直到完成。
然后,调度程序检查所有任务的状态,并使用a调度下一个最高优先级的任务 准备 州。
使用非抢占式调度,一旦任务将其分配给CPU,即使短任务必须等待更长的任务完成,也无法将其删除。
跨所有任务的调度管理是“公平的”,并且响应时间是可预测的,因为高优先级任务不能在队列中进一步阻塞等待任务。
调度程序确保每个任务获得其CPU的份额,避免任何任何延迟。分配给CPU的“时间量”可能不一定相等,因为它取决于任务完成所需的时间。
抢先式调度
此调度模型允许中断任务 - 与具有“运行到完成”方法的非抢先式调度相反。
可以从外部调用启动的中断调用Scheduler来暂停正在运行的任务来管理另一个更高优先级的任务 - 因此可以抢占CPU的控制权。
a中最高优先级的任务 准备 执行状态,允许快速响应实时事件。
抢占式调度的一些缺点涉及在使用中断时增加资源开销,并且两个任务共享数据时可能发生问题,因为在更新共享数据结构时可能会中断,并且可能会对数据完整性产生负面影响。
另一方面,能够暂停任务以管理可能至关重要的另一个任务是切实可行的。
综上所述
可以定义不同策略中的许多差异和依赖关系,例如使用a “循环政策[i]” 其中每个任务(具有相同的优先级)运行一次,然后放在队列的末尾,用于下一个周期。
其他政策包括 先入先出, 最短工作,首先, 最短工作,下一步, 最短的剩余时间等
对历史数据的分析可以提供有关方面的信息,例如新任务到达的速率,CPU和I / O突发等,因此概率分布可以计算任务等待时间的特征,从而为管理员提供相关数据来定义调度模型。