Книга: Разработка ядра Linux
Таймер
Таймер
Никогда нельзя привязываться к какой-либо конкретной частоте генерации прерывания системного таймера и, соответственно, к тому, сколько раз в секунду изменяется переменная jiffies
. Всегда необходимо использовать константу HZ
, чтобы корректно определять интервалы времени. Это очень важно, потому что значение частоты системного таймера может отличаться не только для разных аппаратных платформ, но и для одной аппаратной платформы при использовании разных версий ядра.
Например, константа HZ
для аппаратной платформы x86 сейчас равна 1000. Это значит, что прерывание таймера возникает 1000 раз в секунду, или каждую миллисекунду. Однако до серии ядер 2.6 для аппаратной платформы x86 значение константы HZ
было равно 100. Для разных аппаратных платформ эти значения отличаются: для аппаратной платформы alpha константа HZ
равна 1024, а для платформы ARM — 100.
Никогда нельзя сравнивать значение переменной jiffies
с числом, таким как 1000, и думать, что это всегда будет означать одно и то же. Для получения интервалов времени необходимо всегда умножать или делить на константу HZ
, как в следующем примере.
HZ /* одна секунда */
(2*HZ) /* две секунды */
(HZ/2) /* полсекунды */
(HZ/100) /* 10 мс */
(2*HZ/100) /* 20 мс */
Константа HZ
определена в файле <asm/param.h>
. Об этом подробно рассказано в главе 10, "Таймеры и управление временем".
- Регистр масок таймера 1
- 23.11. Управление таймерами
- Частота импульсов таймера: HZ
- 14.3.3. Интервальные таймеры: setitimer() и getitimer()
- 18.2. Использование таймеров
- Обработка прерываний таймера
- Глава 10 Таймеры и управление временем
- Аппаратные часы и таймеры
- Системный таймер
- Обработчик прерываний таймера
- Таймеры
- Использование таймеров