Как планировщик Linux планирует процессы на многоядерных процессорах?
Многоядерные процессоры используют параллелизм на уровне потоков, это означает, что несколько потоков работают параллельно. Предположим, что у процесса есть только один поток, остальные ядра остаются бездействующими во время выполнения этого процесса? В системе Linux планировщик рассматривает процессы и потоки как задачу. Он не различает процесс и поток при планировании. Значит ли это, что разные ядра выполняют разные потоки разных процессов параллельно?
Когда происходит переключение контекста, это происходит только для одного ядра или для всех ядер процессора?
1 ответ
Вы правы: процессы и потоки одинаковы с точки зрения планировщика Linux. Эти задачи ставятся в очередь в соответствии с правилами планировщика и ждут своей очереди.
Существуют правила планирования, такие как приоритет или привязка к процессору (чтобы предотвратить миграцию потока на другое ядро и сохранить данные кэша).
Переключение контекста может происходить в ядре каждый фиксированный промежуток времени (временной интервал), потому что ЦП автоматически запускает некоторый код ядра периодически, чтобы разрешить приоритет. В зависимости от правил планировщика, задача может быть запущена для многих временных интервалов. Переключение контекста также может происходить, когда поток вызывает функции, которые делают его неработоспособным (например, ожидание ввода-вывода).
В некоторых случаях, если не во всех, существует один процесс планирования для каждого ядра, который делает все это.
Есть также похожий вопрос по суперпользователю