Зачем нам нужна задача подкачки в Linux? - PullRequest
40 голосов
/ 21 января 2009

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

Ответы [ 4 ]

32 голосов
/ 21 января 2009

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

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

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

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

16 голосов
/ 21 января 2009

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

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

9 голосов
/ 21 января 2009

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

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

2 голосов
/ 02 июля 2012

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

...