CPU'nun (Central Processing Unit, Merkezi İşlem Birimi), bilgisayarlarımızın temel parçası olduğunu rahatlıkla söyleyebiliriz. Bir sistemdeki herhangibir parça ne işe yararsa yarasın mutlaka işlemciye (yazının daha başı ama kalan bölümde CPU yerine hepimizin kullandığı işlemci kelimesini kullanacağım) bağımlı olarak çalışır. Klavyedeki tuşlara her basışınız, yaptığınız her fare hareketi bile bir şekilde işlemciye uğrar. Kullandığınız işlemci, herşeyden önce sisteminizin performansını ve kullanabileceğiniz işletim sistemlerini belirler. Hatta çoğumuz bilgisayar alırken ilk önce işlemciyi belirleriz. Şimdi AMD – Intel savaşını (çok istediğinizi biliyorum ama bu yazının amacına pek uygun değil) bir yana bırakıp işlemcilerin nasıl çalıştığına bir göz atalım.



Mantık Kapıları ve Boolean Mantığı

Hangi işlemciyi kullanırsanız kullanın çalışma prensibi aynıdır: Bir işlemci elektriksel sinyalleri 0 ve 1 (ikili sistemle çalışan bilgisayarlarımız için anlamlı olan tek değerler) şeklinde alır ve verilen komuta göre bunları değiştirerek sonucu yine 0'lardan ve 1'lerden oluşan çıktılar halinde verir. Sinyal yollandığı zaman ilgili hatta bulunan voltaj o sinyalin değerini verir. Örneğin 3.3 voltla çalışan bir sistemde 3.3 voltluk bir sinyal 1, 0 voltluk bir sinyal de 0 değerini üretir.

İşlemciler aldıkları sinyallere göre karar verip çıktı oluştururlar. Karar verme işlemi her biri en az bir transistörden oluşan mantık kapılarında yapılır. Transistörler, girişlerine uygulanan akım kombinasyolarına göre devreyi açıp kapayabilen ve bu sayede de elektronik bir anahtar görevi gören yarıiletken devre elemanlarıdır. Modern işlemcilerde bu transistörlerden milyonlarca tanesi aynı anda çalışarak çok karmaşık mantık hesaplarını yapabilirler. Mantık kapıları karar verirken (yani akımın geçip geçmeyeceğini belirlerken) Boolean Mantığı'nı kullanırlar. Temel Boolean operatörleri AND (ve), OR (veya) ve NOT'tır (değil). Bu temel operatörlerle birlikte bunların değişik kombinasyonları kullanılır, NAND (not AND) gibi.

Bir AND kapısının 1 değerini verebilmesi (yani akımı iletebilmesi için) iki girişindeki değerin de 1 olması (yani iki girişinde de akım olması) gerekir. Aksi takdirde 0 değerini verecek; yani akımı iletmeyecektir. OR kapısında ise akımın iletilmesi için girişlerin ikisinde de akım olmalı veya ikisinde de akım olmamalıdır. NOT kapısı ise girşindeki değerin terisini çıkışına verir.



NAND kapıları çok kullanışlıdır, çünkü bu kapılar sadece iki transistör kullanarak üç transistörlü AND kapılarından daha fazla işlevsellik sağlarlar.


Bunların yanında NOR (not OR), XOR (eXclusive OR) ve XNOR (eXclusive not OR) gibi değişik kapıların değişik kombinasyonlarından oluşan ve çok daha farklı aritmetik ve mantık işlemleri için kullanılan kapılar vardır.

Bu mantık kapıları dijital anahtarlarla beraber çalışırlar. Oda boyutundaki bilgisayarların zamanında bunlar bildiğimiz fiziksel anahtarlardı fakat günümüzde MOSFET (Metal-Oxide Semiconductor Field-Effect Transistor) denen bir çeşit transistör kullanılır. Bu transistörün basit ama hayati öneme sahip bir görevi vardır: Voltaj uygulandığında devreyi açarak veya kapatarak tepki verir. Genel olarak kullanılan MOSFET türü, üst sınırda veya ona yakın voltaja sebep olan bir akım uygulandığında devreyi açar, uygulanan voltaj 0'a yaklaşınca da devreyi kapatır. Bir programın verdiği komutlara göre milyonlarca MOSFET aynı anda çalışarak gerekli sonucu bulmak için akımı gerekli mantık kapılarına yönlendirir. Her mantık kapısı bir veya daha fazla transistör içerir ve her transistör akımı öyle kontrol eder ki, sonuçta devre kapalıyken açılır, açıkken kapanır veya mevcut durumunu korur.


