Запрещение определенной линии прерывания
Запрещение определенной линии прерывания
В предыдущем разделе были рассмотрены функции, которые позволяют запретить доставку всех прерываний на определенном процессоре. В некоторых случаях полезным может оказаться запрещение определенной линии прерывания во всей системе. Это называется маскированием линии прерывания. Например, может потребоваться запрещение доставки прерывания от некоторого устройства перед манипуляциями с его состоянием. Для этой цели операционная система 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() и дружественные ей обычно используются для устаревших устройств, таких как параллельный порт персонального компьютера.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Прерывания
Прерывания Прерывания позволяют аппаратным устройствам взаимодействовать с процессором. Например, при наборе на клавиатуре контроллер клавиатуры (или другое устройство, которое обслуживает клавиатуру) генерирует прерывание, чтобы объявить операционной системе о том,
Запрещение и разрешение прерываний
Запрещение и разрешение прерываний Для локального запрещения прерываний на текущем процессоре (и только на текущем процессоре) и последующего разрешения можно использовать следующий код.local_irq_disable();/* прерывания запрещены ... */local_irq_enable();Эти функции обычно реализуются в
Запрещение обработки нижних половин
Запрещение обработки нижних половин Обычно только одного запрещения обработки нижних половин недостаточно. Наиболее часто, чтобы полностью защитить совместно используемые данные, необходимо захватить блокировку и запретить обработку нижних половин. Методы, которые
Прерывания
Прерывания В этой главе вы научитесь писать обработчики прерываний для QNX/Neutrino и узнаете, как обработчики прерываний влияют на диспетчеризацию
Обработчик прерывания
Обработчик прерывания Давайте рассмотрим собственно обработчик прерывания. В первом примере применим InterruptAttach(), а затем рассмотрим аналогичный случай, только с применением функции InterruptAttachEvent().Применение функции InterruptAttach()В продолжение примера приведем функцию intHandler()
Практическое запрещение кэширования
Практическое запрещение кэширования Запретить кэширование можно и прямо из конфигурации Apache (подробная конфигурация для оптимальной производительности приводится в восьмой главе). Для этого нам нужны следующие строки:# Проверяем, что подключен mod_headers# Тогда выставляем
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 определяет длину ключа (или
Запрещение использования сеансов MS-DOS и однозадачного режима MS-DOS (Windows 98)
Запрещение использования сеансов MS-DOS и однозадачного режима MS-DOS (Windows 98) Windows позволяет открывать окно ms-dos и выполнять старые приложения ms-dos. Эта команда доступна в подменю Программы меню Пуск. Для запрета использования сеансов ms-dos откройте (создайте) раздел
Запрещение запуска программ
Запрещение запуска программ Windows позволяет ограничить доступ к программам, кроме разрешенных в специальном списке.Для ограничения запускаемых программ надо открыть раздел HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersonPoliciesExplorer и создать там ключ RestrictRun типа DWORD со значением 0х00000001. Затем
Запрещение запуска редактора реестра
Запрещение запуска редактора реестра Вы можете запретить запуск редактор реестраДля этого в разделе HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersonPoliciesSystem нужно добавить ключ DisableRegistryTools со значением 0х00000001 типа DWORD. Запуск редактора реестра будет запрещен, однако останется возможность
Запрещение/Разрешения на запуск программ
Запрещение/Разрешения на запуск программ Запрещение запуска программWindows позволяет ограничить доступ к программам, кроме разрешенных в специальном списке.Для ограничения запускаемых программ надо открыть раздел HKCUSOFTWAREMicrosoftWindowsCurrentVersonPoliciesExplorerи создать там ключ
Увеличение определенной области фотографии
Увеличение определенной области фотографии На рис. 33 вы видите пример работы с очень удобным инструментом для пользователей, который позволяет увеличивать определенную область фотографии. В окошке слева клиент с помощью мыши выбирает прямоугольную область для
1.25. Указание определенной библиотеки для автоматической компоновки с исходным файлом
1.25. Указание определенной библиотеки для автоматической компоновки с исходным файлом ПроблемаВы написали библиотеку, которую хотите распространять в виде набора заголовочных файлов и готовых статических или динамических библиотек, но не хотите, чтобы пользователи
(DZ) Давид Ян: «Я думаю, что люди, которые толкают науку и бизнес вперёд, в определённой степени безумны» Компьютерра
(DZ) Давид Ян: «Я думаю, что люди, которые толкают науку и бизнес вперёд, в определённой степени безумны» Компьютерра Опубликовано 13 августа 2013 Дорогие друзья, данным материалом мы хотим открыть на «Компьютерре» серию бесед Дмитрия Завалишина
Зависание после запуска определенной программы
Зависание после запуска определенной программы Вы запускаете какую-нибудь программу, например игру, и компьютер зависает. Важно определить, зависает ли компьютер только при запуске этой программы или при запуске этого типа программ. Понимаете разницу? Может быть ошибка
Прерывания
Прерывания Прерывания неизбежны. Это естественная часть нашей работы, и от нас зависит, насколько хорошо мы с ними справляемся.Работать под управлением прерываний означает выполнять задания по мере их поступления, а не в соответствии с какой-то системой приоритетов,