Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Службы ядра Прерывания от часов

Прерывания от часов

Система управляется часами, которые генерируют прерывания через регулярные интервалы времени. Каждое прерывание называется тиком. На PC тики возникают 100 раз в секунду. С каждым тиком система обновляет текущее время дня, а также таймеры процессов пользователей и системные таймеры.

Прерывания для тиков часов посылаются в виде высокоприоритетных аппаратных прерываний. После переключения на процесс устройства часов вызывается процедура hardclock(). Важно, чтобы процедура hardclock() делала работу быстро.

· Если hardclock() работает в течение более одного тика, она потеряет следующее прерывание от часов. Поскольку hardclock() поддерживает для системы время дня, потерянное прерывание вызовет отставание времени системы.

· Из-за высокого приоритета прерывания hardclock() почти вся остальная деятельность в системе блокируется на время выполнения hardclock(). Это блокирование может вызвать потерю пакетов сетевыми контроллерами или потерю передачи сектора под головкой диска дисковым контроллером.

Поскольку затрачиваемое в hardclock() время минимизируется, менее критичная относящаяся ко времени обработка выполняется обработчиком программного прерывания softclock() с более низким приоритетом. К тому же, если доступно несколько часов, часть связанной со временем обработки может осуществляться другими процедурами, поддерживаемыми альтернативными часами. На PC имеются двое дополнительных часов, работающих с отличающимися от системных часов частотами: statclock(), работающая со 128 тиками в секунду для сбора статистики системы, и profclock(), работающая с частотой 1024 тика в секунду для сбора профилирующей информации.

Работа, выполняемая hardclock(), включает в себя следующее.

· Если у текущего выполняющегося процесса есть виртуальный или профилирующий интервальный таймер, уменьшить значение таймера и доставить сигнал, если время таймера вышло.

· Увеличить текущее время дня.

· Если в системе нет отдельных часов для обработки профилирования, процедура hardclock() выполняет действия, обычно осуществляемые profclock.

· Если в системе нет отдельных часов для сбора статистики, процедура hardclock() выполняет операции, обычно осуществляемые statclock.

· Если нужно запустить softclock(), подготовить к запуску процесс softclock.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 24 гостей онлайн