Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
У большинства компьютеров есть второй программируемый таймер, который может быть установлен для формирования прерываний с той частотой, какая требуется программе. Этот таймер представляет собой добавление к основному системному таймеру, описанному в предыдущих разделах. До тех пор пока частота прерываний невелика, никаких проблем, связанных с использованием второго таймера для прикладных целей, не возникает. Трудности появляются, когда частота прерываний прикладного таймера становится очень высокой. Ниже мы кратко опишем схему программного таймера, хорошо работающую в различных обстоятельствах, даже на высоких частотах. Идея обязана своим появлением Арону и Друшелю.
Обычно есть два способа управления вводом-выводом: прерывания и опрос. Прерывания обладают низким временем задержки, то есть они происходят немедленно после самого события или с минимальной задержкой. С другой стороны, в современных центральных процессорах прерываниям сопутствуют значительные накладные расходы, связанные с необходимостью переключения контекста, а также с их влиянием на конвейер, кэш и буфер быстрого преобразования адреса ТLВ.
Вместо прерываний может использоваться опрос приложением какого-либо порта или слова памяти при ожидании события. Этот метод позволяет избежать прерываний, но может привести к значительным задержкам, то есть к замедленной реакции приложения на ожидаемое им событие. Это связано с тем, что событие может произойти сразу после опроса, в результате чего задержка реакции составит почти целый интервал опроса. В среднем задержка составит половину периода опроса.
Для некоторых приложений ни накладные расходы прерываний, ни задержка опроса неприемлемы. Возьмите, к примеру, такую высокоскоростную сеть, как гигабитная сеть Ethernet. Эта сеть способна принимать или доставлять пакет полного размера каждые 12 мкс. Для поддержания оптимальной производительности на выходе надо посылать новый пакет каждые 12 мкс.
Один из способов достижения такой скорости состоит в том, что по завершении передачи каждого пакета происходит прерывание, либо устанавливается таймер, инициирующий прерывания каждые 12 мкс. Недостаток этого метода — как показали измерения, для процессора Pentium П с частотой 300 МГц одно прерывание занимает 4,45 мкс (1335 тактов процессора). Этот показатель накладных расходов вряд ли улучшился с 70-х годов. Например, у большинства миникомпьютеров прерывание занимает всего четыре цикла шины, необходимых для помещения в стек счетчика команд и слова состояния процессора, и для загрузки новых значений РС и PSW. Сегодняшним процессорам приходится иметь дело с конвейером, MMU, TLB и кэшем, что увеличивает накладные расходы в несколько раз. Со временем эти эффекты только ухудшаются, не позволяя использовать прерывания от таймера с высокой частотой.
Идея «мягких» таймеров позволяет избежать лишних прерываний. Вместо этого ядро, вызываемое по какой-либо другой причине, перед тем как вернуться в режим пользователя, проверяет значение часов реального времени, чтобы проверить, не истек ли период ожидания «мягкого» таймера. Если время ожидания истекло, выполняется планируемое событие (например, передача пакета или проверка, не пришел ли пакет). При этом отпадает необходимость специального переключения в режим ядра, так как система и так уже находится в режиме ядра. Когда необходимые действия выполнены, «мягкий» таймер снова устанавливается для ожидания следующего события. Все, что для этого требуется — это взять текущее значение часов, прибавить к нему интервал ожидания и сохранить сумму в ячейке таймера.
«Мягкие» таймеры устанавливаются и срабатывают с той скоростью, с которой выполняются входы в ядро по другим причинам. К этим причинам относятся:
1. Системные вызовы.
2. Ошибки преобразования адреса Т1 В.
3. Отсутствие страницы памяти.
4. Прерывания ввода-вывода.
5. Временное отсутствие работы для центрального процессора.
Для определения частоты этих событий Арон и Друшель произвели измерения с несколькими вариантами загрузки центрального процессора, включая полностью загруженный web-сервер, выполняющий ограниченное скоростью вычислений фоновое задание, воспроизведение скачиваемого с Интернета аудио в режиме реального времени, а также перекомпиляцию ядра системы UNIX. Средний период обращений к ядру варьировался в диапазоне от 2 до 18 мкс. Примерио половину этих обращений составляли системные вызовы. Таким образом, в первом приближении вызов «мягкого» таймера через каждые 12 мкс является вполне выполнимым делом, хотя при этом иногда возможен пропуск временных сроков. Однако для таких приложений, как отсылка пакетов, лучше иногда опоздать с отправкой пакета на 10 мкс, чем затрачивать на прерывания до 35 % времени центрального процессора.
Конечно, могут быть периоды, когда нет системных вызовов, ошибок TLB или отсутствия страниц памяти. В этом случае «мягкий» таймер не будет обрабатываться и остановится. Для таких интервалов времени может быть принудительно установлена верхняя граница при помощи второго аппаратного таймера, срабатывающего, скажем, раз в 1 мс. Если приложению достаточно всего лишь 1000 пакетов в секунду, тогда комбинация «мягких» таймеров и низкочастотного аппаратного таймера может оказаться лучше, чем ввод-вывод, основанный только на прерываниях или только на опросе.
Дата публикования: 2015-01-26; Прочитано: 726 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!