OS调度程序如何调度属于两个不同进程(任务)的线程?

时间:2012-06-01 07:28:56

标签: multithreading operating-system scheduling multitasking

就所有书籍而言,在任务/进程之间切换比在同一进程/任务的线程之间切换更昂贵。如果是这样,则线程感知OS的调度程序应该以这样的方式调度线程:相同进程/任务的线程应该彼此相邻地执行(分组)并且不与来自其他进程/任务的线程交织。

在我阅读有关操作系统的书籍时,所有书籍都停止说明线程切换比流程切换便宜。就是这样。没有书说明调度程序究竟是如何解决避免在不同任务的线程之间切换的问题。好像这样的问题不存在或对每个读者都是微不足道的。

我对这个问题的理解不正确吗?或者我错过了什么?为什么在“调度”一章中的每一本操作系统书中都没有涉及可能性能下降这么大的主题?我读错了书吗?

1 个答案:

答案 0 :(得分:1)

在我看来,这将是一个危险的优化,因为如果调度程序根据进程内存页面是否已经加载而偏好线程,则会发生两件事情:

  1. 较新的流程会被饿死。
  2. 它允许进程保持产生线程以便留在CPU上。
  3. 调度程序的主要优先事项是:

    1. I / O响应 - 即I / O绑定线程抢占CPU绑定线程。
    2. 公平 - 尽量确保饥饿有限。
    3. 低延迟 - 确保每个过程都能在合理的时间内完成。
    4. 很容易看出这3个条件与上述优化相冲突。