Mikro Işlemcilerde Kural Dışı Durumlar

Kısaca: Programlar çalıştırılırken bazen buyruklarda çeşitli hatalar bulunabilir. Bu hatalar nedeniyle program istenilen şekilde çalışmaz. Hatta işlemcinin kitlenmesine bile sebep olabilir. Bu tür durumlar normal bir işleyiş olmadığından kuraldışı durum teşkil etmektedir.<br /><br /> ...devamı ☟

Programlar çalıştırılırken bazen buyruklarda çeşitli hatalar bulunabilir. Bu hatalar nedeniyle program istenilen şekilde çalışmaz. Hatta işlemcinin kitlenmesine bile sebep olabilir. Bu tür durumlar normal bir işleyiş olmadığından kuraldışı durum teşkil etmektedir.

Kural dışı durumlar çeşitli şekilde sınıflandırılabilir. En önemli iki sınıflandırma olarak birincisi kuraldışı durumun ne zaman yakalandığı ya da yakalandıktan sonra ne yapılacağına göre sınıflandırılması; ikinci olarak ise kural dışı durumun adreslerden ya da içeriğinden kaynaklı olmasına göre sınıflandırmadır.

Ne zaman yakalandığı ya da yakalanınca ne yapılacağına göre sınıflandırmasına bakarsak bu sınıflandırma kendi içinde üçe ayrılmaktadır: Hatalar (fault), tuzaklar (trap) ve iptaller (abort).

Hatalar genellikle bellek adresleri ile ilgili durumlarda ortaya çıkarlar. Hatalar işlemci buyruğu çalıştırmadan önce tespit edilir. Hataya sebep olan buyruk hata ile ilgili yordam çalıştırıldıktan tekrar koşturulur. Bu şekilde olmasının sebebi hataların genellikle adreslerdeki yanlışlıklardan olması, hataların buyruk çalıştırılmadan tespit edilmesi ve hataların işletim sistemi tarafından kolayca çözülebilmesidir.

Tuzaklar ise programcılar tarafından yaptırılan kural dışı durumlardır. Burada amaç bazı kural dışı durumların yardımı ile örneğin sonsuz döngülerden dışarı çıkmaktır. Ayrıca kural dışı durumların çözümünde kullanılan yordamlar programcılar tarafından da değiştirilebilindiğinden bir programlama hilesi olarak da tuzaklar kullanılmaktadır.

İptaller de buyruklardaki işlemlerle ilgili kural dışı durumlardır. Adından da alışılacağı gibi bir iptal tipi kural dışı durum gerçekleştiğinde sorun çözülmeye çalışılmaz program durdurulur. İptallere en büyük örnek sıfıra bölme hatasıdır.

Diğer önemli sınıflandırma ise kural dışı durumun kaynaklandığı yerdir. Bu yerler temel olarak ya adrestir ya da buyruk içersindeki işlemdeki yanlıştır.

Adreslerdeki yanlışlar işlemciye getirilecek buyruğun adresinde ya da işlenenlerin adresinde olabilir. Bu tür kural dışı durumlar buyruk çalıştırılmadan anlaşılabileceği için işlemci adresler üzerinde kontroller yapar ve böylece bu tür kural dışı durumlar çözülmüştür. Adresler ile ilgili üç tane test yapılır. Bu testler limit testi, sayfa hatası testi ve durma noktası (breakpoint) testidir. Limit testi bölünmüş bellekler bulunan (segmenteted memory) bilgisayarlarda anlamlıdır. Buyruk adresinin bölümün dışına çıkıp çıkmadığının yani kendi adres alanının dışına erişip erişmediğinin testidir. Adresin tabanına bölüm büyüklüğü eklenerek üst sınır bulunur ve sonra buyruk adresinin bu aralıkta olup olmadığı kontrol edilir. Sayfa hatası testi sanal bellek kullanıldığında işlemcinin işaret ettiği adres işletim sistemi tarafından buyruğun bulunduğu sayfanın fiziksel belleğe getirilmemiş olup olmadığının testidir. İşletim sistemi bu durumda sanal bellekten sayfayı fiziksel belleğe getirir ve buyruk yeniden çalıştırılır. Durma noktası testi ise eğer program üzerinde hata ayıklanma (debugging) yapılıyorsa yazmaçların durumlarının hata ayıklayan programa bildirilmesi için yapılan testtir. Yukarıda buyruklar için anlatılan adres testleri aynı zamanda işlenenlere ait adreslerin testi içinde geçerlidir.

Adreslerle ilgili hataların takibi için her buyruğa iki bit bağlanır ve bu iki bitte hatanın tipi belirtilir. Hata buyruk işlemcide iken herhangi bir aşamada değerlendirilebilir. Durma noktası hatasında hata ile ilgili yordam çağırılmadan önce yazmaçların değerlerini döndüren bir mikroprogram çalıştırılır.

Adreslerle ilgili kural dışı durumlar haricinde ayrıca buruktaki işlemle ilgili kural dışı durumlar oluşabilir. Bunlar genelde iptal hatası olup buyruğun bulunduğu program durdurularak hata çözülür.

Kural Dışı Durumların İşlenmesi

Kural dışı bu durumların işlemcinin düzgün şekilde çalışabilmesi için ayıklanması ya da düzeltilmesi gereklidir. Kural dışı durumlar karşısında işlemci kesmeleri yönettiği gibi bir uygulama izlemektedir. Bir kural dışı durum oluştuğunda:
  1. İşlemcinin durumu saklanır.
  2. Kural dışı durumla ilgili kesme vektörüne atlanır.
  3. Kural dışı durumun çözümünü sağlayacak olan yordamın adresi alınır.
  4. Yordamın adresine gidilerek kural dışı durumun çözümü ile ilgili işlemler yapılır.
  5. Yordam tamamlandığında, duruma göre işlemci kaldığı yerden devam edilir ya da programı sonlandırılır.

Önemli bazı kural dışı durumlar

  1. Sıfıra bölme (INT 0): en iyi yöntem programı durdurmak
  2. İzleme (trace) (INT 1): hata ayıklayıcılar tarafından her seferinden tek buyruk çalıştırılması için kullanılır.
  3. Durma noktası(breakpoint) (INT 3): hata ayıklayıcılar tarafından kullanılır. Yazmaçların durumunu görmek için kullanılır
  4. Taşma (INT 4/INTO): aritmetik işlemlerde taşma olduğunda tetiklenir.
  5. Sınır (INT 5): yazmaç belirtilen sınırlar dışında ise oluşur
  6. Hatalı İşlem Kodu (INT 6): 80286lardan itibaren işlem kodu x86 buyruk kümesinde değilse tetiklenir.
  7. Yardımcı İşlemci Ulaşılamaz (INT 7): 80286lardan itibaren yardımcı işlemci (coprocessor) ulaşılamaz ise tetiklenir.
Kural dışı durumların çözümünde kullanılan yordamlar programcılar tarafından kesme vektörlerindeki adresler değiştirilerek kişiselleştirilebilir. Ayrıca yeni kural dışı durum tanımları eklenebilir. Bunun için yöntem kesmelerin kişiselleştirilmesindekinin aynısıdır.

Kaynakça

  1. (WO/1995/022108) EXCEPTION HANDLING CIRCUIT AND METHOD
  2. Art Of Assembly Chapter 17
düzenle|Aralık 2007

Kaynaklar

Vikipedi

İlgili konular

bellek program i̇şlemci buyruk

Bu konuda henüz görüş yok.
Görüş/mesaj gerekli.
Markdown kullanılabilir.