Иллюстрированный самоучитель по теории операционных систем

Компьютер и внешние события

Мы ждали его слишком долго.
Что может быть глупее, чем ждать?

Б. Гребенщиков

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

Доля таких задач в общем объеме компьютерных приложений в наше время невелика и постоянно падает. В остальных же случаях, даже если не вспоминать о специализированных управляющих компьютерах, серверы обрабатывают внешние по отношению к ним запросы клиентов, а персональный компьютер – реагирует на действия пользователя.

Различие между управляющими системами (приложениями реального времени) и системами общего назначения (термин – система разделенного времени вышел из употребления и не всегда точно отражает суть дела) состоит лишь в том, что первые должны обеспечивать гарантированное время реакции на событие, в то время как вторые "всего лишь" – предоставить хорошее среднее время такой реакции и/или обработку большого количества событий в секунду.

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

Единственный способ, которым фон-неймановский компьютер может отреагировать на что бы то ни было – это исполнить программу, последовательность команд.

В случае внешнего события, естественным решением кажется предоставить команду условного перехода, условием которого является признак события.

В системах команд микроконтроллеров часто реализуют именно такие переходы (см. например табл. 2.2). В качестве признака события в этом случае используется значение одного из битов специального регистра, биты которого соответствуют входам микросхемы контроллера. Бит равен единице, если на соответствующий вход подано высокое напряжение, и нулю – если низкое.

Наличие таких команд полезно, но решает проблему не полностью: да, сели событие произошло, мы можем вызвать программу и осуществить реакцию но что мы будем делать, если его еще не происходило?

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.