📜  测量上下文切换所花费的时间?

📅  最后修改于: 2021-09-27 14:41:32             🧑  作者: Mango

上下文切换是在两个进程之间花费的时间(即,使等待进程进入执行状态并将正在执行的进程发送到等待状态)。这发生在多任务处理中。操作系统必须将等待进程的状态信息带入内存,并保存当前运行进程的状态信息。

为了解决这个问题,我们想记录交换过程的第一条和最后一条指令的时间戳。上下文切换时间是两个进程之间的差异。

举个例子:假设只有两个进程,P1 和 P2。
P1 正在执行,P2 正在等待执行。在某些时候,操作系统必须交换 P1 和 P2,让我们假设它发生在 P1 的第 n 条指令处。如果 t(x, k) 表示进程 x 的第 k 条指令的时间戳(以微秒为单位),则上下文切换将采用 t(2, 1) – t(1, n)。

另一个问题是交换由操作系统的调度算法控制,并且可能有许多内核级线程也在进行上下文切换。其他进程可能会争用 CPU 或内核处理中断。用户对这些无关的上下文切换没有任何控制权。例如,如果在时间 t(1, n) 内核决定处理一个中断,那么上下文切换时间就会被夸大。

为了避开这些障碍,我们必须构建一个环境,使得在 P1 执行后,任务调度器立即选择 P2 运行。这可以通过构建数据通道来实现,例如 P1 和 P2 之间的管道。

也就是说,让我们允许 P1 作为初始发送者,P2 作为接收者。最初,P2 在等待数据令牌时被阻塞(休眠)。当 P1 执行时,它通过数据通道将数据令牌传递给 P2,并立即尝试读取响应令牌。上下文切换结果和任务调度程序必须选择另一个进程来运行。由于 P2 现在处于准备运行状态,因此它是任务调度程序选择执行的理想候选者。当 P2 运行时,P1 和 P2 的角色互换。 P2 现在作为发送方,P1 作为被阻止的接收方。

总结——

  1. P2 阻塞等待来自 P1 的数据
  2. P1 标记开始时间。
  3. P1 向 P2 发送一个令牌。
  4. P1 尝试从 P2 读取响应令牌。这会导致上下文切换。
  5. P2 被调度并接收令牌。
  6. P2 向 P1 发送响应令牌。
  7. P2 尝试从 P1 读取响应令牌。这会导致上下文切换。
  8. P1 被调度并接收令牌。
  9. P1 标记结束时间。

关键是数据令牌的传递会引发上下文切换。设 Td 和 Tr 分别为传递和接收数据令牌所花费的时间,设 Tc 为上下文切换所花费的时间量。在第 2 步,P1 记录令牌交付的时间戳,在第 9 步,它记录响应的时间戳。这些事件之间经过的时间量 T 可以表示为:

T = 2 * (Td + Tc + Tr)

这个公式的出现是由于以下事件:

  • P1发送令牌(3)
  • CPU 上下文切换 (4)
  • P2收到(5)
  • P2 然后发送响应令牌 (6)
  • CPU 上下文切换 (7)
  • 最后,P1收到它(8)

GATE CS 练习题 –

  • GATE-CS-2006 |第 85 题
  • 门 CS 1998 |第 52 题