2014-10-23 2 views
0

Linux включает в себя несколько привилегированных процессов, называемых потоками ядра. Есть ли планировщик, который запускает/приостанавливает их? Если да, является ли этот планировщик таким же, как системный планировщик (я имею в виду тот, который должен запланировать все процессы системы)?Планировщик для Linux-потоков ядра

ответ

1

Планировщик Linux планирует задачи планирования. Они могут быть

  • потоков ядра (например kswapd) или
  • однопоточных процессы (например, bash), или
  • отдельных нитей многопоточного процесса (например, некоторые браузеры или сервера)

Многие потоки многопоточного процесса - это задачи, совместно использующие общее адресное пространство (и другие вещи, например файловые дескрипторы).

AFAIK, планировщик не отделяет потоки ядра от других задач. Но планировщик учитывает политики планирования (sched_setscheduler(2)) и приоритеты (setpriority(2)) (Для большинства потоков ядра приоритет часто очень высок). См. sched(7)

1

Да! Позвольте мне пояснить часть системного планировщика здесь.

Каждая задача связана с task_struct, который содержит детали каждой задачи говорят идентификатор процесса, его имя, когда он недавно начал, приоритет и т.д. и т.п. http://lxr.free-electrons.com/source/include/linux/sched.h#L1224

Обычно в зависимости от приоритета задачи либо Fair планировщиком или планировщик реального времени, и они существуют. Просто чтобы это было просто и не вдаваться в детали, это разные алгоритмы планировщика, которые обслуживают разные типы задач.

В настоящее время потоки ядра также имеют связанный с ним task_struct, и поскольку @Basile Starynkevitch указал пару KPI, мы можем использовать KPI для sched_setparam для изменения параметров графика и изменения планировщика, к которому задача принадлежит, зависит от того, что они делать.

Смежные вопросы