
Merhaba Arkadaşlar,
Eminim hepiniz “Köyden İndim Şehire” filmindeki altın sayma sahnesini hatırlıyorsunuzdur. Bu sahnenin konumuz ile ne alakası var diye düşünebilirsiniz. O zaman çok önemli konulardan bir tanesi olan kesmeleri anlatmaya başlayalım. Daha sonra ilgisi olup olmadığına siz karar verirsiniz. 🙂
Kesmeler, işlemcimiz bir programı koştuğu sırada (jargona biraz alışalım) dışarıdan veya dahili donanımdan gelen işaretler olarak tanımlanabilir. Tabii kesmenin kesme olabilmesi için işlemcinin ilgili yerden kesme gelebileceğine dair bilgilendirilmesi gerekmektedir. Bu işleme yetkilendirme denilmektedir. Eğer işlemcimize yetkilendirilmiş bir kesme gelirse, işlemci o an yapmakta olduğu işlemi bırakarak kesme programındaki işlemleri gerçekleştirir. Daha sonra ise ana programdaki işlemlerine kaldığı yerden devam eder. Biraz karışık olduysa Prof. Dr. İsmail Kaya hocamın verdiği çok güzel bir örnek ile devam edelim.
Bir öğretmen olduğumuzu düşünelim. Ders anlattığımız sırada bizim anlatımımızı kesebilecek durumlardan bazıları şu şekildedir;
- Bir öğrencinin soru sorması
- Sınıf dışında görevlendirdiğimiz bir kişinin bize bir posta geldiğini bildirmesi
- Müdür veya üstümüz bizi çağırması
- Bir öğrencinin hastalanması
Bu gibi durumlarda dersimize ara vererek gerçekleşen olaya göre eylemler yapmamız gerekir. Örneğin öğrenci soru sorduğunda öğrencinin sorusuna cevap vermek için ders anlatımına ara verip, soru cevaplandıktan sonra derse kaldığımız yerden devam edebiliriz. Öte yandan öğrencilerin sorularını ders sonunda sormasını söyleyerek onları engelleyebiliriz. Ancak üstümüzün bizi çağırmasını veya bir öğrencinin hastalanmasını engelleyemeyiz. Bu durumda kesmeleri aşağıdaki gibi sınıflandırabiliriz.
- Yetkilendirilmiş Kesmeler
- Yetkilendirilmemiş Kesmeler
-
- Engellenebilir Kesmeler
- Engellenemez Kesmeler
-
İşlemciler üzerinden bir örnek verecek olursak. Yazdığımız programda bir Timer modülünü yetkilendirdiğimizi düşünelim. Bu modül bize belirli bir süre (örneğin 1 saniye) sonunda kesme oluştursun. Ayrıca Port1.3 pinine bağlı olan buton ile işlemcimize kesme gönderelim. Burada işlemcimiz Timer modülünden gelen kesmeler yetkilendirdiği için onunla ilgili olan işlemleri yapacak ancak butondan gelen kesmeleri engelleyecektir. Bunun dışında işlemcimizde bir hata oluştuğunda bu durum engellenemez bir kesme oluşturacaktır ve programımız ya sonlanacak ya da baştan başlayacaktır.
Kesme vektör tablosuna gelecek olursak. Kesmelerde iki önemli adres bulunmaktadır. Bunlardan ilki kesme programımızın başlangıç adresidir. İkincisi ise kesme vektör tablosundaki her kesmeye özel olarak ayrılmış adrestir. Kesme vektör tablosunda bulunan adrese kesme programımızın başlangıç adresini yazarak işlemcimize kesme geldiğinde hangi programı çalıştırması gerektiğini söylemiş oluruz. Yani kısacası ikinci adrese birinci adresi yazıyoruz. 🙂
Şimdi bir kesme geldiğinde işlemcinin hangi adımları izlediğini anlatarak yazımızı sonlandıralım.
- Modüllerin bir tanesinden bir kesme gelir
- İşlemci kesmenin yetkilendirilmiş olup olmadığını kontrol eder. Yetkilendirilmemiş ise kesmeyi görmezden gelir.
- Yetkilendirilmiş kesme ise işlemci kaldığı yer (Program Counter, PC) ve durum (Status Register, SR) bilgilerini içeren kaydedicilerin verilerini yığın kaydedicisine (Stack Pointer, SP) saklar. Böylelikle kesme programı bittiğinde kaldığı yere geri dönebilir.
- İşlemci ilgili kesmenin kesme vektör tablosundaki adresi kontrol eder ve orada bulunan adrese giderek kesme programının işlemlerini gerçekleştirir. Eğer kesme vektör tablosunda bir adres yoksa işlemci ana programa geri döner.
- İşlemci kesme programını bitirdikten sonra SP’den kaldığı yer ve durum bilgilerini alarak ana programa geri döner.
Nereden çıktı bu PC, SR ve SP diyebilirsiniz ancak çok fazla detay var ve belirli bir sıra ile ilerlemezsek kafanız çok karışabilir. Bu nedenle şimdilik bunların sadece isimlerini bilmeniz yeterli ileride sıranın onlara da geleceğinden emin olabilirsiniz.
Böylelikle kesmeler konusunda genel olarak bilgi sahibi olduk. Şimdi yazımızın başındaki sahneye gelecek olursak. Sahnede Zeki Alasya işlemci rolünü üstlenmekte ve altın sayma işlemini gerçekleştirmektedir. Ancak tam o sırada Metin Akpınar tarafından oluşturulan kesme işleri karıştırmaktadır. Bu bir hata kesmesi olduğu için Zeki Alasya tarafından engellenemiyor ve bunun sonucunda programa yani altın sayma işlemine yeniden başlamak durumunda kalınıyor. 🙂 Sizin de buna benzer enteresan örnekleriniz olduğunda bizimle paylaşırsanız sevinirim efendim. Sonraki yazıda kesmeler için örnek program yazacağız. O zamana kadar görüşmek üzere.
Ellerinize sağlık. Eğlenceli bir ve öğretici bir yazı olmuş.
Teşekkür ederim. Faydalı olabildiysem ne mutlu bana.