Root > Documents > Web Güvenlik Açıkları > Processors How Does CPU Work ?
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > Processors How Does CPU Work ?
Madde
  Yazar : Anon
  Date : 23.11.2004 16:16:30
 
# Processors How Does CPU Work ?
 

CPU\’nun (Central Processing Unit, Merkezi Islem Birimi), bilgisayarlarimizin temel parçasi oldugunu rahatlikla söyleyebiliriz. Bir sistemdeki herhangibir parça ne ise yararsa yarasin mutlaka islemciye (yazinin daha basi ama kalan bölümde CPU yerine hepimizin kullandigi islemci kelimesini kullanacagim) bagimli olarak çalisir. Klavyedeki tuslara her basisiniz, yaptiginiz her fare hareketi bile bir sekilde islemciye ugrar. Kullandiginiz islemci, herseyden önce sisteminizin performansini ve kullanabileceginiz isletim sistemlerini belirler. Hatta çogumuz bilgisayar alirken ilk önce islemciyi belirleriz. Simdi AMD - Intel savasini (çok istediginizi biliyorum ama bu yazinin amacina pek uygun degil) bir yana birakip islemcilerin nasil çalistigina bir göz atalim.

Mantik Kapilari ve Boolean Mantigi

Hangi islemciyi kullanirsaniz kullanin çalisma prensibi aynidir: Bir islemci elektriksel sinyalleri 0 ve 1 (ikili sistemle çalisan bilgisayarlarimiz için anlamli olan tek degerler) seklinde alir ve verilen komuta göre bunlari degistirerek sonucu yine 0\’lardan ve 1\’lerden olusan çiktilar halinde verir. Sinyal yollandigi zaman ilgili hatta bulunan voltaj o sinyalin degerini verir. Örnegin 3.3 voltla çalisan bir sistemde 3.3 voltluk bir sinyal 1, 0 voltluk bir sinyal de 0 degerini üretir.

Islemciler aldiklari sinyallere göre karar verip çikti olustururlar. Karar verme islemi her biri en az bir transistörden olusan mantik kapilarinda yapilir. Transistörler, girislerine uygulanan akim kombinasyolarina göre devreyi açip kapayabilen ve bu sayede de elektronik bir anahtar görevi gören yariiletken devre elemanlaridir. Modern islemcilerde bu transistörlerden milyonlarca tanesi ayni anda çalisarak çok karmasik mantik hesaplarini yapabilirler. Mantik kapilari karar verirken (yani akimin geçip geçmeyecegini belirlerken) Boolean Mantigi\’ni kullanirlar. Temel Boolean operatörleri AND (ve), OR (veya) ve NOT\’tir (degil). Bu temel operatörlerle birlikte bunlarin degisik kombinasyonlari kullanilir, NAND (not AND) gibi.

Bir AND kapisinin 1 degerini verebilmesi (yani akimi iletebilmesi için) iki girisindeki degerin de 1 olmasi (yani iki girisinde de akim olmasi) gerekir. Aksi takdirde 0 degerini verecek; yani akimi iletmeyecektir. OR kapisinda ise akimin iletilmesi için girislerin ikisinde de akim olmali veya ikisinde de akim olmamalidir. NOT kapisi ise girsindeki degerin terisini çikisina verir.

OR Kapisi

A B Q
0 0 0
0 1 1
1 0 1
1 1 1

AND Kapisi

A B Q
0 0 0
0 1 0
1 0 0
1 1 1

NOT Kapisi

A Q
0 1
1 0

NAND kapilari çok kullanislidir, çünkü bu kapilar sadece iki transistör kullanarak üç transistörlü AND kapilarindan daha fazla islevsellik saglarlar.

NAND Kapisi

A B Q
0 0 1
0 1 1
1 0 1
1 1 0

Bunlarin yaninda NOR (not OR), XOR (eXclusive OR) ve XNOR (eXclusive not OR) gibi degisik kapilarin degisik kombinasyonlarindan olusan ve çok daha farkli aritmetik ve mantik islemleri için kullanilan kapilar vardir.

