Компьютер и внешние события
|
Мы ждали его слишком долго.
Что может бытьглупее, чем ждать?
Б. Гребенщиков |
Практически все функции современных вычислительных систем так или иначе
сводятся к обработке внешних событий. Единственная категория приложений,
для которых внешние события совершенно неактуальны — это так называемые
пакетные приложения, чаще всего — вычислительные
задачи. Доля таких задач
в общем объеме компьютерных приложений в наше время невелика и постоянно
падает. В остальных же случаях, даже если не вспоминать о специализированных
управляющих компьютерах, серверы обрабатывают внешние по отношению к ним
запросы клиентов, а персональный компьютер — реагирует на действия пользователя.
Различие между управляющими системами (приложениями реального времени)
и системами общего назначения (термин — система разделенного
времени вышел
из употребления и не всегда точно отражает суть дела) состоит лишь в том,
что первые должны обеспечивать гарантированное время реакции на событие,
в то время как вторые "всего лишь" — предоставить хорошее среднее
время такой реакции и/или обработку большого количества событий в секунду.
Примечание
Время обработки одного события и количество событий, обрабатываемых в
единицу времени, далеко не всегда являются жестко взаимосвязанными — ведь
при многопоточной обработке система может обрабатывать несколько событий
параллельно.
Единственный способ, которым фон-неймановский компьютер может отреагировать
на что бы то ни было — это исполнить программу, последовательность команд.
В случае внешнего события, естественным решением кажется предоставить
команду условного перехода, условием которого является признак события.
В системах команд микроконтроллеров частореализуют именно такие переходы
(см. например табл. 2.2). В качестве признака события в этом случае используется
значение одного из битов специального регистра, биты которого соответствуют
входам микросхемы контроллера. Бит равен единице, если на соответствующий
вход подано высокое напряжение, и нулю — если низкое.
Наличие таких команд полезно, но решает проблему не полностью: да, сели
событие произошло, мы моыжем вызвать программу и осуществить реакцию но
что мы будем делать, если его еще не происходило?
|