2009-05-31 19 views

cevap

0

kesmeler ilk kesmeyi sonra devre dışı değildi buysa, ikinci senin kesme hizmet yordamı tekrar çağrılmasına neden olur. Kesin olan bu istenmeyen davranıştan kaçınmak için kesintilerin devre dışı bırakıldığından emin olmalısınız. İlgili kesme rutini adı verilecek: En kesme hizmet yordamı onun şeyi yapıyor ve daha sonra başka kesme oluşursa

Yani, bu başka bir şey yapıyormuş gibi olacaktır. Intel mimarisi üzerinde

, "cli" talimat kesmelerini devre dışı bırakır ve "şti" onları tekrar sağlayacaktır.

2

Sisteme bağlı olarak değişir. Normal olarak, yeni kesme ilkinden daha yüksek bir öncelikse, daha sonra ilk aramaya ilişkin işleyiciyi askıya alır. İşleyici bittiğinde, orijinal kesme işleyicisi devam eder. Son olarak, daha fazla kesinti olmadığını varsayarak, orijinal işleyici sona erer ve normal servis devam eder. Bazen, sürdürülen süreç kesintiye uğramış süreç olacak; Bazen, artık en uygun işlem olmayacak ve bir başkası da devam edecek.

Benzer bir şekilde, ilk işleyici tamamlar, veya bir düşük ya da buna eşit bir öncelik kesme oluşursa ilk işleyici tamamlanana kadar, bu kadar düzenlenecek önceki orijinal kesme bir ikinci veya daha fazla, örneğin oluşursa. Normal işleme yeniden başlamadan önce, çekirdek işlenmesi gereken ancak engellenmiş olan olağanüstü kesmeleri kontrol eder.

Bir kesme işleyicisi diğer kesmeleri engelleyebilir.

4

Aşağıdakiler yalnızca x86 mimarisine de geçerlidir, ancak diğer mimariler de aynı yolu izlediği olabilir:

donanım kesmeleri işlenen veya var olup olmadığını kontrol eder IF (kesme Bayrak) olarak adlandırılan bir işlemci bayrağı vardır

beklemeye alınmak IF = 0 olduğunda, bayrak yeniden etkinleştirilinceye kadar kesmeler ertelenir (NMI hariç, engellenemeyen 'sadece acil durum' kesintisi olarak adlandırılan Maskelenemeyen Kesinti hariç). Bir kesme servis rutin olarak adlandırılan önce

IF

otomatik işlemci tarafından temizlenir. Bu, kesinti çağrılarının kontrol dışına çıkmasını önlemek için gereklidir. Interrupt hizmet kodunun kendisinin bunu yapamayacağını unutmayın, çünkü IF rutini girmeden önce devre dışı bırakılmamışsa, servis kodunun tek bir talimatı bile yürütme zamanı gelmeden önce daha fazla kesintinin gerçekleşmesi mümkün olabilir. Daha sonra, bir "itfaiyeci", hemen (her şeyin) bir yığının taşmasına neden olur.

Yani, doğrudan sorunun cevabı: bir ilk bir servisindeyken ikinci bir donanım kesmesi ortaya çıktığında ilk bitene kadar tipik, o kesme beklemeye alınacaktır.

Her zamanki gibi, tüm hikaye biraz daha karmaşıktır. Intel'in web sitesindeki Intel Architecture Software Developer’s Manual, sayfa 10-4'ten başlayarak daha eksiksiz bir açıklama sunar.

İlgili konular