Merhabalar sevgili ziyaretçiler, bu yazımızın konusu ARM mimarisindeki istisna ve kesme mekanizması olacak. İstisna ve kesmeler gelişmiş mikroişlemcili sistemlerin olmazsa olmazıdır. Farklı sistemlerde farklı yapılarda olsa da temelde amacı sistemi ayakta tutmak ve sistemin sürekliliğini sağlamaktır. Bir istisna veya kesme olduğunda işlemci bulunduğu noktadaki işini bırakır ve bellekteki bu istisna veya kesmeyle ilgili bellek adresine dallanır (bu bellek adresleri önceden belirlenmiş bir vektör tablosunda tutulur). İşlemci burada önceden belirlenen işlemleri yaptıktan sonra kaldığı yerden devam eder. Evet mikroişlemcili sistemlerde istisnalar ve kesmeler özetle böyle. Şimdi bu yapıya ARM mimarisi açısından bakmaya başlayabiliriz. Hadi başlayalım.
Bir istisna veya kesme olduğunda işlemci program sayıcısını (pc) belli bir bellek adresine set eder. Bu adres, vektör tablosu olarak adlandırılan özel bir adres aralığı içinde bulunur. Bu vektör tablosu içindeki girdiler her biri belli bir istisna veya kesmeyi ele almak üzere tasarlanmış spesifik rutinlere dallanan komutlardır.
0x00000000 32-bitlik bellek adresi vektör tablosu için ayrılmıştır. Bazı işlemcilerde vektör tablosu opsiyonel olarak bellekte daha üst bir adreste bulunmaktadır (0xffff0000 başlangıç ofset adresi). Linux ve Microsoft’un bazı gömülü ürünleri bu özelliği kullanmaktalar.
Bir istisna veya kesme oluştuğunda işlemci normal çalışmasını durdurur ve aşağıdaki tabloda verilen istisna vektör tablosundan ilgili komutları yüklemeye başlar. Vektör tablosundaki her girdi belli bir rutinin başlangıç noktasını gösteren bir dallanma komutu içerir. Bu vektörün girdi noktaları şu şekildedir:
- Reset Vektörü: Bu vektör işlemciye güç verildiğinde işlemci tarafından çalıştırılacak ilk komutun konumudur. Bu komut işlemciyi ilklendirme koduna yönlendirir.
- Undefined Instruction (Geçersiz Komut) Vektörü: Bu vektör işlemci bir komutu çözemediğinde kullanılır.
- Software Interrupt (Yazılım Kesmesi) Vektörü: Bu vektör SWI komutu çalıştırıldığında çağrılır. SWI komutu işletim sistemi rutininlerini çağırma mekanizması olarak sıkça kullanılır.
- Prefetch Abort (Komut Ön Getirme İptali) Vektörü: İşlemcinin geçerli erişim izinleri olmaksızın bir adresten bir bir komutu getirmeye çalıştığında meydana gelir. Gerçek iptal işlemi kod çözme aşamasında meydana gelir.
- Data Abort (Veri Getirme İptali) Vektörü: Mantık olarak Prefetch Abort’a benzer şekilde bir komutun geçerli bir erişim izni olmaksızın veri belleğine erişmeye çalıştığında meydana gelir.
- Interrupt Request (Kesme İsteği) Vektörü: Bu kesme vektörü harici donanım kaynaklarından gelen kesmelerde kullanılır. İşlemci dış donanımdan gelen kesme isteklerinde normal akışını keserek buraya dallanır. Bu kesme yalnızca cpsr içerisindeki IRQ bitleri maskelenmemişse oluşur.
- Fast Interrupt Request (Hızlı Kesme İsteği) Vektörü: Normal kesme istek vektörüne benzer fakat daha hızlı yanıt süresi gerektiren donanımlar için ayrılmıştır. Bu kesme yalnızca cpsr içerisindeki FIQ bitleri maskelenmemişse oluşur.
İstisna/Kesme | Kısaltma | Bellek Adresi | Bellek Üst Adresi |
---|---|---|---|
Reset | RESET | 0x00000000 | 0xffff0000 |
Undefined Instruction | UNDEF | 0x00000004 | 0xffff0004 |
Software Interrupt | SWI | 0x00000008 | 0xffff0008 |
Prefetch Abort | PABT | 0x0000000c | 0xffff000c |
Data Abort | DABT | 0x00000010 | 0xffff0010 |
Reserved | – | 0x00000014 | 0xffff0014 |
Interrupt Request | IRQ | 0x00000018 | 0xffff0018 |
Fast Interrupt Request | FIQ | 0x0000001c | 0xffff001c |
İlk Yorumu Siz Yapın