Bilgisayarlar veya akıllı tüm elektronik cihazlar, elbette günlük hayatımızın temel taşı olmuştur. Her bilgisayarın kalbinde Merkezi İşlem Birimi (CPU) bulunur. Bizler bunu hem CPU hemde işlemci veya mikroişlemci olarak da biliyoruz.
CPU, bilgisayar programlarında talimatları yürütür ve verileri işler. Bu makalede sizlere bir işlemci nedir ve nasıl çalışır anlatacağım. Önce büyük, özel yapım bilgisayarlardan başlayacağım. Ardından, günümüz elektronik cihazlarına kadar uzanacağım.
İşlemci Nedir, Ne İşe Yarar?
CPU’nun açılımı Central Processing Unit’tir. Ancak Türkçe’ye Merkezi İşlem Birimi olarak çeviriyoruz. Bu donanım genellikle işlemci veya mikroişlemci olarakta biliyoruz.
Aslında işlemcinin tanımı basittir; bilgisayardaki yönergeleri yorumlar ve verileri işler. Böylelikle PC programlarındaki talimatları anlar ve uygular.
CPU’lar, dijital bilgisayarların programlanabilirlik özelliğini sağlar. Ayrıca, birincil depolama ve G/Ç aygıtlarıyla birlikte bilgisayarların temel bileşenlerindendir. Yani, mikroişlemci, entegre devrelerle üretilen CPU’dur.
Bununla birlikte, 1970’lerin ortalarından beri, tek çipli mikroişlemciler yaygınlaştı. Sonuç olarak, mikroişlemciler neredeyse tüm CPU türlerinin yerini aldı. Bugün ise, “CPU” terimini genellikle mikroişlemciler olarak ifade ediyoruz.
Tarihi
Merkezi işlem birimi (CPU), karmaşık bilgisayar programlarını çalıştırır. Bu ifade, “CPU” terimi yaygınlaşmadan önceki bilgisayarlara da uygulanabilir. Ancak, “CPU” ve kısaltması 1960’ların başından beri kullanılmaktadır. CPU’ların şekli, tasarımı ve uygulaması zamanla değişmiştir. Ancak, temel çalışma prensipleri benzer kalmıştır.
İlk CPU’lar büyük bilgisayarların parçası olarak özel tasarlanmıştır. Ancak, bu pahalı yöntem yerini ucuz ve standart işlemcilere bırakmıştır. Bu değişim, ayrık transistörler, ana çerçeveler ve mikrobilgisayarlar döneminde başlamıştır. Entegre devrelerin (IC) yaygınlaşması süreci hızlandırmıştır.
CPU’ların minyatürleşmesi ve standardizasyonu, cihazların kullanım alanlarını genişletmiştir. Modern mikroişlemciler, otomobiller, televizyonlar, buzdolapları ve cep telefonlarında bulunur. Hemen hemen tüm CPU’lar ayrık durumlarla ilgilenir ve belirli bir anahtarlama sınıfı gerektirir.
Transistörlerden önce, elektrik röleleri ve vakum tüpleri kullanılmıştır. Elemanlar güvenilir değildi ve ek donanım gerektirirdi. Vakum tüpleri daha güvenilirdi, ancak tamamen ısınmaları gerekirdi. Bir tüp arızalandığında, CPU’nun değiştirilmesi gerekirdi. Bundan dolayı, ilk elektronik bilgisayarlar genellikle daha az güvenilirdi.
Ancak, tüp tabanlı işlemci hız avantajları nedeniyle baskın hale gelmiştir. CPU’lar düşük saat frekanslarında çalışıyordu. Saat sinyali frekansları 100 kHz ila 4 MHz arasında değişiyordu ve anahtarlama cihazlarının hızlarıyla sınırlıydı.
Transistör İşlemci
İşlemci tasarımı, daha küçük ve güvenilir elektronik cihazlar geliştikçe karmaşıklaştı. İyileşmelerin ilki, transistörün gelişiyle başladı. 1950’ler ve 1960’larda transistörlü işlemci hantal elemanlara ihtiyaç duymuyordu. Transistörler, daha karmaşık ve güvenilir CPU’lar yapılmasını sağladı.
Baskılı devre kartları üzerine inşa edildiler. Entegre Devre (IC) teknolojisi, birçok transistörün bir yonga üzerinde üretilmesine izin verdi. Başlangıçta, sadece temel dijital devreler IC’lerde minyatürleştirildi. Bu devreler, “small-scale integration” (SSI) olarak adlandırıldı.
Apollo Rehberlik Bilgisayarı SSI entegre devreleri kullandı. Tam bir işlemci için binlerce çip gerekiyordu, ancak yer ve güç tasarrufu sağladı. Mikroelektronik ilerledikçe, IC’lerdeki transistör sayısı arttı. Yani, bireysel IC’lerin sayısını azalttı. MSI ve LSI entegre devreler, transistör sayısını yüzlerce ve binlerce artırdı.
1964’te IBM, System/360 bilgisayar mimarisini tanıttı. Bu mimari, farklı hız ve performansta programları çalıştırabiliyordu. IBM, gelişmeyi kolaylaştırmak için Microcode kavramını kullandı. System/360 mimarisi, yıllarca pazarın lideri oldu ve modern bilgisayarlarda da kullanıldı.
1964’te DEC, bilimsel pazara yönelik PDP-8 bilgisayarını tanıttı. Daha sonra, PDP-11 hattı, LSI bileşenleri ile uygulandı. PDP-11’in ilk LSI uygulaması dört LSI devre içeriyordu.
Transistör tabanlı bilgisayarlar, daha yüksek hızlarda çalışıyordu. Artan güvenilirlik ve düşük güç tüketimi sağlıyordu. Fakat, kısa anahtarlama süresine sahip olmasından dolayı CPU’nun yüksek hızda çalışmasını sağladı. Megahertz saat hızları elde edildi. SIMD tasarımları ortaya çıktı. Bu, Cray Inc. gibi süper bilgisayarların ortaya çıkmasını sağladı.
Mikroişlemciler
İlk mikroişlemci, 1970’te Intel 4004’tü. İlk yaygın mikroişlemci ise 1974’te piyasaya çıkan Intel 8080’dir. Bu işlemciler, merkezi işlem biriminin uygulama yöntemlerini değiştirdi.
O zamanki ana bilgisayar ve mini bilgisayar üreticileri, eski mimarilerini yükseltti. Daha sonra, tescilli IC geliştirme programları ile mikroişlemciler ürettiler. Bu işlemciler, eski donanım ve yazılımlarla uyumluydu.
Kişisel bilgisayarların ortaya çıkışı ve başarısı, CPU terimini mikroişlemcilere bağladı. Önceki nesil CPU’lar, ayrı bileşenler ve çok sayıda devre kartıyla uygulandı. Dolayısıyla, Mikroişlemciler ise az sayıda IC ile yapılır. Dahası, genellikle sadece bir IC kullanır.
Daha küçük işlemci boyutu, daha hızlı geçiş süreleri sağlar. Bu, fiziksel faktörler nedeniyle mümkündür. Senkron mikroişlemciler, onlarca megahertz ile birkaç gigahertz arasında saat sürelerine sahiptir.
Ek olarak, IC üzerinde küçük transistörler oluşturma yeteneği arttı. Bu, CPU’lardaki karmaşıklığı ve transistör sayısını artırdı. Bildiğimiz gibi Moore Yasası, işlemcilerin karmaşıklığındaki bu büyümeyi açıklıyor.
CPU karmaşıklığı, boyutu ve yapısı son 60 yılda değişti. Ancak, temel tasarım ve operasyon değişmedi. Açıkçası günümüz işlemcileri, von Neumann depolanmış program makineleri olarak tanımlayabiliriz.
Moore Yasası geçerliliğini korurken, transistör teknolojisinin sınırları endişe yarattı. Dolayısıyla elektronik kapıların minyatürleştirilmesi, elektromigrasyon gibi sorunlara neden oldu.
Bu yeni endişeler, araştırmacıları yeni yöntemler incelemeye yöneltti. Kuantum bilgisayar ve paralellik kullanımı gibi yöntemlerin araştırılmasının kapısını açtı. Bu yöntemler, von Neumann modelinin kullanışlılığını arttırmayı hedeflemektedir.
İşlemci (CPU) Nasıl Çalışır?
Çoğu işlemci, program adı verilen talimatları yürütür. Bu yüzden program, bilgisayar belleğinde saklanan sayıları temsil eder. Von Neumann Mimarisi işlemcileri ise, dört adım kullanır: okuma, kod çözme, yürütme ve yazma.
İlk adım olan okuma, bellekteki bir talimatı alır. Program sayacı, geçerli konumu belirler. Daha sonra bu sayaç, işlemciye programdaki yerini bildirir.
Talimatı okuduktan sonra, program sayacı artar. Okuyacağı talimatı yavaş bellekten alır. Bu durumda, işlemci beklemek zorunda kalır. Fakat, daha yeni işlemci türleri bu sorunu önbellekler ve pipelining ile rahatlıkla çözüyor.
Kod çözme adımında, talimatı parçalarına ayırır. İşlemci ise bu parçaları yorumlar. Ardından ISA (Instruction Set Architecture), talimatların nasıl yorumlanacağını belirler.
Opcode, hangi işlemin yapılacağını gösterir. Diğer sayılar, işlenenleri tanımlar. İşlenenler sabit bir değer olabilir. Ayrıca, bir kayıt veya bellek adresi de olabilir.
Eski tasarımlarda, talimatları kod çözmek için donanım kullanılırdı. Modern CPU’lar ise mikroprogram kullanır. Bu mikroprogram, işlemci yapılandırma sinyallerini oluşturur.
Mikroprogram bazen değiştirilebilir. Böylece, kod çözme şekli değişebilir. Okuma ve kod çözme adımlarından sonra, yürütme adımı gelir. Bu adımda, işlemci üniteleri bağlanır.
Örneğin, bir toplama işleminde ALU kullanır. Girdiler, eklenecek sayıları sağlar. Çıktılar, toplamı içerir. Bunun sonucundaysa ALU, basit aritmetik ve mantık işlemleri yapar.
Eğer toplama işleminde taşma yaşarsa, taşma bayrağını ayarlar. Son adım olan yazma kısmında ise sonuçları belleğe yazar. Artı, sonuçları işlemci kaydına veya ana belleğe yazar.
Bazı talimatlar, program sayacını değiştirir. Bu talimatlara jumps denir. Jumps, döngüleri ve koşullu yürütmeyi kolaylaştırır.
Bazı talimatlar bayrakları değiştirir. Bayraklar, programın davranışını etkiler. Örneğin, karşılaştırma talimatı, iki değeri karşılaştırır. Bayrak, hangi değerin büyük olduğunu gösterir. Bu bayrak, sonraki talimatları etkiler.
Talimatı yürütüp verileri yazdıktan sonra, işlem döngüsünü tekrar başlatır. Öncelikle program sayacını arttırır ve bir sonraki talimatı okur. Bunun sonucunda eğer talimat bir jump ise, program sayacını değiştirir.
Daha karmaşık CPU’lar, aynı anda birden fazla talimatı işler. Aslında bu durum klasik RISC Pipeline’ı açıklar. Bu yapı, mikrodenetleyicilerde yaygındır.
İşlemcilerde Tasarım ve Uygulama
1) Clock Frequency (Saat Frekansı)
Çoğu işlemci ve sıralı mantık cihazı doğası gereği eşzamanlıdır. Başka bir deyişle, bir senkronizasyon sinyaline göre tasarlanır ve çalışırlar. Bu sinyal genellikle periyodik bir kare dalga şeklindedir.
Elektrik sinyallerinin maksimum hareket süresi hesaplanarak tasarımcılar saat sinyalini belirler. Bu süre, sinyalin en kötü durumda yayılması için geçen süreden uzun olmalıdır. Saat periyodunu yayılma gecikmesinin üzerinde ayarlamak mümkündür.
CPU aygıtının tasarım açısından ve bileşen miktarı açısından basitleştirir. Ancak, bazı birimler daha hızlı olmasına rağmen, tüm işlemcinin yavaş öğelerini beklemesi gerekir. Bu sınırlama, işlemci paralelliğini artırmak için çeşitli yöntemlerle telafi edilmiştir.
Fakat, mimari iyileştirmeler tüm dezavantajları ortadan kaldırmaz. Örneğin, saat sinyali elektrik sinyali gecikmelerine tabidir. Daha karmaşık işlemci donanımlarında yüksek saat hızları, sinyalin fazda (senkronize) tutulmasını zorlaştırır.
Bu, birden fazla özdeş saat sinyali gerektirir. Bu, modern işlemci donanımlarında yaygın bir uygulamadır. Saat hızının artmasıyla birlikte CPU bileşeninin yaydığı ısı da artar. Saat sinyali sürekli değişir ve bileşenlerin kullanımını etkiler.
Enerji tüketimi artar ve bu da ısı dağılımını etkiler. Bu nedenle, yüksek saat hızlarında etkili soğutma çözümleri gerekir. Saat sinyalini gereksiz bileşenlere kapatma yöntemi, Clock gating olarak bilinir. Dolayısıyla, bu genellikle zordur ve düşük güç tasarımlarında kullanılır.
Bir diğer yöntem, küresel saat sinyalini tamamen ortadan kaldırmaktır. Bu, tasarım sürecini karmaşıklaştırır. Fakat, asenkron tasarımlar, güç tüketimi ve ısı dağılımında avantaj sağlar.
Nadir de olsa, bazı işlemciler küresel saat sinyali kullanmaz. ARM mimarisi kullanan AMULET ve MIPS R3000 ile uyumlu MiniMIPS bu örneklerdendir. Saat sinyalini kaldırmak yerine, bazı tasarımlar asenkron ALU’lar kullanır.
Asenkron tasarımlar, eşzamanlı tasarımlarla karşılaştırıldığında iyi performans gösterebilir. Bu tasarımlar, mükemmel güç tüketimi ve ısı yayma özellikleri sunar. Bu nedenle, gömülü bilgisayarlar için uygundur.
2) Parallelism (Paralellik)
Bu tasarım, alt ölçek işlemcilerde verimsizliğe neden olur. Çünkü yalnızca bir komut yürütür. İşlemci, bu komutu tamamlamadan bir sonraki talimata geçemez.
Sonuç olarak, alt ölçek işlemciler, çok saat döngüsüne ihtiyacı vardır. Yani, ikinci bir yürütme birimi eklemek genellikle faydalı olmaz. Performans, büyük ölçüde iyileşmez. Bu yüzden iki yol donar ve kullanılmayan transistörler artar.
Bu işlemci tasarımı, sadece skaler performans elde edebilir. Performans neredeyse her zaman alt ölçek kalır. Bununla birlikte, işlemci paralel olarak daha fazla çalışmasını sağlayan tasarım yöntemleri vardır.
Bu tasarım yöntemlerini iki ana terimle sınıflandırabiliriz:
- ILP (Instruction Level Parallelism – Komut Seviyesi Paralellik): İşlemci içindeki talimatların yürütme hızını artırmayı hedefler. Yani, yürütme kaynaklarının kullanımını artırır.
- TLP (Thread Level Parallelism – İş Parçacığı Düzeyi Paralellik): İşlemci için aynı anda çalıştırabileceği iş parçacığı sayısını artırır.
Her yöntem, uygulama ve işlemci performansı açısından farklılık gösterir. Bu farklılıklar, kullanılan yöntemlere bağlı olarak değişir.
Vektör İşlemciler
Daha az yaygın ancak önemli bir CPU türü vektörlerle ilgilidir. Yukarıda tartışılan işlemcileri skaler cihaz olarakta ifade edebiliriz.
Vektör işlemciler, her komut için tek bir veri parçası işlemek yerine, birden fazla veri parçasını ele alır. Bu işlemci türleri, genellikle SISD (Single Instruction, Single Data) ve SIMD (Single Instruction, Multiple Data) olarak adlandırılır.
SISD, tek talimat ve tek veri ile çalışır. SIMD ise tek talimatla çoklu veri ile ilgilenir. Vektör işlemciler, büyük veri setlerinde aynı işlemi hızlıca gerçekleştirebilir. Bu sebeple, optimizasyon gerektiren görevlerde faydalıdır.
Örneğin, multimedya uygulamaları ve bilimsel hesaplamalar vektör işlemcilerden yararlanır. Bir skaler işlemci, her veri talimatını tek tek işler. Fakat, vektör işlemci büyük veri setlerinde tek komutla işlem yapar.
İlk vektör CPU, genellikle kriptografi ve bilimsel araştırmalarda kullandılar. Sonrasında, multimedya dijital ortama taşınarak SIMD formuna ihtiyaç arttı.
Kayan nokta birimlerinin genel amaçlı işlemcilere eklenmesinden sonra, SIMD yürütme birimleri ortaya çıktı. Intel’in MMX gibi erken SIMD spesifikasyonları sadece tamsayılarla sınırlıydı.
Çoğu uygulama kayan nokta sayıları ile çalıştığından, bu durum yazılım geliştiriciler için engel oluşturdu. Bu sebeple, ilk tasarımlar zamanla geliştirildi ve modern SIMD spesifikasyonlarına dönüştü. Intel SSE ve PowerPC’nin AltiVec’i gibi örnekler dikkate değerdir.
Sonuç
Sonuç olarak, CPU’nun evrimi oldukça dikkat çekicidir. İlk günlerde hantal ve güvenilmez bileşenlerden, entegre devrelerin modern çağına geçiş yaşandı. Bu geçiş, vakum tüplerinden transistörlere ve mikroelektronik tasarımlara kadar uzanır.
Bu değişim, CPU’ların hızını ve güvenilirliğini artırmıştır. Ayrıca, bu gelişme günlük cihazlarda yaygın olarak bulunmalarına yol açmıştır.
Teknoloji gelişmeye devam ederken, işlemci tasarımının geleceği de umut vaat ediyor. Gelecekte, daha küçük, güçlü ve enerji verimli CPU’lar dijital dünyamızı şekillendirmeye devam edecek!