Bu mantik kapilari dijital anahtarlarla beraber çalisirlar. Oda boyutundaki bilgisayarlarin zamaninda bunlar bildigimiz fiziksel anahtarlardi fakat günümüzde MOSFET (Metal-Oxide Semiconductor Field-Effect Transistor) denen bir çesit transistör kullanilir.  Bu transistörün basit ama hayati öneme sahip bir görevi vardir: Voltaj uygulandiginda devreyi açarak veya kapatarak tepki verir. Genel olarak kullanilan MOSFET türü, üst sinirda veya ona yakin voltaja sebep olan bir akim uygulandiginda devreyi açar, uygulanan voltaj 0\’a yaklasinca da devreyi kapatir. Bir programin verdigi komutlara göre milyonlarca MOSFET ayni anda çalisarak gerekli sonucu bulmak için akimi gerekli mantik kapilarina yönlendirir. Her mantik kapisi bir veya daha fazla transistör içerir ve her transistör akimi öyle kontrol eder ki, sonuçta devre kapaliyken açilir, açikken kapanir veya mevcut durumunu korur.

AND ve OR kapilarinin semalarina bakarak nasil çalistiklari hakkinda fikir sahibi olabiliriz. Bu iki kapida iki sinyal alip onlardan bir sinyal üretir. AND kapisindan akim geçmesi için girislerine uygulanan sinyallerinin ikisinin düsük de voltajli (0) veya ikisinin de yüksek voltajli (1) olmasi gerekir. OR kapisinda ise giris sinyallerinden birinin degerinin 1 olmasi yeterlidir akimin geçmesi için.

Her giristeki elektrik akisini o girisin transistörü belirler. Bu transistörler devrelerden bagimsiz ayri elemanlar degillerdir. Çok miktarda transistör yari-iletken bir maddenin (çogu zaman silikonun) üzerine yerlestirilip kablolar ve dis baglantilar olmadan birbirine baglanir. Bu yapilara entegre devre denir ve ancak bu entegre devreler sayesinde karmasik mikroislemci tasarimlari yapilabilir.

Güncel islemciler mikroskobik boyuttaki transistörlerin dirençler, kondansatörler ve diyotlarla bir araya getirilmesinden olusan milyonlarca karmasik mantik kapisindan olusur. Mantik kapilari entegre devreleri olustururken entegre devreler de elektronik sistemleri olusturur.

CISC ve RISC Kavramlari

Yillar geçtikçe iki islemci ailesi piyasaya hakim olmaya basladi: Intel Pentium ve Motorola PowerPC. Bu iki islemci ayni zamanda uzun yillar boyunca kullanilacak ve günümüze kadar degismeyecek iki farkli mimariye sahiplerdi.

CISC (Complex Instruction Set Computer), geleneksel bilgisayar mimarisidir. Islemci kendi üzerinde bulunan microcode adli minyatür bir yazilimi kullanarak komut setlerini çalistirir. Bu sayede komut setleri degisik uzunluklarda olabilir ve bütün adresleme modellerini kullanabilirler. Bunun dezavantaji çalismak için daha karmasik bir devre tasarimina ihtiyaç duyulmasidir.

Islemci üreticileri daha komlpleks (ve güçlü) islemciler üretmek için sürekli daha büyük komut setleri kullandilar. 1974 yilinda IBM\’den John Cocke bir çipin daha az komutla çalisabilmesi gerektigini düsündü ve ortaya sadece sinirli sayida komut setleri kullanabilen RISC (Reduced Instruction Set Computer) mimarisi çikti. Bu mimaride komutlarin uzunlugu sabittir ve bu yüzden de direk olmayan adresleme modu kullanilamaz. Sadece tek bir saat döngüsünde veya daha az sürede çalistirabilecek komutlar isleme konabilir. RISC islemcilerin en büyük avantajlari komutlari çok çabuk isleyebilmeleridir çünkü bu mimaride komutlar çok basittir. Bu sayede RISC islemcileri tasarlayip üretmek daha ucuzdur, çünkü bu basit komutlar için daha az transistör ve daha basit devreler gerekir.

