Bilgisayar Genel

Kodlar Nasıl Çalışır?

Tarafından yazılmıştır Halil Durmuş

Bilgisayar kodu çok önemlidir. Kullandığınız hemen hemen her elektronik cihaz kodlar bağlıdır. İşlerin çalışma şekli oldukça kafa karıştırıcı görünebilir, ancak onu parçaladığınız da aslında basittir.Kod yapan kişilere programcı, kodlayıcı veya geliştirici denir. Hepsi web siteleri, uygulamalar ve hatta oyunlar oluşturmak için bilgisayarlarla çalışır.

Kod Nedir?

Her sayı veya harf bilgisayara belleğindeki bir şeyi değiştirmesini söyler . Bu bir sayı veya kelime veya bir resim veya videonun küçük bir parçası olabilir. Bilgisayarlar kendi başlarına nasıl bir şey yapılacağını bilmiyorlar. Onlara talimatlar vermek programcının görevidir. Makine kodunu öğrenmek mümkündür, ancak bu uzun zaman alacaktır. Neyse ki bilgisayarlarla iletişim kurmanın daha kolay bir yolu var.

Programlama Dili Nedir?

Makine kodunu kullanmak yerine, Python programlama dilini kullanarak ekrana “Hello, world” yazdırır.

Hemen hemen tüm programlama dilleri aynı şekilde çalışır:

  1. Ne yapacağınızı söylemek için kod yazıyorsunuz:
  2. Kod derlenir ve bilgisayarın anlayabileceği makine koduna dönüştürür.
  3. Bilgisayar kodu yürütür ve Merhaba, dünyayı bize geri yazar .

Farklı programlama dilleri de var, ancak hepsi aynı şeyi yapıyor. Ne yapmak istediğinizi yazın, derleyici bilgisayarın anladığı dile çevirir(makine kodu), daha sonra bilgisayar bunu işler, programlama kod yürütme denir 

Kodlar Nasıl Çalışır?

Bilgisayarda bir program çalıştırmak istendiğinde program kodlarını içeren dosya, sabit diskten (veya diğer kullanıcı hafızalardan) okunarak RAM üzerine alınır. Çalıştırılacak kodların başlangıç adresi işlemci üzerindeki program sayacıya (PC->Program Counter) yüklenir. Sonrasında program sayıcının gösterdiği adresteki kod RAM’den alınarak kod kaydedicisine getirilir(Fetch). Burada kodlar sahip oldukları parametrelerinden (komut+adres/sayı) ayrılarak ALU için anlamlı komutlar haline getirilir(Decode). ALU kendisine gelen komutu icra ederek (Execute) komutunun gerektirdiği biçimiyle çıktısını ya kaydediciye ya da RAM üzerine yazar(Write Back). Buraya kadar RAM üzerindeki bir kod çalıştırılmış oldu. Artık tüm bu işlemler sonunda program sayıcı bir sonraki çalıştırılacak kodun adresini göstermektedir.

Unutulmamalıdır ki her kodun uzunluğu bir değildir. Veri içeren kodlarla, içermeyen kodların hafızada kapladıkları alan bir değildir. Bu nedenle program sayıcı işletilen kodun büyüklüğü kadar artırılarak bir sonraki adresi gösterir. Bu işlemler bir sonraki komut için benzer şekilde devam ederek işletilmesi gereken komutlar bitene kadar sürer. Aşağıda (solda) bu yapı ayrıntılı olarak gösterilmiştir. Sağda ise genel hatları ile Getir-Çöz-Çalıştır-Yaz(Fetch-Decode-Execute-Write Back) çevrimi gösterilmiştir.

ALU’nun işlem yapabilme kabiliyeti işlemcinin kaç bit işlemci olduğu ile alakalıdır. Örneğin ALU 32 bit iki sayıya aynı anda işleme alabiliyorsa o işlemci 32 bittir. Günümüzde ki işlemciler çoğunlukla 64 bittir.

Yukarıda bahsedildiği üzere komutların icra edilmesi 4 aşamada gerçekleşmektedir. İşlemciye herhangi bir kesme işareti geldiğinde bu görev execute çevriminden sonra icra edilir. Program Counter (PC) içerisindeki işletilme sırası kendinde olan adres saklanır ve kesme işaretinin gösterdiği adres PC’ye yüklenir. Kesmeye ait yordam kodları icra edildikten sonra önceki programa kalındığı yerden saklanan adresin PC’ye yüklenmesi ile devam edilir.

Kesmeler sistemin çalışması sırasında acil çalıştırılması gereken kodların araya girme durumudur. Kesmeler donanım ve yazılım kesmeleri olarak ikiye ayrılırlar.

İşlemci bir kodu çalıştırırken bahsedildiği üzere şu adımlar Fetch(F), Decode(D), Execute(E) ve WriteBack(WB) sırasıyla yerine getirilir.Eğer bir komutun icrası önceki komutun write back aşamasından sonra başlarsa burada zaman kayıpları oluşur. Çünkü işlemcinin örneğin fetch sırasında ALU çalışmaz boşta kalmış olur. Zaman kayıplarını önlemek için pipeline(kesintisiz iş akışı) denilen bir yapı kullanılır. Pipeline yapıya en uygun mimari RISC mimarisidir. Pipeline yapıda işlemcinin komut icrasında boşta kalan kaynakları, bir sonraki adımın işlemlerini yürütmek üzere tasarlanmıştır. Yani aynı anda işlemcinin boşta kalan tüm kaynakları kullanılmış olur. Bu kayıp aşağıda gösterilmiştir. Aşağıda iç akışını gösteren tablodan da anlaşılacağı üzere; pipeline olmayan yapıda 12 saat frekansında sadece üç komut icra edilirken, pipeline yapıda 3 komutun icrası 6 saat frekansında halledilir.

Kaynakça: İnterbilgi, Medium, Codeconquest, Makeuseof, İnterestingEngineering

Yaşar, E. (2018).Bilgisayar Donanımı. Bursa: Ekin Basım Yayın Dağıtım (61-63)

Yazar hakkında

Halil Durmuş

1996 yılının Mart ayında Trabzon’da dünyaya geldim. Atatürk Üniversitesi, Bilgisayar Mühendisliği 4. sınıf öğrencisiyim. Web sitemde ilgimi çeken konuları araştırarak yazılar paylaşıyorum.

1 Yorum

Yorum Yap