Jump to content

Флаг прерывания

(Перенаправлено из STI (инструкция x86) )

Флаг прерывания ( IF флага ) — это бит в процессора , который определяет , регистре FLAGS будет ли процессор немедленно реагировать на маскируемые аппаратные прерывания . [ 1 ] Если флаг установлен на 1 маскируемые прерывания включены. При сбросе (установлено значение 0) такие прерывания будут отключены до тех пор, пока прерывания не будут разрешены. Флаг прерывания не влияет на обработку немаскируемых прерываний (NMI) или программных прерываний, генерируемых инструкцией INT .

Настройка и очистка

[ редактировать ]

системе, использующей x86 инструкции CLI ( Clear , используются Interrupt ) и STI ( Set Interrupt архитектуру В ). POPF ( Pop Flags ) удаляет слово из стека в регистр FLAGS , что может привести к установке или очистке флага прерывания на основе бита в регистре FLAGS из вершины стека. [ 1 ]

Уровень привилегий

[ редактировать ]

В системах, поддерживающих привилегированный режим, только привилегированные приложения (обычно ядро ​​ОС ) могут изменять флаг прерывания . В системе x86 это применимо только к защищенного режима коду (код реального режима всегда может изменять флаг прерывания ). CLI и STI — это привилегированные инструкции, которые вызывают общую ошибку защиты, если непривилегированное приложение пытается их выполнить. Инструкция POPF не будет изменять флаг прерывания , если приложение непривилегировано.

Старые программы DOS

[ редактировать ]

Некоторые старые программы DOS , использующие расширитель DOS в защищенном режиме и устанавливающие собственные обработчики прерываний (обычно игры), используют в обработчиках инструкцию CLI для отключения прерываний и либо POPF (после соответствующего PUSHF), либо IRET (который восстанавливает флаги из стека). как часть его эффектов), чтобы восстановить его. Это работает, если программа была запущена в реальном режиме, но вызывает проблемы, когда такие программы запускаются в контейнере на основе DPMI в современных операционных системах (например, NTVDM под Windows NT или более поздней версии). Поскольку CLI является привилегированной командой, она вызывает ошибку в операционной системе, когда программа пытается ее использовать. Затем ОС обычно перестает выдавать прерывания программе до тех пор, пока программа не выполнит STI (что может вызвать еще одну ошибку). Однако инструкция POPF не является привилегированной и просто не может автоматически восстановить IF. В результате ОС перестает доставлять прерывания программе, которая затем зависает. Программы DOS, которые не используют расширитель защищенного режима, не страдают от этой проблемы, поскольку они выполняются в режиме V86, где POPF действительно вызывает ошибку.

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

Отключение прерываний

[ редактировать ]

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

Включение прерываний

[ редактировать ]

STI x86 набора команд разрешает прерывания, устанавливая IF.

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

Соображения о многопроцессорности

[ редактировать ]

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

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б «Руководство разработчика программного обеспечения для архитектуры Intel, том 2: Справочное руководство по набору команд» (PDF) . Проверено 13 июля 2007 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4a0c702f2e345bce43755c63b1cad7fb__1671383760
URL1:https://arc.ask3.ru/arc/aa/4a/fb/4a0c702f2e345bce43755c63b1cad7fb.html
Заголовок, (Title) документа по адресу, URL1:
Interrupt flag - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)