En Basit Haliyle Bir Islemci

  • Execution Unit (Core=Çekirdek): Bu ünite komutlari çalistirir ve pipeline (ishatti) denen yollarla beslenip tamsayilari kullanarak okuma, degistirme ve komut çalistirma islemlerini yapar. Artimetik hesaplamalar için ALU (Arithmetic and Logic Unit) denen aritmetik ve mantik üniteleri kullanilir, ALU için islemcilerin yapitasidir diyebiliriz.
  • Branch Predictor: Bu ünite bir program çalisirken baska bir satira atlayacagi zaman hangi satirlarin isleme konacagini tahmin etmeye çalisarak Prefetch (komutlarin bellekten ne zaman çagrilacagina karar verir ve komutlari Decode ünitesine dogru sirayla gönderir) ve Decode (bu ünite de kompleks makina dili komutlarini ALU\’nun ve registerlarin kullanabilecegi basit komutlara dönüstürür)  ünitelerine hiz kazandirmaya çalisir.
  • Floating Point Unit: Bu ünite tamsayi olmayan floating point (kayar nokta) hesaplamalarindan sorumludur
  • L1 Cache: Islemci için önbellek. Önemli kodlar ve veriler bellekten buraya kopyalanir ve islemci bunlara daha hizli ulasabilir. Kodlar için olan Code ve veriler için olan Data cache olmak üzere ikiye ayrilir. Güncel islemcilerde L2 (Level 2, 2. seviye) önbellek de bulunur. Önceleri L2 önbellek anakartta bulunurdu. Daha sonra slot islemciler ortaya çikti ve islemci çekirdeginin de üzerinde bulundugu kartuj seklindeki paketlerde önbellek çekirdegin disinda ama islemciyle ayni yapida kullanilmaya baslandi. Bu kisa geçis döneminden sonraysa önbellek islemci çekirdeklerine entegre edildi.
  • BUS Interface: Islemciye veri – kod karisimini geitirir, bunlari ayirarak islemcinin ünitelerinin kullanmasini saglar ve sonuçlari tekrar birlestirerek disari yollar. Bu arayüzün genisligi islemcinin adresleyebilecegi hafizayi belirler. Örnegin 32 bitlik hafiza genisligine sahip bir islemci 232 byte (4 GB) hafizayi adresleyebilir ve bu hafizadan ayni anda 32 bit üzerinde islem yapabilir. Günümüzde masaüstü pazarina 32 bitlik islemciler hakimken sunucu uygulamari ve bilimsel çalismalar için de 64 bitlik islemciler yaygin olarak kullanilir.

Bir islemcideki bütün elemalar saat vuruslariyla çalisir. Saat hizi bir islemcinin saniyede ne kadar çevrim yapabilecegini belirler. 200 MHz saat hizi 200 MHz olan bir islemci kendi içinde saniyede 200 çevrim yapabilir. Her çevrimde islemcinin ne kadar islem yapabilecegi islemcinin yapisina göre degisir. Bu saat vuruslari anakart üzerindeki Clock Generator denen yongayla üretilir. Bu yonganin içinde çok hassas kristaller vardir. Bu kristallerin titresimleri saat vuruslarini olusturur.

Program Counter (PC) denen birim içinde çalistirilacak bir sonraki komutun hafizadaki adresini bulundurur. Bu komutun çalistirilma zamani geldiginde kontrol ünitesi komutu islenmek üzere hafizadan alir ve islemci üzerindeki Instruction Register denen bölüme islenmek üzere aktarir. Yazmaç da diyebilecegimiz registerlar hafizadan verilerin veya kodlarin yazilabildigi geçici saklama alanlaridir.  Içindeki adresi gerekli yazmaca aktaran PC daha sonra bir arttirilir ve bir sonraki komutun zamani geldiginde Instruction Register\’a aktarilmak üzere hazirda beklemesi saglanir.

Komut islendikten sonra hesaplamayi yapan birim Status Register (SC) denen yazmacin degerini degistirir, bu yazmaçta bir önceki islemin sonucu saklidir. Kontrol ünitesi bu yazmaçtaki  degeri kullanarak sonuca göre gerekli komutlari çalistirabilir.

Bu okuduklarinizin tamami komutun uzunluguna ve islemcinin mimarisine göre bir veya daha fazla saat vurusunda yapilabilir

Makina Dili

Bir islemcinin yaptigi isleri temelde üçe ayirabiliriz:

- Bir islemci ALU\’sunu veya FPU\’sunu kullanarak tamsayilarla ve ondalik sayilarla matematiksel islemleri yapabilir
- Verileri bir bellek alanindan digerine hareket ettirebilir.

