Поиск по сайту:
Проходимец — это средняя стадия между «ничто» и «первопроходец» (С.Н. Федоров).

Как ядро Linux обрабатывает аппаратные прерывания

13.05.2024
Как ядро Linux обрабатывает аппаратные прерывания

Вы когда-нибудь задумывались, откуда ваш компьютер знает, что делать, когда вы нажимаете enter на клавиатуре или подключаете USB-накопитель? Это два распространенных примера обработки аппаратных прерываний, ключевого механизма ядра Linux практически в каждом взаимодействии между внутренними процессами и обмене данными между внешними устройствами. В этой статье мы рассмотрим, как обрабатываются прерывания в операционной системе Linux, начиная с того, что это такое и какую роль они выполняют.

 

Что такое прерывания?

Прерывания – это события, которые приостанавливают выполнение программ для выполнения других задач. Существуют аппаратные и программные прерывания, отправляемые либо аппаратными устройствами— либо определенными процессами, запущенными в операционной системе. Программируемый контроллер прерываний (PIC) отправляет запрос на прерывание (IRQ) в центральный процессор и выполняет процедуру обслуживания прерываний (ISR). Затем текущий процесс прерывается до завершения ISR.

 

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

Обработчик прерываний в ядре выполняет несколько запросов ISR. ISR обрабатывает событие запроса (аппаратное или программное прерывание), затем отправляет его в центральный процессор, приостанавливая активный процесс. По завершении ISR центральный процессор возобновит процесс. Обработка прерываний – самая сложная задача, управляемая ядром Linux. При обработке прерываний могут возникать различные проблемы:

  • Прерывания могут возникать в любое время, обычно известные как асинхронные прерывания.
  • Ядру Linux может потребоваться обработать новое прерывание, когда оно обрабатывает предыдущее. В этом случае ядро будет использовать подход first in, first out (FIFO).
  • При непрерывном возникновении нескольких прерываний ядро должно отключать жизненно важные части, чтобы предотвратить серьезные проблемы, такие как ошибки прерывания (сбои в аппаратных устройствах, таких как CPU или RAM) или системные сбои, возникающие в результате программных ошибок или проблем ввода-вывода).
Читать  Программирование сокетов Python

 

Основная роль прерываний

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

 

Типы прерываний

Ядро Linux должно обрабатывать три вида прерываний: программные прерывания, аппаратные прерывания и исключения.

Программные прерывания

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

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

Аппаратные прерывания

Устройства используют аппаратные прерывания для взаимодействия с центральным процессором. Если центральный процессор доступен, он приостанавливает текущий поток и выполняет задание по обработке прерываний для устройства. Например, системным администраторам необходимо ввести токен аутентификации, чтобы войти на рабочий сервер и обновить таблицу пользователей в базе данных MySQL.

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

Читать  Как обрезать (очистить) файлы в Linux

Типы аппаратных прерываний

Аппаратные прерывания можно разделить на два типа:

Маскируемый

  • Может быть отложено, отключено или проигнорировано в зависимости от его приоритета
  • Используется с периферийными устройствами
  • Может быть векторным или невекторным

Немаскируемый

  • Требуется для немедленных действий при их возникновении
  • Используется в чрезвычайных ситуациях, например, при отключении электроэнергии
  • Может быть только векторным

 

Исключения

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

Существует три типа исключений:

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

 

Как ядро обрабатывает аппаратные прерывания?

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

 

Можно ли избежать аппаратных прерываний?

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

Читать  Включить подсветку синтаксиса в Vim

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

Маскируемые прерывания

Маскируемые прерывания можно включать или выключать, изменяя конфигурацию их флага. Например, в сборке x86 аппаратные прерывания можно отключить, установив значение флага прерывания равным 0.

Устройства также можно отключить, чтобы помешать им подключаться к производственному серверу. Например, чтобы отключить подключение устройств через USB в дистрибутиве Ubuntu, запустите следующую командную строку:

chmod 700 /usr/lib/gvfs/gvfsd-mtp

 

chmod 700 /usr/lib/gvfs/gvfsd-afc

 

Немаскируемые прерывания

К сожалению, можно отключить только маскируемые прерывания, чтобы избежать аппаратных прерываний; немаскируемых прерываний избежать невозможно.

 

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Процессоры AMD Zen 5 могут работать медленнее, чем ожидалось, если…

Спасибо!

Теперь редакторы в курсе.