Bilgisayarda Kesme Mekanizması: Sinyalden Eyleme
Kesme (interrupt) — işlemcinin mevcut görevini derhal askıya almasını, durumunu kaydetmesini, acil kodu (işleyiciyi) yürütmesini ve ardından kesintiye uğramış işe geri dönmesini sağlayan bir sinyaldir. Bu, bilgisayarın cihazları sürekli yoklamadan gerçek zamanlı olarak dış olaylara (tuşa basma, ağ üzerinden veri gelmesi gibi) tepki vermesini sağlayan temel mekanizmadır.
Kesmeler olmasaydı, işlemci her cihazın durumunu sonsuz döngüde kontrol etmek zorunda kalırdı ("polling"), bu da gücünün %90'ına kadarını boşa harcamasına neden olurdu. Kesmeler sistemi duyarlı ve verimli hale getirir.
İçindekiler
Kesme nedir ve neden gereklidir
Bir kitap okuduğunuzu hayal edin (bu işlemcinin ana görevi). Eğer kulaklarınız olmasaydı, her 5 saniyede bir dikkatinizi dağıtıp posta kutusunu, kapıyı veya telefonu kontrol etmeniz gerekirdi. Bu verimsizdir.
Kesme, kapı zili veya telefon çalması gibi çalışır. Okumaya devam edersiniz, ancak bir sinyal duyulduğunda:
- Durduğunuz yeri hatırlarsınız (bağlamı kaydedersiniz).
- Kapıyı açmaya veya ahizeyi kaldırmaya gidersiniz (kesme işleyicisini yürütürsünüz).
- Aynı yerden okumaya geri dönersiniz (bağlamı geri yüklersiniz).
Bilgisayarda bu, çevre birimlerinin (klavye, disk, ağ kartı) veri hazır olduğunu işlemciye yalnızca gerçekten gerekli olduğunda bildirmesini sağlar.
Süreçteki aktörler: kim kimi keser
Kesme sisteminde üç ana bileşen yer alır:
- Kesme Kaynağı (Device): Sinyali üreten donanım aygıtı (fare, zamanlayıcı, disk denetleyicisi) veya program (sistem çağrısı).
- Kesme Denetleyicisi (Interrupt Controller): Çok sayıda aygıttan gelen sinyalleri toplayan özel bir çip (örneğin modern x86 sistemlerdeki APIC). Öncelikleri belirler: aynı anda bir tuşa basılırsa ve bir ağ paketi gelirse, denetleyici hangi olayın daha önemli olduğuna karar verir ve onu işlemciye iletir.
- İşlemci (CPU): Sinyali alır, mevcut talimat akışını durdurur ve işletim sistemi çekirdeğinin kodunu yürütmeye geçer.
Donanımsal vs Yazılımsal Kesmeler
- Donanımsal (Hardware Interrupts, IRQ): Fiziksel aygıtlar tarafından üretilir. Asenkronlardır (her an gerçekleşebilirler).
- Yazılımsal (Software Interrupts/Exceptions): Hata durumunda (sıfıra bölme, geçersiz belleğe erişim) veya program komutuyla (sistem çağrısı
syscall) işlemci tarafından üretilir. Senkronlardır (belirli bir talimata bağlıdır).
Adım adım işleme algoritması
Bir olay gerçekleştiğinde, sistem katı bir eylem dizisi gerçekleştirir. Bu süreç mikro- veya nanosaniyeler sürer, ancak mantıksal olarak şu şekilde görünür:
- Sinyal Üretimi: Aygıt, kesme denetleyicisine elektriksel bir impuls gönderir.
- Mevcut Talimatın Tamamlanması: İşlemci yürütmeyi bir komutun ortasında kesmez. Mevcut makine talimatının bitmesini bekler.
- Bağlamın Kaydedilmesi: İşlemci, komut sayacının değerini (bir sonraki talimatın adresi) ve bayrak register'larını otomatik olarak yığına (stack) kaydeder. Bu, daha sonra geri dönebilmek için bir "yer imi"dir.
- İşleyicinin Bulunması: İşlemci, kesme vektör tablosuna (IDT — Interrupt Descriptor Table) başvurur. Bu, her kesme türüne (örneğin klavye için #1, zamanlayıcı için #32) bir işleyici fonksiyonunun adresinin atandığı bir adres dizisidir.
- ISR'nin Yürütülmesi (Interrupt Service Routine): İşlemci bulunan adrese gider ve aygıt sürücüsünün kodunu yürütür.
- Bağlamın Geri Yüklenmesi: İşleyici tamamlandıktan sonra işlemci, kaydedilen verileri yığından çıkarır.
- Geri Dönüş: Ana programın yürütülmesi, durduğu yerden devam eder.
Top-half ve Bottom-half: Yükün dağıtılması
Kesme işleyicilerinin (ISR) mümkün olduğunca hızlı çalışması gerekir. ISR yürütülürken, aynı veya daha düşük öncelikli diğer kesmeler genellikle engellenir. Kesme içinde her şeyi tek tek işlemeye çalışırsanız, sistem olay akışı nedeniyle "donabilir" (örneğin ağdan büyük bir dosya indirirken).
Bu nedenle modern işletim sistemlerinde (Linux, Windows) iki seviyeli bir model kullanılır:
| Seviye | Ad | Ne yapar | Hız Gereksinimi |
|---|---|---|---|
| Üst | Top-half (Hard IRQ) | Minimum iş: Aygıt register'ından bir bayt okur, kesme bayrağını temizler, verileri bellek arabelleğine kopyalar. | Son derece yüksek. Donanım için kritiktir. |
| Alt | Bottom-half (Softirq, Tasklet, DPC) | Ağır iş: Protokollerin ayrıştırılması, diske yazma, verilerin kullanıcı uygulamasına iletilmesi. Kesmelere izin verildiğinde daha sonra yürütülür. | Daha fazla zaman alabilir. İşletim sistemi tarafından planlanır. |
Yeni başlayan hatası: Karmaşık hesaplamaları veya giriş-çıkış işlemlerini doğrudan kesme işleyicisi (Top-half) içinde gerçekleştirmeye çalışmak. Bu, diğer aygıtlardan veri kaybına ve tüm sistemin gecikmesinin (latency) artmasına neden olur.
PC dünyasından gerçek örnekler
1. Klavyede bir tuşa basma
- "A" tuşuna basarsınız.
- Klavye denetleyicisi bir kesme gönderir (genellikle IRQ1).
- İşlemci oyunu veya metni keser.
- Top-half: Sürücü, klavye portundan tarama kodunu okur ve bunu çekirdeğin halka arabelleğine koyar.
- İşlemci oyuna geri döner.
- Bottom-half: İşletim sisteminin giriş alt sistemi, kodu arabellekten alır, düzen dikkate alınarak "A" karakterine dönüştürür ve aktif pencereye gönderir.
2. Ağ paketi
- Kablo üzerinden bir veri paketi gelir.
- Ağ kartı bunu kendi belleğine (DMA) yükler ve kesme gönderir.
- Top-half: Sürücü karta paketin alındığını bildirir ve bir sonraki paket için yeni boş bir arabellek ayırır.
- Bottom-half: Ağ yığını (TCP/IP) başlıkları ayrıştırır, sağlama toplamlarını kontrol eder ve verileri tarayıcıya iletir.
3. Sistem zamanlayıcısı
- Zamanlayıcı her 1–10 ms'de bir tetiklenir (çekirdek ayarlarına bağlı olarak).
- Kesme, görev zamanlayıcısının çalışmasını sağlar.
- İşletim sistemi, işlemciyi başka bir programa vermenin zamanının gelip gelmediğine karar verir (bağlam değiştirme). Bu olmadan, donmuş bir program işlemciyi sonsuza kadar ele geçirebilirdi.
Sık karşılaşılan sorunlar ve hatalar
Modern sistemlerde bile kesme mekanizmaları darboğaz haline gelebilir.
- Interrupt Storm (Kesme Fırtınası): Aygıtın, işlemcinin onları işleyebildiğinden daha sık kesme ürettiği durum. Sistem tamamen durur, yalnızca fare imlecine (başka bir çekirdekteyse) tepki verir veya hiç tepki vermez.
- Çözüm: Mesajların doğrudan belleğe yazıldığı MSI (Message Signaled Interrupts) modunun kullanılması ve kesmelerin çekirdekler arasında dengelenmesi (IRQ Affinity).
- Latency (Gecikme): Olay ile işlenmeye başlanması arasındaki süre. Yüksek gecikme, ses arayüzleri ve çevrimiçi oyunlar için kritiktir.
- Çözüm: Çekirdek izolasyonu (bir çekirdeğin yalnızca kesme işleme için ayrılması), realtime çekirdeklerin (PREEMPT_RT) kullanılması.
- Spurious Interrupts (Sahte Kesmeler): Sinyal geldi, ancak aygıt hiçbir şey göndermedi (parazitler veya sürücü hataları nedeniyle).
- Çözüm: İyi bir sürücü, ISR içinde her zaman aygıtın durumunu kontrol eder. Olay doğrulanmazsa, işleyici hemen çıkar.
SSS
Kesme sayısı bilgisayarın hızını etkiler mi? Evet, ancak dolaylı yoldan. Her kesme, register'ların kaydedilmesi/geri yüklenmesi ve bağlam değiştirme için ek yük gerektirir. Çok sayıda küçük kesme akışı olduğunda (örneğin saniyede milyonlarca paket üreten ucuz bir ağ adaptöründen), işlemci yararlı işten ziyade kesmeleri yönetmek için daha fazla zaman harcayabilir.
Kesmeler devre dışı bırakılabilir mi?
Tamamen hayır, sistem donar. Ancak kritik kod bölümlerini korumak için bir çekirdekte kesmeler geçici olarak yasaklanabilir (assembly'de cli/sti). Kullanıcı programlarında güvenlik nedeniyle kesmelerin doğrudan yönetimi genellikle mümkün değildir.
MSI ve MSI-X nedir? Bunlar kesme teslimatının modern yöntemleridir. Ayrı fiziksel teller (IRQ hatları) kullanmak yerine, aygıt PCIe veri yolu üzerinden doğrudan RAM'e özel bir mesaj yazar. Bu, binlerce benzersiz kesme vektörüne sahip olunmasını ve çok çekirdekli işlemcilerde yükün daha iyi dağıtılmasını sağlar.
Dosya kopyalarken fare neden bazen "takılıyor"? Yoğun disk giriş-çıkışı veya ağ yükü sırasında sık kesmeler oluşur. Bunlar fare akışını yönetenle aynı çekirdek tarafından işleniyorsa veya kesme kuyruğu doluysa, fare hareketinin işlenmesi gecikir. Farklı aygıtların farklı çekirdeklere bağlanması (IRQ Affinity) genellikle bu sorunu çözer.