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

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


person jscoot    schedule 21.01.2009    source источник
comment
До сих пор я нигде не видел, чтобы это называлось задачей swapper. есть kswapd, который заботится о подкачке памяти с/на диск, но я бы сказал, что это совсем другое дело (и он действительно отображается в списке PID)   -  person PypeBros    schedule 26.04.2012
comment
Собственные perf-инструменты @PypeBros Linux называют это задачей подкачки (в perf top)   -  person pistache    schedule 12.11.2019


Ответы (4)


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

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

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

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

person bl4ckb0l7    schedule 21.01.2009
comment
Инструкция HLT предшествует планировщику Linux, не так ли? - person PypeBros; 05.09.2011
comment
@sylvainulg Я думаю, что да, но я не удивлюсь, если алгоритмы планирования Linux (или, по крайней мере, некоторые из них) предшествовали инструкции HLT. - person Samuel Edwin Ward; 03.04.2012
comment
@SamuelEdwinWard, может быть. В моей документации упоминается, что HLT уже был доступен на 8088 и 8086. Затем, через 10 лет после раннего варианта Unix ... но действительно ли алгоритм такой старый? - person PypeBros; 26.04.2012
comment
@sylvainulg, это интересный вопрос, и я не знаю, где найти ответ. Откуда Linux взял свои алгоритмы планирования? Была ли у PDP-11 команда остановки? Получила ли исходная группа UNIX свои алгоритмы планирования от кого-то еще раньше? - person Samuel Edwin Ward; 26.04.2012
comment
@SamuelEdwinWard: видимо, да: divms.uiowa.edu /~jones/pdp8/man/micro.html#hlt -- на PDP-11 похоже, что можно было бы использовать WAIT, а HALT больше похож на CLI; HLT на жаргоне 80x86. - person PypeBros; 30.04.2012
comment
Все ли архитектуры, поддерживаемые Linux, имеют инструкцию HLT (или эквивалентную)? - person Thayne; 10.09.2020
comment
Согласно Википедии, все процессоры x86, начиная с 8086, имели инструкцию HLT, но она ... не была специально разработана для снижения энергопотребления до выпуска процессора Intel DX4 в 1994 году. - person pericynthion; 19.02.2021

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

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

person Spence    schedule 21.01.2009

На самом деле на каждый процессор приходится одна бездействующая задача, но она не содержится в списке основных задач, а находится в структуре очереди выполнения "struct rq" процессора как struct task_struct * .

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

person MarkR    schedule 21.01.2009

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

person user1082080    schedule 02.07.2012