Temel bilgisayar mimarisindeki en önemli olaylardan birisi Interrupt yani Kesme işlemleridir. Eğer bilgisayarımızın donanım katmanında böyle bir düzen olmamış olsaydı işlemlerimiz kesinlikle daha ağır ve zor olacaktı. Peki, biz bu interrupt kavramıyla tam olarak nerede karşılaşıyoruz?

Sadece bilgisayarlarda değil, tüm elektronik donanımsal katmana sahip olan cihazlarda kesmeler zorunlu bir durum olarak karşımıza çıkar. Cihazlarımızın mikrosaniyeler içerisinde çeşitli işler yaptıklarını ve tüm sistemi belli bir düzene oturttuklarını söyleyebiliriz. Farklı işletim sistemlerine göre program parçaları çeşitli düzenlerde çalıştırılabilir. Bu durum kullanıcının programları hangi düzende işlemek istediğiyle de doğru orantılı olarak değişir. Örneğin, en basitinden bizim kullandığımız bilgisayarlarda senkron bir çalışma düzeni kesinlikle gerekli bir şey olmayabilir ancak bir fabrikada çalışan bir cihazın, aletin müthiş bir derecede hassas ve senkron olması gerekir.

Telefonlarımızda müzik dinlerken bazı zamanlarda müzik sesinde bir parazitlenme ya da kesiklik fark edebiliriz. Müzik sesindeki o kısa kesiklik durumunda çalışan bir interrupt vardır. Normalde o kesinti durumunun bize yansımaması gerekir ancak interruptlardaki çok küçük hatalar dahi fark edilebilir problemler haline dönüşmüş olur.

Interrupt kelime anlamı olarak da “kesme” anlamına gelir. Aslında bu kesmeler I/O düzeni ile doğrudan bağlantılıdır. Kesmeleri anlayabilmek için öncelikle Giriş/Çıkış düzenini tam olarak anlamamız gerekecektir.

Bilgisayarınızda klavyeye her bastığınızda ekranda direkt harfi görüyor olduğunuzu düşünebilirsiniz ama aslında arka planda bundan bağımsız onlarca süreç birbirini takip eder. Öncelikle giriş cihazınız ki bu klavye ya da başka bir şey olabilir, sizin bastığınız değeri almaya hazır hale getirilir. Klavyeden bir tuşa basıldığına 8 bit alfasayısal kod aktarım sürecine girer. I/O cihazlarının hazır olma durumunu tutan FGI/FGO flaglarından FGI veri aldığını ve dolu olduğunu belirtmek için klavyeden tuşa basıldığı an 0’dan 1 konumuna geçer. FGI flagının 1 olması tutulan verinin INPR yazacına aktarılmasını sağlar. Dikkat etmek gerekirse hala klavyeden bir harfi almaya çalışıyoruz. Henüz bir yere basmadık ya da herhangi bir yerde göstermedik. Flag ve yazaç ikilisinde kontrol ve hazırlık durumları oldukça ağır bir şekilde ilerlemektedir. Kesmeleri neden kullandığımızı kavramak açısından bu süreci dikkatle incelemekte fayda olduğunu göreceksiniz.

INPR yazacının içerisinde tutulan veri Çıkış tarafına geçmek içinde FGO flagının 1 olmasını beklemek zorundadır. İlgili flaglar INPR/OUTR’nin içerisine verinin aktarılması için ön hazırlık aşaması sayılırlar. FGO 1 durumuna geldiğinde sistem çıkış tarafının hazır olduğunu anlar ve AC (Akümülatör Registerı) içerisindeki bilgi OUTR’ye aktarılır. Bu aşamadan sonra ise istediğimiz harfi ekranda görmüş oluruz.

Ben bu yazıyı şu kısma kadar yazarken bu işlemi onlarca defa gerçekleştirdim. Ancak şanslıyız ki bilgisayar şu an o kadar hızlı bir şekilde bu durumu işledi ki klavyeye bastıktan hemen sonra harfi ekranda gördüm. Ama şu an sadece yazı yazıyorum. Peki, ben bu sırada müzik dinlemek istersem? Gelen mesajlarımın bildirimini görerek onları cevaplamak istersem? Yazı yazarken birçok işi de halletmek istersem neler olacak?

Bu kısımda bilgisayarın ekrana yazmaktan daha hızlı yaptığı bir şeyi yapması gerekecek. Yani Interruptları. FGI/FGO flaglarından yukarıda bahsetmiştik. Sürekli almaya ve vermeye hazır olma ve bu durumun kontrol edilmesinin gerekmesi basit bir I/O işlemini dahi inanılmaz derecede uzatmaktaydı. Öyle ki, bilgisayar bu her bir aktarım sürecinde 50.000 defa flagları kontrol etmek zorunda kalacak. Bu yüzden flaglarda 1-0 durumunu kontrol etmek yerine, diğer tüm işlemler için atanmış flagların hepsinin sadece 1 olması durumuna dikkat ederiz. Yani bilgisayar bir işlemi koşmaya devam ederken başka bir blokta işlemin geldiğini haber veren flag 1 yapıldığında sisteme haber verilir. Koşulan işlem yarıda kesilir ve 1 olduğuna dair haberin gönderildiği flagtaki işlem koşturulmaya başlanır.

