Как планировщик Linux планирует процессы на многоядерных процессорах?

Многоядерные процессоры используют параллелизм на уровне потоков, это означает, что несколько потоков работают параллельно. Предположим, что у процесса есть только один поток, остальные ядра остаются бездействующими во время выполнения этого процесса? В системе Linux планировщик рассматривает процессы и потоки как задачу. Он не различает процесс и поток при планировании. Значит ли это, что разные ядра выполняют разные потоки разных процессов параллельно?

Когда происходит переключение контекста, это происходит только для одного ядра или для всех ядер процессора?

1 ответ

Вы правы: процессы и потоки одинаковы с точки зрения планировщика Linux. Эти задачи ставятся в очередь в соответствии с правилами планировщика и ждут своей очереди.

Существуют правила планирования, такие как приоритет или привязка к процессору (чтобы предотвратить миграцию потока на другое ядро ​​и сохранить данные кэша).

Переключение контекста может происходить в ядре каждый фиксированный промежуток времени (временной интервал), потому что ЦП автоматически запускает некоторый код ядра периодически, чтобы разрешить приоритет. В зависимости от правил планировщика, задача может быть запущена для многих временных интервалов. Переключение контекста также может происходить, когда поток вызывает функции, которые делают его неработоспособным (например, ожидание ввода-вывода).

В некоторых случаях, если не во всех, существует один процесс планирования для каждого ядра, который делает все это.

Есть также похожий вопрос по суперпользователю

Другие вопросы по тегам