1

近似于 SRTF 的调度程序,如多级反馈队列设计,将倾向于支持执行短 CPU 突发的交互式程序。Linux 的完全公平调度器有时会这样做,但由于它有不同的调度目标,所以通常不会。在以下哪种情况下,CFS可能导致交互式线程的性能比近似SRTF的类似 MLFQ 的调度程序更差?

  1. 运行一个具有短 CPU 突发的交互式线程,如果单独运行,将使用非常少的 CPU 时间和一个从不执行 I/O 的非常 CPU 密集型线程
  2. 运行一个具有短 CPU 突发的交互式线程,如果单独运行,将使用非常少的 CPU 时间,以及一个具有更长 CPU 突发的非交互式线程,频繁执行磁盘 I/O
  3. 运行一个具有频繁短 CPU 突发的交互式线程,如果单独运行,将使用大部分可用的 CPU 时间,以及一个从不执行 I/O 的 CPU 密集型线程
  4. 运行一个具有短 CPU 突发的交互式线程和大量从不进行 I/O 的 CPU 密集型线程

The correct answers are 3 and 4.

为什么 3 和 4 是正确的?交互式线程和非交互式线程有什么区别?

4

1 回答 1

1

在这种情况下,交互式线程往往会花费大部分时间等待 I/O,而在两者之间只进行少量计算。也就是说,它主要对输入做出快速响应,而不是进行更长的计算。

更广泛地说,当我们谈到交互式程序时,我们通常指的是主要响应某些外部输入的程序。一个常见的调度目标是为此类程序提供比普通程序更高的优先级,以至少为等待机器执行某些操作的用户提供更好的性能外观。当以这种方式考虑交互性时,确切的定义会有所不同——关于什么是“外部输入”有不同的概念。

特别是为了回答这个问题,我们实际上不需要使用任何“交互式”的定义。问题指定一个线程是交互式的原因是为了激发这个问题——在这种情况下,类似 SRTF 的调度程序可以通过识别交互式线程具有较短 CPU 突发的倾向来比CFS做得更好。与其依赖我们说线程是“交互式的”,我们可以理解SRTF调度策略将如何根据 CPU 突发长度工作,我们被明确告知。我们可以通过考虑它在可用线程之间大致公平地分配 CPU 时间来理解CFS策略将如何应用。

对于 1 和 2:由于交互式线程总体上不使用太多 CPU 时间,因此它往往会首先由CFS运行,但也倾向于由SRTF首先运行,因为它具有最短的 CPU 突发

对于 3: CFS将最终为交互式线程提供大约一半的可用 CPU 时间(在两个可用线程之间公平分配 CPU 时间),但在SRTF下,它总是会首先运行(只要它可以运行),因为它更短CPU 爆发,最终会得到超过一半的时间(因为“单独运行,[它] 会使用大部分可用的 CPU”)

对于 4: CFS最终将为交互式线程提供大约 1/N 的可用 CPU 时间,其中 N 是线程总数,我们被告知 N 非常大。在SRTF下,线程总是首先运行,所以它几乎肯定会比 1/N 所代表的一小段 CPU 时间获得更多

——教授的回答

于 2020-11-21T03:37:16.427 回答