Cтраница 3
![]() |
Небуферизированный ввод ( а. буферизация в пространстве пользователя ( б. [31] |
Следующий подход состоит в создании буфера, в который обработчик прерываний будет помещать поступающие символы, в ядре, как показано на рис. 5.11, в. Когда этот буфер наполняется, достается страница с буфером пользователя, и содержимое буфера копируется туда за одну операцию. [32]
![]() |
Тело модуля clock служит для инициализации. После того как инициализация выполнена, сопрограмма tick вызывается при каждом прерывания от таймера. [33] |
Одним из преимуществ использования языков высокого уровня для написания обработчиков прерываний является относительная легкость охладив я тестирования. Мы можем разрабатывать такой драйвер внутри какой-нибудь простой программы, которая подтверждает правильность выполняемых ни операций. Модула-2 облегчает разработку обрабатывающих прерывания сопрограмм, поскольку связывание обработчика с обычной программой не составляет труда. Системы программирования, которые требуют, чтобы обработчики прерываний были написаны на языке низкого уровня, часто создают дополнительные трудности в процессе включения этих обработчиков в программу. Эти трудности имеют двоякую причину. С одной стороны, из-за самого языка низкого уровня обработчики трудны в написании и сложны в понимании, с другой - их непросто тестировать, поскольку для включения этих обработчиков в программу требуется приложить особые усилия. [34]
Вариантом этой идеи является запуск программы получателя прямо в обработчике прерываний, что позволяет избежать хлопот с созданием временного потока. Чтобы еще ускорить эту схему, в само сообщение можно включить адрес обработчика, поэтому, когда оно прибудет, обработчик будет вызван с помощью всего нескольких команд процессора. Большой выигрыш данной схемы заключается в том, что копирование вообще не нужно. Обработчик получает сообщение от интерфейсной платы и обрабатывает его на лету. Поскольку каждое сообщение содержит адрес обработчика, такая схема может работать только в том случае, когда отправители и получатели полностью доверяют друг другу. [35]
Вариантом этой идеи является запуск программы получателя прямо в обработчике прерываний, что позволяет избежать хлопот с созданием временного потока. Чтобы еще ускорить эту схему, в само сообщение можно включить адрес обработчика, поэтому, когда оно прибудет, обработчик будет вызван с помощью всего нескольких команд процессора. Большой выигрыш данной схемы заключается в том, что копирование вообще не нужно. Обработчик получает сообщение от интерфейсной платы и обрабатывает его на лету. Поскольку каждое сообщение содержит адрес обработчика, такая схема может работать только в том случае, когда отправители и получатели полностью доверяют друг другу. [36]
Сопрограмма, обратившаяся к IOTRANSFER, этим самым объявляет себя обработчиком прерывания. [37]
Это объясняется тем, что при работе в режиме управления и обработчик прерываний, и другие системные механизмы пользуются альтернативным набором регистров. [38]
Похожие трудности могут иметь место и в том случае, когда обработчик прерывания прерывает себя сам. [39]
Произошло программное прерывание в программе, отличающейся от SVC-программы первого типа или обработчика прерываний ввода-вывода, и не указана программа обработки прерываний этого типа; х - код программного прерывания. [40]
Приоритетные прерывания по магистрали VXIbus организуются путем передачи от запросчика ( Interrupter) обработчику прерываний ( Interrupt Handler) сигналов запроса по семи линиям, отличающимся приоритетностью обработки запросов. Соответственно, запрос на прерывание может иметь семь уровней приоритета. Кроме того, при определении обработчиком прерываний адреса запросчика для организации с ним обмена, ответ запросчика происходит по цепочечной линии ( IACKIN, IACKOUT), проходящей через все модули, установленные в крейте VXI. Эта линия организована таким образом, что при наличии запросов одновременно от нескольких модулей, обмен будет установлен с тем из них, который расположен в слоте, наименее удаленном от слота ноль, в котором установлен обработчик прерываний. [41]
Администратор ресурсов выполняет также распределение линий приоритетного прерывания магистрали VXIbus между различными прерывателями и обработчиками прерываний системы. Каждая линия приоритетного прерывания может быть присвоена только одному обработчику, но нескольким прерывателям. [42]
В результате ассемблирования и выполнения макрокоманды ЕХСР происходит прерывание по обращению к супервизору, и обработчик прерываний передает управление супервизору ввода-вывода. [43]
Процедура IOTRANSFER может использоваться исключительно в приоритетных модулях, поскольку, как мы помним, обработчик прерывания всегда является критической областью. Любая процедура, вызываемая изнутри обработчика прерывания, для обеспечения непрерываемое сама должна содержаться в приоритетном модуле. [44]
Машины, предусматривающие несколько уровней прерываний, связанных с выполнением прикладных программ, обеспечивают возможность функционирования нескольких обработчиков прерываний FLIH и нескольких диспетчеров. В зависимости от структуры конкретной системы дополнительные диспетчеры могут включаться в ядро, а могут в него и не включаться. [45]