Запрещение определенной линии прерывания

Запрещение определенной линии прерывания

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

void disable_irq(unsigned int irq);

void disable_irq_nosync(unsigned int irq);

void enable_irq(unsigned int irq);

void synchronize_irq(unsigned int irq);

Первые две функции позволяют запретить указанную линию прерывания в контроллере прерываний. Это запрещает доставку данного прерывания всем процессорам в системе. Кроме того, функция disable_irq() не возвращается до тех пор, пока все обработчики прерываний, которые в данный момент выполняются, не закончат работу. Таким образом гарантируется не только то, что прерывания с данной линии не будут доставляться, но и то, что все выполняющиеся обработчики закончили работу. Функция disable_irq_nosync() не имеет последнего свойства.

Функция synchronize_irq() будет ожидать, пока не завершится указанный обработчик, если он, конечно, выполняется.

Вызовы этих функций должны быть сгруппированы, т.е. каждому вызову функции disable_irq() или disable_irq_nosync() должен соответствовать вызов функции enable_irq(). Только после последнего вызова функции enable_irq() линия запроса на прерывание будет снова разрешена. Например, если функция disable_irq() последовательно вызвана два раза, то линия запроса на прерывание не будет разрешена, пока функция enable_irq() тоже не будет вызвана два раза.

Эти три функции могут быть вызваны из контекста прерывания и из контекста процесса и не приводят к переходу в приостановленное состояние (sleep). При вызове из контекста прерывания следует быть осторожным! Например, нельзя разрешать линию прерывания во время выполнения обработчика прерывания (вспомним, что линия запроса на прерывание обработчика, который в данный момент выполняется, является замаскированной).

Было бы также плохим тоном запрещать линию прерывания, которая совместно используется несколькими обработчиками. Запрещение линии прерывания запрещает доставку прерываний для всех устройств, которые используют эту линию. Поэтому в драйверах новых устройств не рекомендуется использовать эти интерфейсы[33]. Так как устройства PCI должны согласно спецификации поддерживать совместное использование линий прерываний, они вообще не должны использовать эти интерфейсы. Поэтому функция disable_irq() и дружественные ей обычно используются для устаревших устройств, таких как параллельный порт персонального компьютера.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Практическое запрещение кэширования

Из книги Разгони свой сайт автора Мациевский Николай

Практическое запрещение кэширования Запретить кэширование можно и прямо из конфигурации Apache (подробная конфигурация для оптимальной производительности приводится в восьмой главе). Для этого нам нужны следующие строки:# Проверяем, что подключен mod_headers# Тогда выставляем


Запрещение/Разрешения на запуск программ

Из книги Реестр Windows автора Климов Александр

Запрещение/Разрешения на запуск программ Запрещение запуска программWindows позволяет ограничить доступ к программам, кроме разрешенных в специальном списке.Для ограничения запускаемых программ надо открыть раздел HKCUSOFTWAREMicrosoftWindowsCurrentVersonPoliciesExplorerи создать там ключ


Запрещение использования сеансов MS-DOS и однозадачного режима MS-DOS (Windows 98)

Из книги Реестр Windows автора Климов А

Запрещение использования сеансов MS-DOS и однозадачного режима MS-DOS (Windows 98) Windows позволяет открывать окно ms-dos и выполнять старые приложения ms-dos. Эта команда доступна в подменю Программы меню Пуск. Для запрета использования сеансов ms-dos откройте (создайте) раздел


Запрещение запуска программ

Из книги Очень хороший самоучитель пользователя компьютером. Как самому устранить 90% неисправностей в компьютере и увеличить его возможности автора Колисниченко Денис Николаевич

Запрещение запуска программ Windows позволяет ограничить доступ к программам, кроме разрешенных в специальном списке.Для ограничения запускаемых программ надо открыть раздел HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersonPoliciesExplorer и создать там ключ RestrictRun типа DWORD со значением 0х00000001. Затем


Запрещение запуска редактора реестра

Из книги Тайм-менеджмент для системных администраторов автора Лимончелли Томас

Запрещение запуска редактора реестра Вы можете запретить запуск редактор реестраДля этого в разделе HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersonPoliciesSystem нужно добавить ключ DisableRegistryTools со значением 0х00000001 типа DWORD. Запуск редактора реестра будет запрещен, однако останется возможность


Зависание после запуска определенной программы

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Зависание после запуска определенной программы Вы запускаете какую-нибудь программу, например игру, и компьютер зависает. Важно определить, зависает ли компьютер только при запуске этой программы или при запуске этого типа программ. Понимаете разницу? Может быть ошибка


Прерывания

Из книги C++. Сборник рецептов автора Диггинс Кристофер

Прерывания Прерывания неизбежны. Это естественная часть нашей работы, и от нас зависит, насколько хорошо мы с ними справляемся.Работать под управлением прерываний означает выполнять задания по мере их поступления, а не в соответствии с какой-то системой приоритетов,


25.3.1. Чтение определенной записи

Из книги Удвоение продаж в интернет-магазине автора Парабеллум Андрей Алексеевич

25.3.1. Чтение определенной записи Функции dpget() и dpgetwb() производят поиск записей в базе данных по ключу.int dpget(DEPOT * depot, const char * key, int keySize, int start, int max, int * dataSize);key является элементом (ключом), с помощью которого производится поиск по базе данных, a keySize определяет длину ключа (или


1.25. Указание определенной библиотеки для автоматической компоновки с исходным файлом

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

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


Увеличение определенной области фотографии

Из книги Цифровой журнал «Компьютерра» № 186 автора Журнал «Компьютерра»

Увеличение определенной области фотографии На рис. 33 вы видите пример работы с очень удобным инструментом для пользователей, который позволяет увеличивать определенную область фотографии. В окошке слева клиент с помощью мыши выбирает прямоугольную область для


Прерывания

Из книги Разработка ядра Linux автора Лав Роберт

Прерывания В этой главе вы научитесь писать обработчики прерываний для QNX/Neutrino и узнаете, как обработчики прерываний влияют на диспетчеризацию


Обработчик прерывания

Из книги автора

Обработчик прерывания Давайте рассмотрим собственно обработчик прерывания. В первом примере применим InterruptAttach(), а затем рассмотрим аналогичный случай, только с применением функции InterruptAttachEvent().Применение функции InterruptAttach()В продолжение примера приведем функцию intHandler()


(DZ) Давид Ян: «Я думаю, что люди, которые толкают науку и бизнес вперёд, в определённой степени безумны» Компьютерра

Из книги автора

(DZ) Давид Ян: «Я думаю, что люди, которые толкают науку и бизнес вперёд, в определённой степени безумны» Компьютерра Опубликовано 13 августа 2013 Дорогие друзья, данным материалом мы хотим открыть на «Компьютерре» серию бесед Дмитрия Завалишина


Прерывания

Из книги автора

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


Запрещение и разрешение прерываний

Из книги автора

Запрещение и разрешение прерываний Для локального запрещения прерываний на текущем процессоре (и только на текущем процессоре) и последующего разрешения можно использовать следующий код.local_irq_disable();/* прерывания запрещены ... */local_irq_enable();Эти функции обычно реализуются в


Запрещение обработки нижних половин

Из книги автора

Запрещение обработки нижних половин Обычно только одного запрещения обработки нижних половин недостаточно. Наиболее часто, чтобы полностью защитить совместно используемые данные, необходимо захватить блокировку и запретить обработку нижних половин. Методы, которые