AND ve OR kapılarının şemalarına bakarak nasıl çalıştıkları hakkında fikir sahibi olabiliriz. Bu iki kapıda iki sinyal alıp onlardan bir sinyal üretir. AND kapısından akım geçmesi için girişlerine uygulanan sinyallerinin ikisinin düşük de voltajlı (0) veya ikisinin de yüksek voltajlı (1) olması gerekir. OR kapısında ise giriş sinyallerinden birinin değerinin 1 olması yeterlidir akımın geçmesi için.

Her girişteki elektrik akışını o girişin transistörü belirler. Bu transistörler devrelerden bağımsız ayrı elemanlar değillerdir. Çok miktarda transistör yarı-iletken bir maddenin (çoğu zaman silikonun) üzerine yerleştirilip kablolar ve dış bağlantılar olmadan birbirine bağlanır. Bu yapılara entegre devre denir ve ancak bu entegre devreler sayesinde karmaşık mikroişlemci tasarımları yapılabilir.

Güncel işlemciler mikroskobik boyuttaki transistörlerin dirençler, kondansatörler ve diyotlarla bir araya getirilmesinden oluşan milyonlarca karmaşık mantık kapısından oluşur. Mantık kapıları entegre devreleri oluştururken entegre devreler de elektronik sistemleri oluşturur.

CISC ve RISC Kavramları:
Yıllar geçtikçe iki işlemci ailesi piyasaya hakim olmaya başladı: Intel Pentium ve Motorola PowerPC. Bu iki işlemci aynı zamanda uzun yıllar boyunca kullanılacak ve günümüze kadar değişmeyecek iki farklı mimariye sahiplerdi.

CISC (Complex Instruction Set Computer), geleneksel bilgisayar mimarisidir. İşlemci kendi üzerinde bulunan microcode adlı minyatür bir yazılımı kullanarak komut setlerini çalıştırır. Bu sayede komut setleri değişik uzunluklarda olabilir ve bütün adresleme modellerini kullanabilirler. Bunun dezavantajı çalışmak için daha karmaşık bir devre tasarımına ihtiyaç duyulmasıdır.

İşlemci üreticileri daha komlpleks (ve güçlü) işlemciler üretmek için sürekli daha büyük komut setleri kullandılar. 1974 yılında IBM'den John Cocke bir çipin daha az komutla çalışabilmesi gerektiğini düşündü ve ortaya sadece sınırlı sayıda komut setleri kullanabilen RISC (Reduced Instruction Set Computer) mimarisi çıktı. Bu mimaride komutların uzunluğu sabittir ve bu yüzden de direk olmayan adresleme modu kullanılamaz. Sadece tek bir saat döngüsünde veya daha az sürede çalıştırabilecek komutlar işleme konabilir. RISC işlemcilerin en büyük avantajları komutları çok çabuk işleyebilmeleridir çünkü bu mimaride komutlar çok basittir. Bu sayede RISC işlemcileri tasarlayıp üretmek daha ucuzdur, çünkü bu basit komutlar için daha az transistör ve daha basit devreler gerekir.



* Execution Unit (Core=Çekirdek): Bu ünite komutları çalıştırır ve pipeline (işhattı) denen yollarla beslenip tamsayıları kullanarak okuma, değiştirme ve komut çalıştırma işlemlerini yapar. Artimetik hesaplamalar için ALU (Arithmetic and Logic Unit) denen aritmetik ve mantık üniteleri kullanılır, ALU için işlemcilerin yapıtaşıdır diyebiliriz.

