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.
OR Kapısı |
A |
B |
Q |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1
| |

|
AND Kapısı |
A |
B |
Q |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1
| |
|
NOT Kapısı |
|

|
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.
NAND Kapısı |
A |
B |
Q |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0
| |
|
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.
En Basit Haliyle Bir
İşlemci
- 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.
Makina Dili
Bir işlemcinin yaptığı işleri temelde
üçe ayırabiliriz:
- Bir işlemci ALU'sunu veya FPU'sunu
kullanarak tamsayılarla ve ondalık sayılarla matematiksel işlemleri
yapabilir
- Verileri bir bellek alanından diğerine hareket
ettirebilir.
- Verdiği karara göre bir
programın farklı bir satırına atlayıp yeni bir komut çalıştırabilir.
Bir programcının rahatlıkla
anlayabileceği gibi bu üç temel işlem bir programı çalıştırmak için yeterlidir.
işlemciler komutları bizim yazdıklarımızdan çok daha farklı bir şekilde
algılarlar. Bir komut bit (binary digit, 0 veya 1 değerini alabilen ikili
sistemdeki basamaklar) dizilerinden oluşur fakat bu bit dizilerini akılda tutmak
çok zordur. Bu yüzden komutlar bit dizileri yerine kısa kelimelerle ifade edilir
ve bu kelimelerden oluşan dile Assembly Dili denir. Bir assembler bu kelimeleri
bit dizilerine çevirerek işlemcinin anlayabileceği şekilde hafızaya yerleştirir.
Komutlara örnek verelim:
- LOADA mem – bellek adresini A yazmacına
yükle
- LOADB mem - bellek adresini B yazmacına
yükle
- CONB con – B yazmacına sabit bir değer
ata
- SAVEB mem – B yazmacını bellek adresine
kaydet
- SAVEC mem - C yazmacını bellek adresine
kaydet
- ADD – A ile B'yi toplayıp sonucu C'ye
kaydet
- SUB – A'dan B'yi çıkartıp sonucu C'ye
kaydet
- MUL – A ile B'yi çarpıp sonucu C'ye
kaydet
- DIV – A'yı B'ye bölüp sonucu C'ye
kaydet
- COM – A ile B'yi karşılaşıtırıp sonucu
teste kaydet
- JUMP addr – adrese atla
- JEQ addr – eşitse adrese atla
- JNEQ addr – eşit değilse adrese atla
- JG addr – büyükse adrese atla
- JGE addr – büyük veya eşitse adrese atla
- JL addr – küçükse adrese atla
- JLE addr – küçük veya eşitse adrese
atla
- STOP – işlemi durdur
Şimdi aşağıdaki C kodlarının assembly
diline derlendikten sonra neye benzediklerine bakalım.
a=1;
f=1;
while
(a <= 5)
{
f = f * a;
a = a + 1;
}
C bilmeyenler için kısaca anlatmakta
fayda var: a değişkeni 5 olana kadar her seferinde bir arttırılarak f
değişkeninin değeriyle çarpılıyor ve f değişkeninin değeri 5 faktöryel oluyor.
Küme parantezleri içindeki while döngüsü bittikten sonra parantez içindeki koşul
tekrar kontrol ediliyor ve doğru olduğu sürece döngü tekrar tekrar işleme
konuyor.
Bir C derleyicisi bu kodları assembly
diline çevirir. RAM'in 128, assembly programını barındıran ROM'un da 0 numaralı
hafıza adresinden başladığını varsayarsak işemcimiz için yukarıdaki C kodları
aşağıdaki şekilde görünür:
// adres 128'deki a'yı
al
// adres 129'daki f'i al
0 CONB 1 // a=1;
1 SAVEB
128
2 CONB 1 // f=1;
3 SAVEB 129
4 LOADA
128 // a>5 ise 17'ye atla
5 CONB 5
6 COM
7 JG
17
8 LOADA 129 // f=f*a;
9 LOADB
128
10 MUL
11 SAVEC 129
12 LOADA 128 //
a=a+1;
13 CONB 1
14 ADD
15 SAVEC 128
16 JUMP
4 // 4. satırdaki if koşuluna geri dön
17 STOP
Şimdi bu komutların hafızada nasıl
göründüğüne bakalım. Bütün komutlar ikili sistemdeki sayılarla gösterilmeli.
Bunun için her komuta opcode denen bir numara verilir:
- LOADA - 1
- LOADB - 2
- CONB - 3
- SAVEB - 4
- SAVEC mem - 5
- ADD - 6
- SUB - 7
- MUL - 8
- DIV - 9
- COM - 10
- JUMP addr - 11
- JEQ addr - 12
- JNEQ addr - 13
- JG addr - 14
- JGE addr - 15
- JL addr - 16
- JLE addr - 17
- STOP - 18
Programımız ROM'da şöyle gözükür:
// adres 128'deki a'yı
al
// adres 129'daki f'i al
Addr opcode/value
0 3 // CONB
1
1 1
2 4 // SAVEB 128
3 128
4 3 //
CONB 1
5 1
6 4 // SAVEB
129
7 129
8 1 // LOADA
128
9 128
10 3 // CONB 5
11 5
12 10 //
COM
13 14 // JG 17
14 31
15 1 // LOADA
129
16 129
17 2 // LOADB
128
18 128
19 8 // MUL
20 5 // SAVEC
129
21 129
22 1 // LOADA
128
23 128
24 3 // CONB 1
25 1
26 6 //
ADD
27 5 // SAVEC 128
28 128
29 11 // JUMP
4
30 8
31 18 // STOP
Gördüğünüz gibi C'de 7 satır tutan kod assemblyde 17 satıra çıktı ve
ROM'da 31 byte kapladı. Instruction Decoder (komut çözücü, bir önceki başlıkta
bahsettiğimiz Decode ünitesi), opcedeları alarak işlemcinin içindeki değişik
bileşenleri harekte geçirecek elektriksel sinyallere dönüştürür.
Üretim
İlk işlemciler valflar, ayrık
transistörler ve çok kısıtlı bir şekilde entegre edilebilmiş devrelerden
oluşuyordu fakat günümüz işlemcileri tek bir silikon yonga üzerine
sığabiliyorlar. Çip üretiminde temel madde bir
yarıiletken olan silikondur. Üretim sırasında çeşitli işlemler yapılır. Önce
silicon ignot denen ilindirik bir yapı üretilir. Bunun hammaddesi
saflaştırılmış silikondan elde edilen bir çeşit kristaldir. Daha sonra bu
silindirik yapı ince ince dilimlenerek wafer denen dairesel tabakalar
oluşturulur. Wafer tabakaları yüzeyleri ayna gibi olana kadar cilalanır. Çipler
bu wafer tabakaları üzerinde oluşturulur. Aşağıdaki resimde bir wafer
tabakasıyla üzerindeki çipleri görebilirsiniz.
Çipler üst üste katmanlardan oluşur
ve bu katmanlar için değişik hammaddeler vardır. Örneğin yalıtkan yüzey olarak
silikon dioksit kullanılırken iletken yollar ploisilikonla oluşturulabilir.
Silikona iyon bombardımanı yapılarak silikondan transistörler üretilir ve bu
işleme doping denir.
Bir katman photoresist (ışığa
duyarlı) bir maddeyle kaplanır ve bu katmana istenen şeklin görüntüsü
projeksiyonla yansıtılır. Bu işlemden sonra ışığa maruz kalan yüzey maskelenir
ve kalan madde bir çözücü yardımıyla temizlenir. Maskelenen bölümde
transistörler ve yollar oluşturulduktan sonra etching denen kimyasal bir
işlemle istenmeyen maddeler katmandan uzaklaştırılarak katmana son şekli
verilir. Bu işlem bütün çip hazır olana kadar her katman için ayrı ayrı yapılır.
Katmanlardaki yapılar bir metrenin milyonda birinden daha küçük olduğu için bir
toz tanesi bile (toz tanelerinin boyutları 100 mikronluk ölçülere kadar
çıkabilir ki bu da işlemcideki yapıların 300 katından daha büyüktür) çok büyük
problemler çıkarabilir. Bunun için koruyucu giysilerle girilebilen tozsuz
odalarda üretim yapılır.
Başlarda yarı-iletken üretiminde hata
payı %50 civarındaydı ve çoğu zaman üretilen çiplerin ancak yarıya yakını sağlam
çıkıyordu. Bu oran %100 olamasa da geliştirilen üretim teknikleriyle günümüzde
oldukça yükselmiştir. Wafera eklenen her katmandan sonra testler yapılır ve
hatalar tesbit edilir. Die denen wafer üzerindeki ”çıplak” çipler
birbirinden ayrılır ve yapılan testlerden sonra sağlam olanlar kullanıma uygun
şekilde paketlenir. Günümüzde işlemciler PGA(Pin Grid
Arrays) formunda paketlenir. Bu paketlerde seramik bir dörtgenin altına
dizilmiş pin denen bağlantı noktaları vardır. İşlemci çekirdekleri
paketlendikten sonra aşağıdaki gibi görünür.
Intel'in entegre çip tasarımıyla
üretilen ilk işlemcisi olan 4004 10 mikronluk bir üretim tekniğiyle
üretiliyordu. İşlemci içindeki en küçük yapı bir metrenin on milyonda biri
kadardı. Günümüzdeyse 0,13 mikronluk üretim teknikleri kullanılıyor ve çok
yakında 0,1 mikronun da altına inilecek. Bu
arada yukarıdaki fotoğraflar için haber editörümüz Ahmet'e teşekkür ediyorum,
bazı fotoğrafları aradığım zaman bir türlü bulamamak gibi ilginç bir yeteneğe
sahip olduğumdan bu bölüm az daha fotoğrafsız kalıyordu :)
Moore Yasası
1965 yılında Intel'in kurucularından
Gordon Moore'un ortaya attığı Moore Yasası'na göre işlemcilerdeki transistör
sayısı 18 ayda bir ikiye katlanır. Moore, bu yasanın sonraki on yıl boyunca
geçerliliğini koruyacağını tahmin etmişti ama Intel bu yasayı günümüze kadar
çiğnemeden devam ettirmeyi aşağıdaki grafikte de görebileceğiniz gibi
başardı.
Fizik yasaları, mühendislerin saat
hızlarını sonsuza kadar arttırabilmelerini engeller. Silikonun sınırlarına
neredeyse ulaşılmak üzereyken saat hızlarının hala arttığını görüyoruz. Saat
hızı her zaman performans anlamına gelmiyor, bu yüzden mühendisler işlemcilerin
her saat vuruşunda daha fazla komutu işleyebilmeleri için de uğraşıyorlar aynı
zamanda. 4 bitlik bir işlemci bile iki tane 32 bitlik sayıyı toplayabilir ama
bunun için pek çok komutu işlemesi gerekir. 32 bitlik bir işlemci bu toplamayı
tek bir komutla yapabilir.
İşlemcilerin saat vuruşlarında işlem
yaptıklarını söylemiştik. Normal yöntemlerle bir komutu yüklemek, çözmek,
kullanacağı veriyi almak, çalıştırmak ve son olarak da sonucu yazmak için beş
saat vuruşu gerekir. Bu sorunu çözmek için günümüz işlemcileri pipelining denen
teknolojiyi kullanılır. Bu teknolojide bir işlemi yapmak için değişik aşamalar
ard arda dizilir ve bir işlemin bir aşaması yapılırken boştaki kaynaklarla da
başka bir işlemin herhangi bir aşaması yapılabilir. Bu teknolojiyle bir komutu
tek bir saat vuruşunda bitirebilmek mümkün olur. Superscalar denen bir
mamariyle paralel pipellinelar kullanılarak performans daha da arttırılabilir.
Bu konudaki son gelişme Intel'in Hyperthreading teknolojisidir. Komutları
paralel olarak çalıştırmak için çift işlemciye ihtiyaç duyulur. Bu
teknolojideyse olaya şu şeklide yaklaşılır: Komutlar thread denen
parçalardan oluşur ve çift işlemciyle komut seviyesinde paralellik yerine tek
işlemciyle thread seviyeinde paralellik sağlanır. Komutlar threadlere ayrılır ve
bu threadler paralel olarak işlenip çıkışta tekrar birleştirirler. Tek bir
işlemci tam anlamıyla olmasa da belirli bir seviyede çift işlemci gibi çalışır.
Bu yöntem sadece tek bir işlemcinin kaynakları kullanıldığı için çift işlemcinin
yerini tutamasa da bazı uygulumalarda belirli bir performans artışı sağlar. En
büyük dezavantajı komutların parçalanıp tekrar birleştirilmesi sırasında
kaybedilen zaman yüzünden aynı anda birden çok komutun işlenmesine ihtiyaç
duymayan programlarda az da olsa performans düşüşü yaşanmasıdır.
Bir İşlemcinin
Performansı
Bir işlemcinin performansını
belirleyenler arasında kullanıcıların en çok tartıştıkları
aşağıdakilerdir:
- İşlemci
Mimarisi: Burayı çoğu kimse atlasa
da en önemli etken budur. Bir işlemcinin bir saat döngüsünde ne kadar uzunlukta
kaç tane komutu aynı anda işleyebildiğini saat hızı ya da önbelleği değil sadece
mimarisi belirler.
- Saat
Hızı: İşlemcinin çalışma frekansıdır
ve günümüzde GHz mertebesine kadar ulaşmıştır. Saat hızı ne kadar yüksek olursa
saniyedeki saat vuruşu (ve işlemci çevrimi) sayısı da o kadar yüksek olacağından
saat hızının performansa etkisi oldukça yüksektir. Yalnız burada yapılabilecek
çok büyük bir hata farklı mimarideki işlemcileri saat hızlarına göre
karşılaştırmaktır. Saat hızı kullanılarak ancak aynı işlemci ailesi içinde
gerçekçi karşılaştırmalar yapılabilir. Bir işlemcinin saat hızını sistem hızıyla
(FSB, Front Side Bus) işlemcinin çarpanının çarpımı
belirler. Sistem hızı fazla yüksek olmasa da işlemci kendi içinde çarpanlarını
kullanarak çok daha yüksek hızlara çıkabilir. Örneğin oldukça popüler olan 1.8
GHz hızında çalışan bir Pentium 4 işlemci 18x100 MHz'te çalışır.
- L1/L2
Cache: Önemli veriler işlemcinin
ihtiyaç anında onlara daha hızlı ulaşabilmesi için önbellekte tutulur. 1. seviye
önbellek daha önceliklidir ve buradaki verileri işlemci daha çok kullanır.
Önbellek miktarlarını karşılaştırırken işlemci mimarisi yine çok önemlidir.
Mesela 16 KB L1 cache bir Pentium 4 için yeterliyken aynı performansta çalışan
bir AMD Athlon işlemcide 128 KB L1 cache bulunur. Önemli olan önbelleğin ne
şekilde kullanıldığıdır.
Ham işlemci performansını ifade etmek
için MIPS (Million Instructions Per Second,
saniyede işlenebilen komut sayısı) ve MFLOPS (Million
Floating Point Operations Per Second, saniyede
yapılabilen kayar nokta hesabı) birimleri kullanılır ve performans konusunda
evrensel geçerliliği olan tek kavramlar bunlardır.
Yazılım Uyumluluğu
Bilgisayarların ilk günlerinde herkes
kendi yazılımını yazdığı için işlemci mimarisi biraz daha arkaplandaydı. Geçen
zamanla birlikte yazılımlar da oldukça gelişti ve bugünse yazılım başlı başına
bir sektör. Günümüzde her ihtiyacımız için oturup kendi yazılımlarımızı
hazırlmamamız imkansız, bir o kadar da gereksiz. Belirli bir standartlaşmayla
beraber işlemcilerin önemi de arttı.
Günümüz PC'leri Intel 80x86
mimarisini kullanır. Bu mimari 70'li yıllardan bugüne kadar gelmiştir, güncel
CISC işlemciler hala bu mimariyi kullanır. Bu standartlaşmanın sonucu
olarak programlar işlemcilere göre değil komut setlerine göre yazılır ve
80x86 mimarisine göre yazılmış bir programın bir Intel işlemcide çalışıp da bir
AMD işlemcide çalışmaması (ya da bunun tersi) mümkün değildir. İşlemcilere özel
bazı ek komut setleri olsa da (SSE, 3D Now! gibi) bunlar sadece işlemciye
yönelik optimizasyonlardır ve programlar temelde aynıdır. 80x86 mimarisine göre
yazılmış 32 bitlik bir program aynı mimarideki 32 bitlik bütün işlemciler
tarafından sorunsuzca çalıştırılabilir.
Kaynaklar:
http://www.pctechguide.com/02procs.htm
http://www.howstuffworks.com/microprocessor.htm/printable
http://www.zenith-india.com/zen/TrainingMaterial/details/howmicroprocessorswork.htm
http://computer.howstuffworks.com/boolean.htm/printable