İşlemciler Nasıl Çalışır?

Hardware (Donanım) konusunda bilgi paylaşım alanıdır.
Cevapla
Kullanıcı avatarı
ultrailker
Megabyte2
Megabyte2
Mesajlar: 1167
Kayıt: 25 May 2006, 19:46
cinsiyet: Erkek

İşlemciler Nasıl Çalışır?

Mesaj gönderen ultrailker » 17 Oca 2007, 14:30

Resim

Mantık Kapıları ve Boolean Mantıgı
Hangi islemciyi kullanırsanız kullanın çalısma prensibi aynıdır: Bir islemci elektriksel sinyalleri 0 ve 1 (ikili sistemle çalısan bilgisayarlarımız için anlamlı olan tek degerler) seklinde alır ve verilen komuta göre bunları degistirerek sonucu yine 0'lardan ve 1'lerden olusan çıktılar halinde verir. Sinyal yollandıgı zaman ilgili hatta bulunan voltaj o sinyalin degerini verir. Örnegin 3.3 voltla çalısan bir sistemde 3.3 voltluk bir sinyal 1, 0 voltluk bir sinyal de 0 degerini üretir.
İslemciler aldıkları sinyallere göre karar verip çıktı olustururlar. Karar verme islemi her biri en az bir transistörden olusan mantık kapılarında yapılır. Transistörler, girislerine 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 islemcilerde bu transistörlerden milyonlarca tanesi aynı anda çalısarak çok karmasık mantık hesaplarını yapabilirler. Mantık kapıları karar verirken (yani akımın geçip geçmeyecegini belirlerken) Boolean Mantıgı'nı kullanırlar. Temel Boolean operatörleri AND (ve), OR (veya) ve NOT'tır (degil). Bu temel operatörlerle birlikte bunların degisik kombinasyonları kullanılır, NAND (not AND) gibi.
Bir AND kapısının 1 degerini verebilmesi (yani akımı iletebilmesi için) iki girisindeki degerin de 1 olması (yani iki girisinde de akım olması) gerekir. Aksi takdirde 0 degerini verecek; yani akımı iletmeyecektir. OR kapısında ise akımın iletilmesi için girislerin ikisinde de akım olmalı veya ikisinde de akım olmamalıdır. NOT kapısı ise girsindeki degerin terisini çıkısına verir.
OR Kapısı
A B Q 0 0 0 0 1 1 1 0 1 1 1 1
Resim
AND Kapısı
A B Q 0 0 0 0 1 0 1 0 0 1 1 1
Resim
NOT Kapısı
A Q 0 1 1 0
Resim
NAND kapıları çok kullanıslıdır, çünkü bu kapılar sadece iki transistör kullanarak üç transistörlü AND kapılarından daha fazla islevsellik saglarlar.
NAND Kapısı
A B Q 0 0 1 0 1 1 1 0 1 1 1 0
Resim
Bunların yanında NOR (not OR), XOR (eXclusive OR) ve XNOR (eXclusive not OR) gibi degisik kapıların degisik kombinasyonlarından olusan ve çok daha farklı aritmetik ve mantık islemleri için kullanılan kapılar vardır.
Bu mantık kapıları dijital anahtarlarla beraber çalısırlar. Oda boyutundaki bilgisayarların zamanında bunlar bildigimiz fiziksel anahtarlardı fakat günümüzde MOSFET (Metal-Oxide Semiconductor Field-Effect Transistor) denen bir çesit transistör kullanılır. Bu transistörün basit ama hayati öneme sahip bir görevi vardır: Voltaj uygulandıgı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ıgında devreyi açar, uygulanan voltaj 0'a yaklasınca da devreyi kapatır. Bir programın verdigi komutlara göre milyonlarca MOSFET aynı anda çalısarak 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.
Resim
AND ve OR kapılarının semalarına bakarak nasıl çalıstı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 girislerine uygulanan sinyallerinin ikisinin düsük de voltajlı (0) veya ikisinin de yüksek voltajlı (1) olması gerekir. OR kapısında ise giris sinyallerinden birinin degerinin 1 olması yeterlidir akımın geçmesi için.
Her giristeki elektrik akısını o girisin transistörü belirler. Bu transistörler devrelerden bagımsız ayrı elemanlar degillerdir. Çok miktarda transistör yarı-iletken bir maddenin (çogu zaman silikonun) üzerine yerlestirilip kablolar ve dıs baglantılar olmadan birbirine baglanır. Bu yapılara entegre devre denir ve ancak bu entegre devreler sayesinde karmasık mikroislemci tasarımları yapılabilir.
Güncel islemciler mikroskobik boyuttaki transistörlerin dirençler, kondansatörler ve diyotlarla bir araya getirilmesinden olusan milyonlarca karmasık mantık kapısından olusur. Mantık kapıları entegre devreleri olustururken entegre devreler de elektronik sistemleri olusturur.

