İşlemcilerin Interrupt'u handle etme biçimleri

Donanım tarafından işlemciye yollanan her elektriksel sinyal aslında birer interruptur ve interrupt requsti olsun olmasın işlemciye veya işlemciye doğrudan bağlı bir multiplexir entegre vasıtası ile doğrudan yollanırlar. Bu donanım - işlemci , işlemci -donanım arasında gerçekleşen bir olaydır.

FPGA ile özel amaçlı işlemciler ile karşılastırılırsa günümüzde bütün işlemcilerde kendi içinde amaça yönelik haberleşme ve sinyal işleme modülleri bulundururlar. Bu sayede ise yazılımcının dış dünyaya bu modüller vasıtası ile erişerek donanımlara üzerinde yetki sahibi olmayı kolaylaştırırlar.

Her yeni bir elektriksel sinyaller, işlemciye yeni bir olay olduğunu bildirirler. Eğer yazılımcı bu isteğin önemli bir olay olduğunu ve işlenmesi gerektiğini söylüyor ise bu işlemci üzerindeki registerlerin interrupt özelliğinin açılması ile gerçekleşir.

İşlemci üzerinde bir çok haberleşme ve sinyal işleme modülü olduğunu söylemiştik. Bunlar genel olarak ADC, I2C, GPIO, PWM, USART, UART, SPI gibi haberleşme protokolleridir. Bu protokollerin elektriksel sinyale dönüştürülmesi veya elektriksel sinyalden binary bir değere dönüşmesi tamamiyle işlemcinin bunu yorumlaması ile ilgilidir. Örneğin ben bu yazıyı yazarken yaklaşık 3.000 kez tuşa bastım ve işlemci yaklaşık 3.000 kez yaptıı işi bırakarak benim klavyeden aldığım karakteri ekrana bastı. Bunu da tamamiyle interrupt driven mekanizması ile yaptı.

Genel olarak donanımsal işlemcinin saat sinyaline senkron olmadan asenkron bir biçimde veri yollarlar. Örnek olarak serial port veya klavyedeki tuşlara basılması gibi... Bunlar işlemci ve işletim sistemi herhangi bir işlemi yerine getirirken oluşabilir.

İnterrupt, yazılımsal kesme olmadığı sürece, (qt signal-slot gibi) tamamen elektriksel sinyaller vasıtası ile oluşurlar. Fakat burda bilinmesi gereken noktalardan biride illegal bir yazılım veya memory alanı ihlalide işlemci içinde interrupt oluşur lakin bu elektriksel sinyal kaynaklı interrupt değildir. Burda bu kesmeleri işlemci kendi içinde oluşturduğu için elektriksel olarak karıştırabilirsiniz lakin hiçbir alakası yoktur.

Örnek olarak, ARM işlemcilerde HardFault Handler veya MPU hatalarında oluşan Bus_Fault verilebilir.

İşlemciler Interruptları genel olarak bir sıraya sokarak numaralandırmışlardır. Bu numaralandırma vasıtası ile birden fazla interrupt kaynağının işlenebilmesi ve bu kesmelere birer öncelik atanabilmesi sağlanmıştır. Bu kesmelere öncelik verilebilmektedir. Örnek olarak ARM'ın NVIC sistemi sayesinde kesmeler önceliklerine göre bir sıraya konulabilmektedirler. Ayrıca belirtmek gerekirki NVIC ve benzeri yapılar sayesinde bazı işletim sistemi kesmeleride donanımsal kesmelerden daha öncelikli olabilmektedir. Yani kernel içindeki bir önceliği yüksek bir software interrupt, işlemcinin kendi içinde oluşturabileceği bir interruptu ezebilmektedir.Bu yüzden ARM Inc'e sonsuz teşekkürler.

Farklı kesmelerin farklı numaralara sahip olduğunu söylemiştik bu sayede aynı anda oluşan kesmeler id ve önceliklerine göre bir sıraya sokulur ve işletim sistemine notify atılır(IRQ Handler...)

Bu kesmelere ait numaralar aslında bir Interrupt Request(IRQ) olarak adlnandırılırlar. Her IRQ farklı bir interruptu temsil etmektedir. Fakat bazı işlemci türlerinde yazılımların ve işletim sistemlerinin taşınabilirliğini arttırmak amacı ile IRQ 0 ilgili işlemci mimarisinin systick handleri, IRQ 1 ise klavye kesmesi olarak atanmıştır.

PCI veya başka spesifik donanımların kesme değerleri ise dinamik olarak atanmıştır ve kernel bu numaraları bilir. Kernel bu donanımlarda herhangi bir interrupt meydana gelir ise bilir ve gerekli işlemleri yapar.

results matching ""

    No results matching ""