操作系统中的“调度延迟”和“上下文切换”之间有什么区别?

时间:2018-10-19 17:19:32

标签: operating-system

我目前正在研究Silberschatz所著的操作系统,并遇到了“调度延迟”概念。这本书对它的定义如下:

  

调度程序停止一个进程和   开始另一次运行称为调度延迟。

这不是“上下文切换”的相同定义吗?这两个术语之间有什么区别还是可以互换?

2 个答案:

答案 0 :(得分:2)

让我们尝试一个“有点现实”的场景,并假设一个任务以前使用read()从管道中获取数据,但是当时没有数据,因此该任务被阻塞了;然后某物将数据写入管道,导致任务再次被解除阻止。在这种情况下:

  • 调度程序将任务从“先前的正在运行的内核代码任务”切换到“已被阻止的正在运行的内核代码任务”。这可能需要40纳秒。
  • 内核(现在在无阻塞任务的上下文中运行)将数据复制到原始read()调用提供的缓冲区中,并安排read()调用应返回的参数(例如读取的字节数)。这可能还需要50纳秒。
  • 内核认为它无可奈何,因此又回到用户空间,又花了10纳秒。

这里,上下文切换时间为40纳秒,但是调度延迟(由本书的作者定义)将为100纳秒。

答案 1 :(得分:1)

“上下文切换”是一个过程。 “调度延迟”是一个延迟,也就是时间。