Система управляется часами, которые генерируют прерывания через регулярные интервалы времени. Каждое прерывание называется тиком. На PC тики возникают 100 раз в секунду. С каждым тиком система обновляет текущее время дня, а также таймеры процессов пользователей и системные таймеры.
Прерывания для тиков часов посылаются в виде высокоприоритетных аппаратных прерываний. После переключения на процесс устройства часов вызывается процедура hardclock(). Важно, чтобы процедура hardclock() делала работу быстро.
· Если hardclock() работает в течение более одного тика, она потеряет следующее прерывание от часов. Поскольку hardclock() поддерживает для системы время дня, потерянное прерывание вызовет отставание времени системы.
· Из-за высокого приоритета прерывания hardclock() почти вся остальная деятельность в системе блокируется на время выполнения hardclock(). Это блокирование может вызвать потерю пакетов сетевыми контроллерами или потерю передачи сектора под головкой диска дисковым контроллером.
Поскольку затрачиваемое в hardclock() время минимизируется, менее критичная относящаяся ко времени обработка выполняется обработчиком программного прерывания softclock() с более низким приоритетом. К тому же, если доступно несколько часов, часть связанной со временем обработки может осуществляться другими процедурами, поддерживаемыми альтернативными часами. На PC имеются двое дополнительных часов, работающих с отличающимися от системных часов частотами: statclock(), работающая со 128 тиками в секунду для сбора статистики системы, и profclock(), работающая с частотой 1024 тика в секунду для сбора профилирующей информации.
Работа, выполняемая hardclock(), включает в себя следующее.
· Если у текущего выполняющегося процесса есть виртуальный или профилирующий интервальный таймер, уменьшить значение таймера и доставить сигнал, если время таймера вышло.
· Увеличить текущее время дня.
· Если в системе нет отдельных часов для обработки профилирования, процедура hardclock() выполняет действия, обычно осуществляемые profclock.
· Если в системе нет отдельных часов для сбора статистики, процедура hardclock() выполняет операции, обычно осуществляемые statclock.
· Если нужно запустить softclock(), подготовить к запуску процесс softclock.
- 15/07/2010 22:02 - Реальное время
- 11/07/2010 09:08 - Службы времени
- 08/07/2010 12:45 - Службы управления памятью
- 04/07/2010 23:01 - Тайм-ауты
- 04/07/2010 21:47 - Статистика и планирование процессов
- 26/06/2010 01:52 - Программные прерывания
- 24/06/2010 12:26 - Прерывания от устройств ввода/вывода
- 16/06/2010 13:31 - Исключения
- 15/06/2010 08:13 - Состояние процесса
- 15/06/2010 01:16 - Использование ресурсов