首页 > 解决方案 > 操作系统中的“调度延迟”和“上下文切换”有什么区别?

问题描述

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

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

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

标签: operating-system

解决方案


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

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

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


推荐阅读