* Branch Predictor: Bu ünite bir program çalışırken başka bir satıra atlayacağı zaman hangi satırların işleme konacağını tahmin etmeye çalışarak Prefetch (komutların bellekten ne zaman çağrılacağına karar verir ve komutları Decode ünitesine doğru sırayla gönderir) ve Decode (bu ünite de kompleks makina dili komutlarını ALU'nun ve registerların kullanabileceği basit komutlara dönüştürür) ünitelerine hız kazandırmaya çalışır.

* Floating Point Unit: Bu ünite tamsayı olmayan floating point (kayar nokta) hesaplamalarından sorumludur

* L1 Cache: İşlemci için önbellek. Önemli kodlar ve veriler bellekten buraya kopyalanır ve işlemci bunlara daha hızlı ulaşabilir. Kodlar için olan Code ve veriler için olan Data cache olmak üzere ikiye ayrılır. Güncel işlemcilerde L2 (Level 2, 2. seviye) önbellek de bulunur. Önceleri L2 önbellek anakartta bulunurdu. Daha sonra slot işlemciler ortaya çıktı ve işlemci çekirdeğinin de üzerinde bulunduğu kartuj şeklindeki paketlerde önbellek çekirdeğin dışında ama işlemciyle aynı yapıda kullanılmaya başlandı. Bu kısa geçiş döneminden sonraysa önbellek işlemci çekirdeklerine entegre edildi.

* BUS Interface: İşlemciye veri – kod karışımını geitirir, bunları ayırarak işlemcinin ünitelerinin kullanmasını sağlar ve sonuçları tekrar birleştirerek dışarı yollar. Bu arayüzün genişliği işlemcinin adresleyebileceği hafızayı belirler. Örneğin 32 bitlik hafıza genişliğine sahip bir işlemci 232 byte (4 GB) hafızayı adresleyebilir ve bu hafızadan aynı anda 32 bit üzerinde işlem yapabilir. Günümüzde masaüstü pazarına 32 bitlik işlemciler hakimken sunucu uygulamarı ve bilimsel çalışmalar için de 64 bitlik işlemciler yaygın olarak kullanılır.

Bir işlemcideki bütün elemalar saat vuruşlarıyla çalışır. Saat hızı bir işlemcinin saniyede ne kadar çevrim yapabileceğini belirler. 200 MHz saat hızı 200 MHz olan bir işlemci kendi içinde saniyede 200 çevrim yapabilir. Her çevrimde işlemcinin ne kadar işlem yapabileceği işlemcinin yapısına göre değişir. Bu saat vuruşları anakart üzerindeki Clock Generator denen yongayla üretilir. Bu yonganın içinde çok hassas kristaller vardır. Bu kristallerin titreşimleri saat vuruşlarını oluşturur.

Program Counter (PC) denen birim içinde çalıştırılacak bir sonraki komutun hafızadaki adresini bulundurur. Bu komutun çalıştırılma zamanı geldiğinde kontrol ünitesi komutu işlenmek üzere hafızadan alır ve işlemci üzerindeki Instruction Register denen bölüme işlenmek üzere aktarır. Yazmaç da diyebileceğimiz registerlar hafızadan verilerin veya kodların yazılabildiği geçici saklama alanlarıdır. İçindeki adresi gerekli yazmaca aktaran PC daha sonra bir arttırılır ve bir sonraki komutun zamanı geldiğinde Instruction Register'a aktarılmak üzere hazırda beklemesi sağlanır.

Komut işlendikten sonra hesaplamayı yapan birim Status Register (SC) denen yazmacın değerini değiştirir, bu yazmaçta bir önceki işlemin sonucu saklıdır. Kontrol ünitesi bu yazmaçtaki değeri kullanarak sonuca göre gerekli komutları çalıştırabilir.

Bu okuduklarınızın tamamı komutun uzunluğuna ve işlemcinin mimarisine göre bir veya daha fazla saat vuruşunda yapılabilir.

kaynak ve yazının devamı: "http://www.pclabs.com.tr/2003/03/07/islemciler-cpu-nasil-calisir/3"