Задача бездействия (также известная как задача подкачки) выбирается для запуска, когда на момент планирования задачи в очереди выполнения больше нет пригодных для выполнения задач. Но какое использование для этой такой специальной задачи? Другой вопрос: почему я не могу найти этот поток/процесс в выводе «ps aux» (PID=0) из пользовательской среды?
Зачем нам нужна задача swapper в linux?
Ответы (4)
Причина историческая и программная. Задача бездействия — это работающая задача, если никакая другая задача не может быть запущена, как вы сказали. У него самый низкий возможный приоритет, поэтому выполнение других задач невозможно.
Программная причина: это значительно упрощает планирование процессов, потому что вам не нужно заботиться об особом случае: «Что произойдет, если ни одна задача не может быть запущена?», потому что всегда есть хотя бы одна выполняемая задача, бездействующая задача. Также вы можете подсчитать количество процессорного времени, используемого для каждой задачи. Без бездействующей задачи, какая задача учитывает никому не нужное процессорное время?
Историческая причина: до того, как у нас появились процессоры, способные понижать производительность или переходить в режим энергосбережения, он ДОЛЖЕН был работать на полной скорости в любое время. Он запускал серию NOP-инструкций, если никакие задачи не выполнялись. Сегодня планирование бездействующей задачи обычно снижает нагрузку на процессор с помощью HLT-инструкций (остановка), что позволяет экономить энергию. Так что функционал какой-то в холостой задаче в наши дни есть.
В Windows вы можете увидеть бездействующую задачу в списке процессов, это бездействующий процесс.
Ядро linux поддерживает список ожидания процессов, которые «заблокированы» при вводе-выводе/мьютексах и т. д. Если нет исполняемого процесса, незанятый процесс помещается в очередь выполнения до тех пор, пока он не будет вытеснен задачей, выходящей из очереди ожидания.
Причина, по которой у него есть задача, заключается в том, что вы можете измерить (приблизительно), сколько времени ядро тратит впустую из-за блоков ввода-вывода / блокировок и т. Д. Кроме того, это делает код намного проще для ядра, поскольку задача бездействия такая же, как и каждая задача, которая должна переключаться в контекст, вместо бездействующей задачи «особого случая», которая может затруднить изменение поведения ядра.
На самом деле на каждый процессор приходится одна бездействующая задача, но она не содержится в списке основных задач, а находится в структуре очереди выполнения "struct rq" процессора как struct task_struct * .
Это активируется планировщиком всякий раз, когда больше нечего делать (на этом ЦП), и выполняет некоторый код, специфичный для архитектуры, чтобы простаивать ЦП в состоянии низкого энергопотребления.
Вы можете использовать ps -ef, и он отобразит номер запущенного процесса. Затем в первой ссылке будет указан первый pid - 0, который является задачей подкачки.
perf top
) - person pistache   schedule 12.11.2019