具有两个交换过程和上下文切换的读取操作

具有两个交换过程和上下文切换的读取操作

P1和P2都是进程,彼此不同。这是在硬盘上完成的读取操作:

上面给出了 Linux 中读取指令的图表,是否最好避免使用上下文切换来提高整体性能?

(a)正确,因为它避免了在 TLB 中交换。

(b)正确。

(c)错误。

(d)错误,无法避免执行上下文切换

为什么答案只是 (c)?我认为这个学生不可能是对的,因为避免上下文切换并不能提高整体性能,因为上下文切换用于提高性能。

我认为应该是(d),因为当我们从 P1 转到 P2 时,我们需要上下文切换才能从一个过程转到另一个过程。

有人能解释一下吗?

答案1

好的,似乎应该选择 (c) 而不是 (d),仅仅是因为 (d) 不真实。

当 P1 过了一段时间后进入读取阶段时,我们谈论的是 IO,因此 CPU 很忙。它必须先处理 IO 请求并获取该数据,因此在它执行此操作时,调度程序会运行另一个进程,这样我们就不会浪费时间 - 然而这与上下文切换无关。

这是我的想法。这看起来合乎逻辑吗?

答案2

通过在等待磁盘操作完成时不安排 P2 运行,可以避免一次上下文切换(从 P2 切换到 P1)。据推测,如果您这样做,那么 P1 会稍快地恢复执行,并且 TLB 会更热。

您无法避免所有上下文切换,因为系统调用涉及上下文切换(用户到内核),设备完成中断后 P1 的恢复也是如此。但您可以避免用户上下文的两次切换(尽管只有一次切换会影响 P1 的时间)。

因此,如果你衡量性能的唯一标准是 P1 的执行速度,那么你可以将 CPU 专用于 P1 并不允许任何其他进程运行,从而节省一点时间。但我们知道磁盘活动比上下文切换慢,问题在于全面的性能,而不仅仅是 P1。因此,安排 P2 在等待期间运行是有意义的,即使这会在稍后恢复 P1 时引入一点延迟。

相关内容