"Enter"a basıp içeriğe geçin

ARM Mimarisinde İstisnalar, Kesmeler ve Vektör Tablosu

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.

 

Vektör Tablosu
İ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

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.