Подтвердить что ты не робот

Зачем нам нужна задача swapper в linux?

Недействительная задача (задача swapper a.k.a.) выбрана для запуска, когда в очереди выполнения задач в очереди выполнения задач больше нет запущенных задач. Но каково использование этой особой задачи? Другой вопрос: почему я не могу найти этот поток/процесс в выводе "ps aux" (PID = 0) из пользовательской области?

4b9b3361

Ответ 1

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

Программная причина: это упрощает планирование процесса, потому что вам не нужно заботиться о специальном случае: "Что произойдет, если никакая задача не будет выполнена?", потому что всегда есть хотя бы одна задача, выполняемая, задача бездействия, Также вы можете подсчитать количество процессорного времени, используемого для каждой задачи. Без простой задачи, какая задача получает учетную запись cpu-time, которую никто не нуждается?

Историческая причина. Прежде чем у нас был cpus, способный уйти или перейти в режимы энергосбережения, он должен был работать на полной скорости в любое время. Он выполнил серию NOP-инструкций, если никакие задачи не выполнялись. Сегодня планирование простаивающей задачи обычно снижает производительность процессора с помощью HLT-команд (halt), поэтому энергопотребление сохраняется. Таким образом, есть функциональность как-то в незанятой задаче в наши дни.

В Windows вы можете увидеть незанятую задачу в списке процессов, это простой процесс.

Ответ 2

Ядро linux поддерживает список ожиданий процессов, которые блокируются IO/mutexes и т.д. Если нет запускаемого процесса, процесс простоя помещается в очередь выполнения до тех пор, пока он не будет выгружен задачей, выходящей из ожидания очереди.

Причина, по которой у него есть задача, заключается в том, что вы можете измерить (приблизительно), сколько времени ядро ​​тратится из-за блоков в IO/locks и т.д. Кроме того, он делает код, который намного проще для ядра, поскольку задача бездействия так же как и каждая задача, которая ему нужна для переключения контекста, вместо задачи "специального случая", которая может затруднить изменение поведения ядра.

Ответ 3

Существует фактически одна задача бездействия на процессор, но она не содержится в главном списке задач, а вместо этого в структуре struct struct rq "struct rq", как struct task_struct *.

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

Ответ 4

Вы можете использовать ps -ef, и в нем будет указано отсутствие процесса, который выполняется. Затем в первой ссылке он отобразит первый pid-0, который является задачей swapper.