Meraklısına: Bilgisayar ve 1/0

Yeni tanıştığım kimseler, bilgisayar mühendisi olduğumu duyunca bilgisayarın nasıl çalıştığını ve özellikle de 1 ve 0’ın ne olduğunu soruyorlar. Aslında okulda bölük pörçük şeyler öğrendik. Doğrusu okulumdan mezun olduğumda hala parçalar zihnimde oturmamıştı. Nihayet bir kitap yazdıktan sonra meseleyi kavradım. Zaten bir şeyi öğrenmenin yollarından birisi o konuyu başka birisine anlatmaktır.
İşte bilgisayarın nasıl çalıştığına dair anladıklarım. Eğer, katkılarınız olursa daha zengin bir hale gelebiliriz.



Günümüz bilgisayarının temel taşı (atomu) transistördür. Aslında temel olarak bir anahtar görevi görür. Yani siz taban (base) bacağına uyguladığınız 5V gerilimle Toplayıcı (Collector) ile yayıcı (emitter) arasındaki voltajı açıp kapayabilirsiniz. Bu durumda Vout olarak belirtilen noktadan göreceğiniz voltaj farklı olacaktır. Eğer toplayıcı - yayıcı arası iletim varsa 0V, aksi halde 5V göreceksiniz.
Dikkat ederseniz burada voltaj seviyelerinden (0V veya 5V) bahsediyoruz. Çünkü bu kısım elektronik mühendislerinin çalışma alanına giriyor. Bu yüzden ayrıntısına girmeyeceğim, fakat bizim için güzel bir başlangıç noktası..
Bilgisayar dünyasına geçtiğimizde transistör katmanı bizi pek ilgilendirmez. Tıpkı bir doktorun vücudumuzu incelerken atom ve moleküllerle pek ilgilenmediği gibi.
İlgilendiğimiz seviye şurası: Transistörleri bir araya getirerek mantık kapılarını (hücre seviyesi) kurabiliyoruz. Mantık kapılarını hepimiz az çok biliyoruzdur. Mesela VE (AND) kapısı, girdilerden her ikisi de doğru (true) olduğunda çıktı olarak doğru (true) değerini, aksi halde yanlış (false) değerini üreten matematiksel bir fonksiyondur.
İlginçtir ki transistör ile kurulabilen en kolay devreler NAND (Not AND -Değil VE) ve NOR (Not OR -Değil VEYA) kapılarıdır.
Bunları kullanarak VE (AND), VEYA (OR) kapılarını üretebiliyoruz. Aşağıda devre sembolü olarak NAND kapısı kullanılmış ve diğer kapıları nasıl inşa edebileceğimiz belirtilmiş.
Burada amacımız mantık kapılarını öğrenmek olmadığından görselleri daha fazla anlatmıyorum.
İşte konumuz için kritik nokta: Bilgisayar mühendisleri olarak doğru yerine 1 ve yanlış yerine 0 koyduk. Böylece mantık kapıları ile matematiksel işlemler yapabilir hale geldik. Adına da bit (Hani şu 8 tanesi bir araya geldiğinde 1 byte’lık en temel depolama alanı) dedik. Mesela mantık kapılarıyla -2 sayıyı toplayabilen- bir tam toplayıcı (full adder) devresi yapabiliyoruz. Aslında -Girdi ve çıktı değerlerini belirledikten sonra- Karno haritası tekniğini kullanarak herhangi bir matematiksel/mantıksal operasyonu yapabilecek devreyi mantık kapılarıyla kurabiliriz.
Ve bilin bakalım mantık kapılarıyla kurduğumuz en karmaşık devre hangisidir? Cevap CPU. Gerçekten de günümüz CPU’ları içinde milyarlarca transistör vardır. İşte bu yüzden 1 ve 0 ile bilgisayarlar özdeşleşmiştir. Fakat burada hikayemizi bitirmeyeceğim biraz daha ileriye götüreceğim..
Aslında CPU dediğimiz şey 3 temel kısımdan oluşur (önbellek/cache kısımları hariç):
  1. hesaplama yapan aritmetik ve mantıksal işlem birimi (Arithmetic and Logic Unit -ALU): CPU komutlarını işleten kısımdır.
  2. Yazmaçlar (Registers) ki bunlar küçük bellek bölgeleridir ve ana bellekten (main memory) getirilen bilgilerin operasyon öncesi veya sonrası depolandığı alanlardır. CPU sadece yazmaçlarda yer alan bilgilerle çalışabilir.
  3. Kontrol ünitesi (Control Unit): İşleri orkestra eden kısımdır. Asıl işi, işletilmekte olan CPU komutuna göre belirli yazmaçları ve ALU ünitesini aktive etmekten ibarettir. Yani, Fetch-decode-execute döngüsünü koordine eder. Böylece komut icra edilir. Kontrol ünitesi her bir işletim için saat ünitesinden gelen tick’i bekler. Böylece bilgisayarınızın saat hızı aynı zamanda komutların işletilmesi için “şimdi yap” işaretini verir. Mesela 2.3 GHz bir işlemciniz varsa saniyede 2.3 milyar tick üretiliyor demektir. (Gerçi günümüzde CPU’lar artık güç tasarrufu nedeniyle daha düşük saat hızlarında çalışmaktadırlar ve sadece performans istendiğinde gerçek saat hızına çıkarlar)
  4. Aslına bakarsanız CPU son derece ilkel (primitive) işlemler yapabilmektedir. Temel matematiksel işlemler, bitleri sağa/sola kaydırma, mantıksal işlemler vb. Peki, programcıların C++ gibi yüksek seviyeli dillerle yazdığı kodları, CPU komutlarına çeviren hangi yazılımlardır? Burada gerçekten de büyük bir çığır açılmıştır.
Neyse, CPU’nun yapabildiği tüm operasyonlar/komutlar Komut seti (Instruction Set) olarak bilinir. Buna CPU’nun dili diyebiliriz. Çünkü CPU’nun konuşabildiği şeyler sadece bu kelimelerden ibarettir. Eğer iki CPU’nun ISA’sı (Instruction set architecture) farklı ise, birinde çalışan derlenmiş uygulama diğerinde çalışmaz. Bu yüzden oracle DB gibi yazılımlar her platform için ayrı ayrı derlenir. Günümüz Intel işlemcilerin ISA’sı (Aslında AMD tarafından dillendirilen) x86-64 diye bilinir.
Insan ve bilgisayarı aşağıdaki gibi karşılaştırabiliriz.
CPU komutları aslında 1 ve 0 dizilerinden başka birşey değildir. CPU sayısal verileri doğrudan bit dizileri şeklinde tutabilir, çünkü 1 ve 0 ikilik sayı sistemine tam olarak oturur. Komutları ise yine bir bit dizisi olarak belirleyebiliriz. Mesela Topla (ADD) komutunu şu şekilde gösterebiliriz.
Toparlarsak, 1 ve 0, mantık kapılarında kullanılan girdi ve çıktı değerlerini gösterir. Mantık kapıları da CPU inşasında kullanılan temel yapılardır.

Yorumlar

Bu blogdaki popüler yayınlar

create Virtual Machines in VMware with ansible

Yüksek Hizmet Sürekliliği (High Availability)