Vlajka přerušení - Interrupt flag

Přerušení příznak ( IF ) je příznak bit v CPU ‚s FLAGS registrovat , který určuje, zda (CPU) bude nebo nebude okamžitě reagovat na Maskable hardwarové přerušení . Pokud je příznak nastaven na 1maskovatelné, jsou povolena přerušení. Pokud resetujete (nastavíte na 0), budou tato přerušení deaktivována, dokud nebudou povolena přerušení. Interrupt vlajky nemá vliv na zacházení s nemaskovatelné přerušení (NMI), nebo softwarové přerušení generovaných INT instrukce.

Nastavení a vymazání

V systému využívajícím architekturu x86 instrukce CLI ( Cl ear I nterrupt) a STI ( S e t I nterrupt). POPF ( Pop F lags) odstraní slovo ze zásobníku do registru FLAGS , což může mít za následek nastavení nebo vymazání příznaku přerušení na základě bitu v registru FLAGS z horní části zásobníku.

Úroveň oprávnění

V systémech, které podporují privilegovaný režim, mohou příznaky přerušení upravit pouze privilegované aplikace (obvykle jádro OS ) . V systému x86 to platí pouze pro kód chráněného režimu (kód v reálném režimu může vždy upravit příznak Přerušení ). CLI a STI jsou privilegované instrukce, které způsobí obecnou poruchu ochrany, pokud se je pokusí spustit neprivilegovaná aplikace. Instrukce POPF nezmění příznak Přerušení, pokud je aplikace neprivilegovaná.

Staré programy DOS

Některé staré programy DOS, které používají extender DOS v chráněném režimu a instalují si vlastní obsluhy přerušení (obvykle hry), používají instrukci CLI v obslužných programech k deaktivaci přerušení a buď POPF (po odpovídajícím PUSHF) nebo IRET (který obnovuje příznaky ze zásobníku jako součást jeho účinků) jej obnovit. To funguje, pokud byl program spuštěn v reálném režimu, ale způsobuje problémy při spuštění takových programů v kontejneru na bázi DPMI v moderních operačních systémech (například NTVDM pod Windows NT nebo novější). Protože je CLI privilegovanou instrukcí, spustí chybu v operačním systému, když se ji program pokusí použít. OS pak obvykle přestane dodávat přerušení programu, dokud program neprovede STI (což by způsobilo další chybu). Instrukce POPF však není privilegovaná a jednoduše se tiše nepodaří obnovit IF. Výsledkem je, že OS přestane dodávat přerušení programu, který pak přestane reagovat. Programy DOS, které nepoužívají prodlužovač chráněného režimu, tímto problémem netrpí, protože se spouští v režimu V86, kde POPF spouští poruchu.

Existuje několik uspokojivých řešení tohoto problému. Obvykle není možné program upravit, protože zdrojový kód obvykle není k dispozici a v proudu instrukcí není prostor pro zavedení STI bez rozsáhlých úprav na úrovni sestavení. Odebrání CLI z programu nebo způsobení úplného ignorování CLI hostitelem V86 může způsobit další chyby, pokud obslužné rutiny přerušení hosta nejsou bezpečné pro opětovné vstupy (ačkoli když jsou spuštěny na moderním procesoru, obvykle se provádějí dostatečně rychle, aby se zabránilo překrývání přerušení).

Deaktivace přerušení

V instrukční sadě x86 se CLI běžně používá jako synchronizační mechanismus v uniprocesorových systémech. Například CLI je používán v operačních systémech Chcete-li zakázat přerušení, takže kernel kód (typicky řidič ) může vyhnout souběhu v rámci obsluhy přerušení . To je nutné při úpravách více přidružených tabulek bez přerušení.

Povolení přerušení

STI x86 [[sada instrukcí] umožňuje přerušení nastavením IF.

V některých implementacích instrukce, která umožňuje přerušení, jsou přerušení povolena až po další instrukci. V tomto případě sekvence povolení přerušení bezprostředně následovaná vypnutím přerušení způsobí, že přerušení nebudou rozpoznána.

Úvahy o více procesorech

Přerušení příznak má vliv pouze na jeden procesor. V systémech s více procesory musí obsluha přerušení používat jiné synchronizační mechanismy, jako jsou zámky .

Viz také

Reference

externí odkazy