Программируемые таймеры

Большинство компьютеров оборудовано вторыми программируемыми часами, которые могут быть настроены на выдачу таймерных прерываний с любыми необходимыми программе характеристиками. По отношению к таймеру основной системы, чьи функции были рассмотрены ранее, этот таймер является дополнительным.
Пока частота прерываний невысока, использование этого дополнительного таймера в прикладных целях не вызывает никаких проблем. Трудности возникают при возрастании частоты прерываний таймера, используемого в прикладных целях, до очень высоких значений. Далее будет дано краткое описание схемы таймера, имеющего программную основу, который справляется со многими обстоятельствами, даже с работой на очень высоких частотах. Его идея принадлежит Арону и Дрюшелю (Aron and Druschel, 1999). Более подробно она изложена в их статье.

Для управления вводом-выводом используются, как правило, два способа: прерывания и опросы. Прерывания обладают небольшим временем задержки, то есть они происходят сразу же вслед за событием, с небольшой задержкой или вовсе без нее. В то же время при использовании современных центральных процессоров прерывания приводят к существенным издержкам в силу необходимости переключения контекста и их влияния на конвейерную обработку, буфер TLB и кэш.

В качестве альтернативы прерываниям можно заставить приложение самостоятельно вести опрос наступления ожидаемого события. Тем самым можно избежать прерываний, но при этом могут возникнуть существенные задержки, поскольку событие может произойти сразу же после опроса и в этом случае придется ждать весь промежуток времени до следующего опроса. В среднем задержка составляет половину интервала времени между двумя опросами.

Сегодня задержка прерывания чуть ниже, чем на компьютерах 70-х годов прошлого столетия. К примеру, на большинстве мини-компьютеров прерывание занимало четыре такта шины: для помещения в стек счетчика команд и слова состояния программы (PSW) и для загрузки новых счетчика команд и PSW. В наше время при работе с конвейерами, блоками управления памятью, буферами TLB и кэшем издержки неизмеримо выше. И со временем положение скорее ухудшится, чем улучшится, сводя на нет увеличение тактовой частоты. К сожалению, для конкретных приложений не хотелось бы ни издержек, связанных с прерываниями, ни задержек, связанных с опросами.

Программные таймеры позволяют избежать прерываний. Вместо них, как только управление по каким-то причинам передается ядру, непосредственно перед возвращением в режим пользователя осуществляется проверка значения фактического времени, чтобы увидеть, не истекло ли время программного таймера.

Если его время истекло, осуществляется запланированное событие (например, передача пакета или проверка наличия входящего пакета), при этом нет надобности переходить в режим ядра, поскольку система в нем и находится. После выполнения запланированной задачи программный таймер перезапускается, чтобы снова быть задействованным. Нужно лишь скопировать текущее значение часов в таймер и добавить к нему время истечения ожидания события.

Программные таймеры устанавливаются или сбрасываются с частотой передачи управления ядру, осуществляемого по каким-то другим причинам. В число этих причин входят:

♦ системные вызовы;

♦ отсутствие адресов в буфере TLB;

♦ ошибки отсутствия страниц;

♦ прерывания ввода-вывода;

♦ отсутствие загруженности центрального процессора.

Чтобы определить, как часто происходят эти события, Арон и Дрюшель провели измерения при нескольких вариантах загрузки центральных процессоров, включая полностью загруженный веб-сервер, веб-сервер, имеющий фоновые задачи, ограниченные по скорости вычислений, воспроизведение аудиопотока, получаемого из Интернета в реальном масштабе времени, а также перекомпиляцию ядра UNIX. Средняя частота вхождений в ядро изменялась от 2 до 18 мкс, при этом причиной около половины этих вхождений были системные вызовы. Таким образом, в первом приближении задача задействования программного таймера каждые 10 мкс была вполне выполнимой, хотя и со случающимися время от времени нарушениями крайних сроков. Нечастые опоздания на 10 мкс намного предпочтительнее, чем использование прерываний, «съедающих» 35 % времени центрального процессора.

Разумеется, могут встречаться периоды без системных вызовов, отсутствия адресов в TLB или ошибок отсутствия страниц, и в этом случае не будут задействоваться никакие программные таймеры. Чтобы установить верхнюю планку таких интервалов,

можно установить второй аппаратный таймер на задействованность, скажем, каждую 1 мс. Если приложение вытерпит режим всего в 1000 активаций в секунду в течение довольно редких интервалов времени, то комбинация из программных таймеров и низкочастотного аппаратного таймера может оказаться лучше, чем ввод-вывод, управляемый только с помощью прерываний или только с помощью опросов.

5.6.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Программируемые таймеры:

  1. Социология и программируемое общество: Ален Турен
  2. 7.14.1. Комбинаторный метод
  3. Овладение саногенным мышлением
  4. Овладение саногенным мышлением
  5. Кошмар после пробуждения
  6. 5.10.2. Создание отправных пунктов
  7. ВВЕДЕНИЕ
  8. Проявляйте гнев с пользой для себя
  9. ПОЧЕМУ ТАКОЙ ПРИКАЗ?
  10. 1.9. Анализ случая (Case study)
  11. 1.14. Технические средства опроса
  12. Методика социолингвистического анализа
  13. 2.4. Способы речевого воздействия на собеседника