Çeşitli işlemleri hızlı bir şekilde yerine getirebilmek ve kontrolü de yeterli bir seviyede tutabilmek için temel bilgisayar mimarisinde bu fikir kabul görülmüştür. Kesme durumunu bilgisayarın bir parçası haline getirebilmek içinde, bu durumda bir yazboz olan R yazbozu da sisteme kesme için eklenmiştir.

Yukarıdaki şemayı tam olarak anladığımız zaman kesme sürecinin tüm mantığına hâkim olmuş olacağız. O yüzden gelin bu şemayı birlikte inceleyelim.

Yeni bir yazbozun sahnelere çıktığını az önce söylemiştik. Bu yüzden şemasının en üstünde bulunan R tüm kesme olayını kontrol etmek için değer almaya hazır bir durumda bizi beklemektedir. R değeri 0 olduğu an buyruk yani herhangi bir şekilde devam eden işlem işini yerine getirmeye devam edecektir. Ancak 1 durumuna döndüğü an tüm sistem yaptığı işi bırakıp bir yerlerde 1 durumuna geçen flagın hazırladığı işi devralmak üzere harekete geçecek demektir.

R=0 durumundayken;

Buyruk süreci işlemeye devam eder. Yani buyruk bellekten getirilir. Buyruğun içerisindeki bitlerden işlemler çözülür ve buyruk çalıştırılır. Ancak buyruğun Fetch-Decode-Execute işlemlerinden önce ya da hemen sonra ( bu evreler arasında interrupt gerçekleşmez) IEN flagında değerler değişirse ki IEN burada kesme işlemi için kapının anahtarı gibi çalışır, 1 olma ihtimali olan flaglar yani az önce tanıştığımız FGI ve FGO kontrol edilir. Yani bilgisayar kendine şunu sorar; Bana bir işaret geldi (IEN’den). Bu işaret acaba yeni bir veri girişi oldu mu demek (FGI=1 kontrol edilir.) yoksa yeni bir çıkış mı isteniyor demek (FGO=1 kontrol edilir.) ? Herhangi birisinin 1 olduğunu gördüğü an çözdüğü buyruğu çalıştırmaz ve R=1 yapılarak kesme süreci başlatılır.

R=1 durumundayken;

Artık bilgisayar kesme sürecine girmiştir. Öncelikle geri dönebilmesi için yarıda bıraktığı işlemin adresini kaydetmesi gerekir. Bunun için belleğin 0. Bölgesini kullanır ve 0. Bölgeye dönüş adresi kaydedilir.

M[0] <- PC  (PC içerisinde buyruğumuzun işlem yaptığı adres vardı. Yani bellekten getirilen adres. Şimdi de yarım bıraktığımız adresi yine bellekte bildiğimiz bir noktaya koymuş olduk.)

Şimdi içerisi boşalan PC registerı bellekten bize başka bir adres getirmek için bellek içerisindeki 1. Bölgeye atlar. Bu kısım kesme servis sürecinin tetiklendiği konumdur. Kesme servis programı belleğin herhangi bir noktasında bulunabilir. Bu adresi öğrenebilmek için 1.adrese gideriz. Orada bizi BUN yani şartsız dallanma komutu karşılar ve kesme sürecinin başlayacağı adrese şartsız bir şekilde geçebilmemizi sağlar. 1.bölge içerisindeki adrese dallanarak kesme sürecinde bizden istenen, araya girmiş olan program parçasını çalıştırırız. Tüm işlemler yerine getirildikten sonra kesme olayının son satırında geri dönüş için bizi tekrar BUN komutu karşılar ve geri dönüş adresimizin tutulduğu 0 bölgesine dallanmamızı sağlar. Gerekli işlemler yerine getirildiği için bizi bu noktaya getiren tüm flaglar tekrar 0’lanır. Ve 0.bölgeden aldığımız geri dönüş adresiyle bir önceki işleme devam etmeye başlayabiliriz.

Ta ki tekrar bir yerlerdeki flaglar 1 olup kesme sürecini çağırıncaya kadar.

İlk başta bahsettiğimiz sürekli kontrol ve hazır olma durumu işlerimizi oldukça yavaşlatırken Kesme olayı bizi istenen işlemlerin gerçekleştirmesinde bir hayli hızlandırmaya başlar. Bu yüzden süreci, bellekteki yerine getirilmesi ve dallanması gereken yerleri iyi bir şekilde anlarsak donanımsal olarak bilgisayarımızın kapasitesinden ve özelliklerinden daha çok faydalanmış oluruz.

Interrupt (Kesme) Sürecini hep birlikte detaylı bir şekilde öğrendik. Aklınıza takılan birçoğu için bize istediğiniz zamanda ulaşabilirsiniz! Donanım hakkındaki diğer yazılarımız için bizi takip etmeye devam edin!