Ядро Линукс
Система времени
Системные тики (timer ticks):
- На материнской плате есть устройство-генератор импульсов (осциллятор), которое с фиксированной частотой посылает аппаратные прерывания в ядро.
- Каждое такое прерывание называется тик (tick).
- Зная частоту этих тиков, ядро «шагает» по времени, продвигая счётчик времени. Основным таким счётчиком является jiffies (или jiffies_64) — глобальная переменная ядра, которая увеличивается на 1 с каждым тиком. Именно отсчёт jiffies позволяет ядру измерять временные интервалы.
- Время в ядре дискретное (разбитое на интервалы), а не абсолютно непрерывное.
2. Частота тиков (tick rate):
- Частота, с которой приходят тики, задаётся параметром CONFIG_HZ при сборке ядра.
- Проверить её можно так:
grep 'CONFIG_HZ=' /boot/config-$(uname -r)
- Типичные значения: 100, 250, 1000 Гц. Это означает, что ядро получает 100, 250 или 1000 тиков в секунду.
- Чтобы изменить это значение, придётся пересобирать ядро.
- Более точный способ узнать текущую частоту — посмотреть в /proc/timer_list:
grep -E "jiffies|resolution" /proc/timer_list | head -10
/proc/timer_list — это спецфайл, который показывает подробную информацию о таймерах ядра и их состояние.
3. Реальное время (RTC — Real Time Clock):
- Когда компьютер полностью выключен, ядро не может «считать» время, поэтому используется отдельное устройство на материнской плате — Real Time Clock.
- В нём есть своя батарейка и микросхема с кварцевым резонатором.
- RTC хранит текущее время и дату между перезагрузками.
- При старте ядро считывает время из RTC и синхронизирует системные часы.
4. Дополнительно:
- После загрузки Linux обычно запускается демон NTP (Network Time Protocol) или systemd-timesyncd, чтобы синхронизировать время по сети (так как кварц RTC со временем всё равно немного уходит вперёд/назад).
- Современные ядра поддерживают режим tickless (CONFIG_NO_HZ) — в этом случае прерывания таймера приходят не с фиксированной частотой, а только тогда, когда реально нужно (например, для планировщика). В этом режиме ядро "просыпается" по таймеру только когда есть какая-то работа (например, нужно проверить, не истек ли квант времени у выполняемого процесса, или когда ожидается какое-то событие с дедлайном). Это снижает нагрузку на CPU и экономит энергию.
1 минута
16 июня