CISC ve RISC Kavramları
Yıllar geçtikçe iki islemci ailesi piyasaya hakim olmaya basladı: Intel Pentium ve Motorola PowerPC. Bu iki islemci aynı zamanda uzun yıllar boyunca kullanılacak ve günümüze kadar degismeyecek iki farklı mimariye sahiplerdi.
CISC (Complex Instruction Set Computer), geleneksel bilgisayar mimarisidir. İslemci kendi üzerinde bulunan microcode adlı minyatür bir yazılımı kullanarak komut setlerini çalıstırır. Bu sayede komut setleri degisik uzunluklarda olabilir ve bütün adresleme modellerini kullanabilirler. Bunun dezavantajı çalısmak için daha karmasık bir devre tasarımına ihtiyaç duyulmasıdır.
İslemci üreticileri daha komlpleks (ve güçlü) islemciler ü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ısabilmesi gerektigini düsündü ve ortaya sadece sınırlı sayıda komut setleri kullanabilen RISC (Reduced Instruction Set Computer) mimarisi çıktı. Bu mimaride komutların uzunlugu 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ıstırabilecek komutlar isleme konabilir. RISC islemcilerin en büyük avantajları komutları çok çabuk isleyebilmeleridir çünkü bu mimaride komutlar çok basittir. Bu sayede RISC islemcileri tasarlayıp üretmek daha ucuzdur, çünkü bu basit komutlar için daha az transistör ve daha basit devreler gerekir.
En Basit Haliyle Bir İslemci
Resim
* Execution Unit (Core=Çekirdek): Bu ünite komutları çalıstırır ve pipeline (ishattı) denen yollarla beslenip tamsayıları kullanarak okuma, degistirme ve komut çalıstırma islemlerini yapar. Artimetik hesaplamalar için ALU (Arithmetic and Logic Unit) denen aritmetik ve mantık üniteleri kullanılır, ALU için islemcilerin yapıtasıdır diyebiliriz.

