что подразумевается под отключением прерываний? - PullRequest
10 голосов
/ 07 августа 2010

При вводе обработчика inteerupt мы сначала «отключаем прерывания» на этом процессоре (используя что-то вроде инструкции cli на x86).Предположим, что во время отключения прерываний пользователь нажал на клавиатуре букву «а», что обычно вызывает прерывание.Но поскольку прерывания отключены, это означает, что:

  1. обработчик прерываний для 'a' никогда не будет вызываться, поскольку прерывания отключены в критической секции или
  2. , прерываниеобрабатывается ОС, но задерживается до тех пор, пока прерывания не будут снова разрешены.В частности, нужно ли пользователю снова нажимать «а», если в первый раз он нажимал «а» в то время, когда прерывания были отключены?

Ответы [ 5 ]

6 голосов
/ 07 августа 2010

Ответ заключается в том, что это зависит от того, обрабатывали ли вы уже прерывание клавиатуры.

Большинство подпрограмм обработки прерываний (ISR) имеют код по окончании их работы, который сообщает аппаратному обеспечению, что он был "обслужен". В случае контроллера клавиатуры на него записываются команды, подтверждающие полученные байты. В момент подтверждения аппаратное обеспечение контроллера клавиатуры перестает использовать электричество для сигнализации о состоянии прерывания.

Если вы обрабатываете прерывание, не связанное с клавиатурой, скажем, прерывание пожарной тревоги, то аппаратное обеспечение клавиатуры, которое электрически утверждает прерывание, сработает при нажатии клавиши. Электрический сигнал игнорируется до тех пор, пока ЦПУ снова не разрешит прерывания. В конце обслуживания прерывания пожарной сигнализации ISR пожарной сигнализации подтверждает любые данные и повторно активирует прерывания на CPU. Сразу же ЦПУ вводит прерывание, потому что контроллер клавиатуры все еще электрически сигнализирует о состоянии прерывания.

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

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

6 голосов
/ 07 августа 2010

Часто одно прерывание «ставится в очередь» аппаратно.

[Прерывание - это часто просто логический элемент, на котором можно держаться;как только он включен, он остается включенным некоторое время.]

Если пользователь нажмет «a» только один раз в течение интервала, когда прерывания были отключены, он будет зарегистрирован как прерывание, когда они были повторно включены.

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

1 голос
/ 31 августа 2010

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

Удачный ответ заключается в том, что PIC отдает приоритет аппаратным прерываниям, и даже при включенных прерываниях прерывание по таймеру IRQ0 может прерывать ISR клавиатуры. Конечно, NMI может произойти в любом случае, но, к счастью, это никогда не происходит на текущем ПК.

0 голосов
/ 05 марта 2013

Отключить прерывание имеют разные доказательства.1. Аппаратная ошибка 2. Исключения {например: Разделить на ноль} и т. Д.

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

Или, например: для устройства ввода-вывода.если перерыва не было, компьютер не был эффективен!

0 голосов
/ 07 августа 2010

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

На ПК - это ПУТЬ обратно к моемуPCXT days - клавиатурная подсистема может удерживаться в районе 13 нажатий клавиш для процессора.

...