Kesme bayrağı - Interrupt flag

Kesme bayrağı ( IF ) bir bayrak biraz olarak CPU 'in BAYRAK kayıt (CPU) olup olmadığını belirler, Maskelenemez donanım hemen cevap verecektir kesme . Bayrak, 1maskelenebilir kesmelere ayarlanırsa etkinleştirilir. Sıfırlanırsa ( olarak ayarlanır 0), bu tür kesintiler, kesintiler etkinleştirilene kadar devre dışı bırakılır. Kesme bayrağı ele alınmasını etkilemez maskelenemez kesmeleri tarafından üretilen (UME'ler) ya da yazılım kesmesi INT talimatı.

Ayarlama ve temizleme

Kullanan bir sistemde 86 mimarisi, talimatlar CLI ( kulak I nterrupt) ve STI ( S E t ı nterrupt). POPF ( pop F gecikme) içine istiften bir kelime kaldırır BAYRAK kayıt neden olabilir, kesme bayrağı olmak grubu veya bitine göre temizlenmiş BAYRAK kayıt ve en üstteki.

ayrıcalık seviyesi

Ayrıcalıklı modu destekleyen sistemlerde, yalnızca ayrıcalıklı uygulamalar (genellikle işletim sistemi çekirdeği ) Kesme bayrağını değiştirebilir . Bir x86 sisteminde bu yalnızca korumalı mod kodu için geçerlidir ( Gerçek mod kodu her zaman Kesme bayrağını değiştirebilir ). CLI ve STI, ayrıcalığı olmayan bir uygulama bunları yürütmeye çalışırsa genel bir koruma hatasına neden olan ayrıcalıklı talimatlardır. Uygulamanın ayrıcalığı yoksa, POPF komutu Kesinti bayrağını değiştirmez .

Eski DOS programları

Korumalı mod DOS genişletici kullanan ve kendi kesme işleyicilerini (genellikle oyunlar) kuran bazı eski DOS programları, kesmeleri devre dışı bırakmak için işleyicilerdeki CLI komutunu ve ya POPF (ilgili bir PUSHF'den sonra) ya da IRET (bayrakları yığından geri yükler) kullanır. etkilerinin bir parçası olarak) geri yüklemek için. Bu, program gerçek modda başlatıldıysa çalışır, ancak bu tür programlar modern işletim sistemlerinde ( Windows NT veya sonraki sürümlerde NTVDM gibi) DPMI tabanlı bir kapsayıcıda çalıştırıldığında sorunlara neden olur . CLI ayrıcalıklı bir talimat olduğundan, program onu ​​kullanmaya çalıştığında işletim sisteminde bir hatayı tetikler . İşletim sistemi daha sonra, program STI'yi yürütene kadar (başka bir hataya neden olur) programa kesme göndermeyi bırakır. Ancak, POPF talimatı ayrıcalıklı değildir ve IF'yi geri yüklemek için sessizce başarısız olur. Sonuç olarak, işletim sistemi programa kesintiler göndermeyi durdurur ve program askıda kalır. Korumalı mod genişletici kullanmayan DOS programları, POPF'nin bir hatayı tetiklediği V86 modunda çalıştıkları için bu sorundan etkilenmezler.

Bu konuda birkaç tatmin edici çözüm var. Kaynak kodu genellikle mevcut olmadığından ve montaj düzeyinde büyük düzenleme olmadan bir STI'yi tanıtmak için talimat akışında yer olmadığından, programı değiştirmek genellikle mümkün değildir. CLI'leri programdan kaldırmak veya V86 ana bilgisayarının CLI'yi tamamen yok saymasına neden olmak, misafirin kesme işleyicileri yeniden giriş güvenli değilse başka hatalara neden olabilir (ancak modern bir işlemcide yürütüldüğünde, kesintilerin çakışmasını önlemek için genellikle yeterince hızlı yürütülürler).

Kesintileri devre dışı bırakma

Gelen x86 talimat seti CLI yaygın bir şekilde kullanılan senkronizasyon tek işlemcili sistemlerde mekanizma. Örneğin, işletim sistemlerinde kesintileri devre dışı bırakmak için bir CLI kullanılır, böylece çekirdek kodu (tipik olarak bir sürücü ) bir kesme işleyicisi içindeki yarış koşullarından kaçınabilir . Bu, birden çok ilişkili tabloyu kesintisiz olarak değiştirirken gereklidir.

Kesintileri Etkinleştirme

CYBE x86 [[komut kümesi] EĞER ayarlayarak kesmeleri mümkün kılar.

Kesintileri etkinleştiren talimatın bazı uygulamalarında, bir sonraki talimat sonrasına kadar kesintiler etkinleştirilmez. Bu durumda, kesintileri etkinleştirme ve ardından kesintileri devre dışı bırakma sırası, kesintilerin tanınmamasına neden olur.

Çok İşlemcili Hususlar

Kesme bayrağı tek bir işlemci etkiler. Çok işlemcili sistemlerde bir kesme işleyicisi, kilitler gibi diğer senkronizasyon mekanizmalarını kullanmalıdır .

Ayrıca bakınız

Referanslar

Dış bağlantılar