* Branch Predictor: Bu ünite bir program çalısırken baska bir satıra atlayacagı zaman hangi satırların isleme konacagını tahmin etmeye çalısarak Prefetch (komutların bellekten ne zaman çagrılacagına karar verir ve komutları Decode ünitesine dogru sırayla gönderir) ve Decode (bu ünite de kompleks makina dili komutlarını ALU'nun ve registerların kullanabilecegi basit komutlara dönüstürür) ünitelerine hız kazandırmaya çalısır.

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

* L1 Cache: İslemci için önbellek. Önemli kodlar ve veriler bellekten buraya kopyalanır ve islemci bunlara daha hızlı ulasabilir. Kodlar için olan Code ve veriler için olan Data cache olmak üzere ikiye ayrılır. Güncel islemcilerde L2 (Level 2, 2. seviye) önbellek de bulunur. Önceleri L2 önbellek anakartta bulunurdu. Daha sonra slot islemciler ortaya çıktı ve islemci çekirdeginin de üzerinde bulundugu kartuj seklindeki paketlerde önbellek çekirdegin dısında ama islemciyle aynı yapıda kullanılmaya baslandı. Bu kısa geçis döneminden sonraysa önbellek islemci çekirdeklerine entegre edildi.

* BUS Interface: İslemciye veri-kod karısımını geitirir, bunları ayırarak islemcinin ünitelerinin kullanmasını saglar ve sonuçları tekrar birlestirerek dısarı yollar. Bu arayüzün genisligi islemcinin adresleyebilecegi hafızayı belirler. Örnegin 32 bitlik hafıza genisligine sahip bir islemci 232 byte (4 GB) hafızayı adresleyebilir ve bu hafızadan aynı anda 32 bit üzerinde islem yapabilir. Günümüzde masaüstü pazarına 32 bitlik islemciler hakimken sunucu uygulamarı ve bilimsel çalısmalar için de 64 bitlik islemciler yaygın olarak kullanılır.

Bir islemcideki bütün elemalar saat vuruslarıyla çalısır. Saat hızı bir islemcinin saniyede ne kadar çevrim yapabilecegini belirler. 200 MHz saat hızı 200 MHz olan bir islemci kendi içinde saniyede 200 çevrim yapabilir. Her çevrimde islemcinin ne kadar islem yapabilecegi islemcinin yapısına göre degisir. Bu saat vurusları anakart üzerindeki Clock Generator denen yongayla üretilir. Bu yonganın içinde çok hassas kristaller vardır. Bu kristallerin titresimleri saat vuruslarını olusturur.
Program Counter (PC) denen birim içinde çalıstırılacak bir sonraki komutun hafızadaki adresini bulundurur. Bu komutun çalıstırılma zamanı geldiginde kontrol ünitesi komutu islenmek üzere hafızadan alır ve islemci üzerindeki Instruction Register denen bölüme islenmek üzere aktarır. Yazmaç da diyebilecegimiz registerlar hafızadan verilerin veya kodların yazılabildigi geçici saklama alanlarıdır. İçindeki adresi gerekli yazmaca aktaran PC daha sonra bir arttırılır ve bir sonraki komutun zamanı geldiginde Instruction Register'a aktarılmak üzere hazırda beklemesi saglanır.
Komut islendikten sonra hesaplamayı yapan birim Status Register (SC) denen yazmacın degerini degistirir, bu yazmaçta bir önceki islemin sonucu saklıdır. Kontrol ünitesi bu yazmaçtaki degeri kullanarak sonuca göre gerekli komutları çalıstırabilir.
Bu okuduklarınızın tamamı komutun uzunluguna ve islemcinin mimarisine göre bir veya daha fazla saat vurusunda yapılabilir.

Makina Dili
Bir islemcinin yaptıgı isleri temelde üçe ayırabiliriz:
- Bir islemci ALU'sunu veya FPU'sunu kullanarak tamsayılarla ve ondalık sayılarla matematiksel islemleri yapabilir
- Verileri bir bellek alanından digerine hareket ettirebilir.
- Verdigi karara göre bir programın farklı bir satırına atlayıp yeni bir komut çalıstırabilir.
Bir programcının rahatlıkla anlayabilecegi gibi bu üç temel islem bir programı çalıstırmak için yeterlidir. islemciler komutları bizim yazdıklarımızdan çok daha farklı bir sekilde algılarlar. Bir komut bit (binary digit, 0 veya 1 degerini alabilen ikili sistemdeki basamaklar) dizilerinden olusur fakat bu bit dizilerini akılda tutmak çok zordur. Bu yüzden komutlar bit dizileri yerine kısa kelimelerle ifade edilir ve bu kelimelerden olusan dile Assembly Dili denir. Bir assembler bu kelimeleri bit dizilerine çevirerek islemcinin anlayabilecegi sekilde hafızaya yerlestirir. 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 deger 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 karsılasıtırıp 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 asagı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 degiskeni 5 olana kadar her seferinde bir arttırılarak f degiskeninin degeriyle çarpılıyor 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 kodları assembly diline çevirir. RAM'in 128, assembly programını barındıran ROM'un da 0 numaralı hafıza adresinden basladıgını varsayarsak isemcimiz için yukarıdaki C kodları asagıdaki sekilde 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 kosuluna geri dön
17 STOP

simdi bu komutların hafızada nasıl göründügü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 sö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ügü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 baslıkta bahsettigimiz Decode ünitesi), opcedeları alarak islemcinin içindeki degisik bilesenleri harekte geçirecek elektriksel sinyallere dönüstürür.

Üretim
İlk islemciler valflar, ayrık transistörler ve çok kısıtlı bir sekilde entegre edilebilmis devrelerden olusuyordu fakat günümüz islemcileri tek bir silikon yonga üzerine sıgabiliyorlar. Çip üretiminde temel madde bir yarıiletken olan silikondur. Üretim sırasında çesitli islemler yapılır. Önce silicon ignot denen ilindirik bir yapı üretilir. Bunun hammaddesi saflastırılmıs silikondan elde edilen bir çesit kristaldir. Daha sonra bu silindirik yapı ince ince dilimlenerek wafer denen dairesel tabakalar olusturulur.Wafer tabakaları yüzeyleri ayna gibi olana kadar cilalanır. Çipler bu wafer tabakaları üzerinde olusturulur. Asagıdaki resimde bir wafer tabakasıyla üzerindeki çipleri görebilirsiniz.
Resim

Alıntıdır...



Kullanıcı avatarı
spectacuLar
Kilobyte2
Kilobyte2
Mesajlar: 370
Kayıt: 21 Eyl 2006, 18:04
cinsiyet: Erkek

Mesaj gönderen spectacuLar » 17 Oca 2007, 15:17

Tesekkürler kapılar ve bu konu dün final sınavında çıkan konuyduu... :D

Cevapla