- Verdigi karara göre bir programin farkli bir satirina atlayip yeni bir komut çalistirabilir.

Bir programcinin rahatlikla anlayabilecegi gibi bu üç temel islem bir programi çalistirmak için yeterlidir. islemciler komutlari bizim yazdiklarimizdan çok daha farkli bir sekilde algilarlar. Bir komut bit (binary digit, 0 veya 1 degerini alabilen ikili sistemdeki basamaklar) dizilerinden olusur fakat bu bit dizilerini akilda tutmak çok zordur. Bu yüzden komutlar bit dizileri yerine kisa kelimelerle ifade edilir ve bu kelimelerden olusan dile Assembly Dili denir. Bir assembler bu kelimeleri bit dizilerine çevirerek islemcinin anlayabilecegi sekilde hafizaya yerlestirir. Komutlara örnek verelim:

  • LOADA mem – bellek adresini A yazmacina yükle
  • LOADB mem - bellek adresini B yazmacina yükle
  • CONB con – B yazmacina sabit bir deger ata
  • SAVEB mem – B yazmacini bellek adresine kaydet
  • SAVEC mem - C yazmacini bellek adresine kaydet
  • ADD – A ile B\’yi toplayip sonucu C\’ye kaydet
  • SUB – A\’dan B\’yi çikartip sonucu C\’ye kaydet
  • MUL – A ile B\’yi çarpip sonucu C\’ye kaydet 
  • DIV – A\’yi B\’ye bölüp sonucu C\’ye kaydet
  • COM – A ile B\’yi karsilasitirip sonucu teste kaydet
  • JUMP addr – adrese atla
  • JEQ addr – esitse adrese atla
  • JNEQ addr – esit degilse adrese atla
  • JG addr – büyükse adrese atla
  • JGE addr – büyük veya esitse adrese atla
  • JL addr – küçükse adrese atla
  • JLE addr – küçük veya esitse adrese atla
  • STOP – islemi durdur

Simdi asagidaki C kodlarinin assembly diline derlendikten sonra neye benzediklerine bakalim.

a=1;
f=1;
while (a <= 5)
{
f = f * a;
a = a + 1;
}

C bilmeyenler için kisaca anlatmakta fayda var: a degiskeni 5 olana kadar her seferinde bir arttirilarak f degiskeninin degeriyle çarpiliyor ve f degiskeninin degeri 5 faktöryel oluyor. Küme parantezleri içindeki while döngüsü bittikten sonra parantez içindeki kosul tekrar kontrol ediliyor ve dogru oldugu sürece döngü tekrar tekrar isleme konuyor.

Bir C derleyicisi bu kodlari assembly diline çevirir. RAM\’in 128, assembly programini barindiran ROM\’un da 0 numarali hafiza adresinden basladigini varsayarsak isemcimiz için yukaridaki C kodlari asagidaki sekilde görünür:

// adres 128\’deki a\’yi 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. satirdaki if kosuluna geri dön
17 STOP

Simdi bu komutlarin hafizada nasil göründügüne bakalim. Bütün komutlar ikili sistemdeki sayilarla 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
Programimiz ROM\’da söyle gözükür:

// adres 128\’deki a\’yi 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ügünüz gibi C\’de 7 satir tutan kod assemblyde 17 satira çikti ve ROM\’da 31 byte kapladi. Instruction Decoder (komut çözücü, bir önceki baslikta bahsettigimiz Decode ünitesi), opcedelari alarak islemcinin içindeki degisik bilesenleri harekte geçirecek elektriksel sinyallere dönüstürür.

Üretim

Ilk islemciler valflar, ayrik transistörler ve çok kisitli bir sekilde entegre edilebilmis devrelerden olusuyordu fakat günümüz islemcileri tek bir silikon yonga üzerine sigabiliyorlar. Çip üretiminde temel madde bir yariiletken olan silikondur. Üretim sirasinda çesitli islemler yapilir. Önce silicon ignot denen ilindirik bir yapi üretilir. Bunun hammaddesi saflastirilmis silikondan elde edilen bir çesit kristaldir. Daha sonra bu silindirik yapi ince ince dilimlenerek wafer denen

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©