Глава 10. Обработка прерываний
Хотя некоторыми устройствами можно управлять не используя ничего, кроме их областей ввода/вывода, большинство реальных устройств немного более сложные, чем эти. Устройствам приходится иметь дело с внешним миром, который часто включает в себя такие вещи, как вращающийся диск, движущиеся ленты, соединения с отдалёнными местами и так далее. Многое требуется выполнять в сроки, которые отличаются от таковых и намного медленнее, чем в процессоре. Так как почти всегда нежелательно, чтобы процессор ждал внешних событий, должен быть способ для устройства дать процессору знать, когда что-то произошло.
Этот способ, конечно, прерывания. Прерывание - это просто сигнал, который оборудование может послать, когда хочет внимания процессора. Linux обрабатывает прерывания во многом так же, как обрабатывает сигналы в пространстве пользователя. По большей части драйверу необходимо только зарегистрировать обработчик для прерываний своего устройства и обработать их должным образом при их получении. Естественно, что под простой картинкой есть некоторые сложности; в частности, обработчики прерываний несколько ограничены в действиях, которые они могут выполнять, как результат того, как они выполняются.
Трудно продемонстрировать использование прерываний без реального аппаратного устройства для их генерации. Таким образом, пример кода, используемый в этой главе, работает с параллельным портом. Такие порты начинают становиться дефицитом на современном оборудовании, но при везении большинство людей всё ещё в состоянии получить их поддержку на системе с имеющимся портом. Мы будем работать с модулем short из предыдущей главы; с некоторыми небольшими добавлениями он сможет генерировать и обрабатывать прерывания от параллельного порта. Название модуля, short, на самом деле означает short int (короткое прерывание) (это похоже на Си, не правда ли?), чтобы напомнить нам, что он обрабатывает прерывания.
Однако, прежде чем мы углубимся в эту тему, пришло время для одного предостережения. Обработчики прерывания по своей природе работают одновременно с другим кодом. Таким образом, они неизбежно поднимают вопросы конкуренции и борьбы за структуры данных и оборудование. Если вы поддались соблазну пропустить обсуждение в Главе 5, мы понимаем. Но мы также рекомендуем вам вернуться назад и прочитать её теперь. Твёрдое понимание методов контроля конкуренции имеет жизненно важное значение при работе с прерываниями.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.