Вместо того, чтобы «ничего не делать», если нечего делать (включая SMP), почему ядро Linux запускает поток ожидания?
Зачем ядру Linux нужен простой поток?
Ответы (2)
Когда планировщик решает переключиться на задачу бездействия, в этот момент начинает работать динамический тик, отключая периодический тик до истечения следующего таймера. Тик будет повторно включен после этого промежутка времени или когда в какой-то момент произойдет прерывание.
В то же время процессор уходит в заслуженный сон специфическим для архитектуры способом, что экономит вашу энергию. Взгляните на определение cpu_idle()
в arch/x86/kernel/process.c.
/*
* The idle thread. There's no useful work to be
* done, so just try to conserve power and have a
* low exit latency (ie sit in a loop waiting for
* somebody to say that they'd like to reschedule)
*/
void cpu_idle(void)
Что значит "ничего не делать"??
Когда процессор включен, происходит довольно длинный список вещей. После включения процессор не может «ничего не делать». Он должен что-то делать, потому что есть напряжение и периодический тактовый сигнал. Вы можете снова выключить его и АБСОЛЮТНО ничего не делать, но тогда вам придется выполнить длинный список вещей, чтобы получить устойчивый тактовый сигнал, когда он вам снова понадобится.
Таким образом, незанятый поток — это поток, который выполняет минимум действий. то есть, если умножение двух чисел с плавающей запятой требует наименьшего количества циклов и наименьшего количества электронных схем; тогда незанятый поток будет постоянно умножать два числа с плавающей запятой. Кроме того, как сказал Ван, ядро Linux (в некоторых конфигурациях) отслеживает, когда ядра начинают выполнять незанятые потоки, а также переключает их на более низкую частоту, отключая любое периодическое обслуживание ОС. Это приводит к небольшой задержке, когда требуется ядро, но при этом используется гораздо меньше энергии.