Ядро запускается периодически, оно устанавливает таймер для запуска прерывания с некоторой предопределенной частотой (100 Гц (Linux 2.4 / x86), 1000 Гц (ранняя версия Linux 2.6 / x86), 250 Гц (более поздняя версия Linux 2.6 / x86)).
Ядру нужно сделать это для выполнения вытесняющей многозадачности.OTOH, операционные системы, выполняющие только совместную многозадачность (Windows 3.1, классическая Mac OS), не должны этого делать, а переключают задачи только в ответ на какой-либо вызов из запущенной задачи (что может привести к сбоям задач, повисших на всей системе).
Обратите внимание, что предпринимаются определенные усилия для оптимизации использования этого таймера: более новый Linux умнее, когда нет выполняемых задач, он устанавливает таймер в будущем настолько далеко, насколько это возможно, чтобы процессор мог спать дольше и глубжеи сохранить энергию (опция конфигурации ядра CONFIG_NOHZ
).Запуск powertop
покажет количество пробуждений в секунду, которое в неактивной системе может быть намного меньше, чем 250 пробуждений в секунду, которые вы ожидаете от традиционной реализации.