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

Isl*_*san 5 operating-system

我目前正在从 Silberschatz 的书中学习操作系统,并遇到了“调度延迟”的概念。书中是这样定义的:

调度程序停止一个进程并启动另一个进程所需的时间称为调度延迟。

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

Bre*_*dan 4

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

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

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