В каких случаях разные обработчики прерываний могут прерываться / прерываться? - PullRequest
0 голосов
/ 23 апреля 2020

Существует три типа прерываний:

  1. Внешние
  2. Внутренние (программные прерывания)
  3. Системный вызов (на основе внутреннего)

У меня возник вопрос «Могут ли прерывания прерываться или прерываться планировщиком (который также прерывается таймером)?»

После некоторых исследований я совершенно запутался:

  • Кто-то говорит, что есть приоритеты прерываний, и только прерывание с более высоким приоритетом может прервать другое. Это относится только к внешним прерываниям? / Как это устроено в реальной ОС, скажем, x86-64 Linux? Используется ли это? / Хорошо, если какое-то прерывание было прервано, оно будет возобновлено? Кто-то говорит, что прерывания не имеют "контекста", но, как я знаю, выгрузили какой-то процесс / поток происходит с прерываниями от таймера, поэтому можно переключить контекст обратно на прерывание, которое произошло, чтобы выгрузить процесс. Поправьте меня, пожалуйста, если я не прав в этом.
  • Кто-то говорит, что есть какой-то флаг для обработчиков прерываний "INTERRUPTIBLE", и скажем, если какой-то обработчик системного вызова выполняется с этим флагом, установите его может быть прерван сигналом. Это относится только к программным сбоям? Разве внешние прерывания не имеют этого флага? / Что если этот флаг не установлен, но происходит прерывание по таймеру (например), чтобы выгрузить поток? Это игнорируется?
  • Кто-то говорит, что это зависит только от того, что делает обработчик прерываний. Например, если есть системный вызов read (), ожидающий ввода, он устанавливает особые флаги, чтобы планировщик (прерывание по таймеру) мог его прервать и выгрузить. Но если обработчик делает что-то решающее, он может запретить прерывать или выгрузить его, поэтому он сам будет иметь процессор, пока он не закончит. Кажется, в x86 есть много механизмов, и я не совсем понимаю, какой из них используется и как он работает в реальной жизни.
...