İşlemcinin "Beyni" Nasıl Çalışır: ALU Analizi
Aritmetik Mantık Birimi (ALU), merkezi işlem biriminin (CPU) içindeki tüm matematiksel hesaplamaları (toplama, çıkarma) ve mantıksal işlemleri (karşılaştırma, bit kaydırmaları) gerçekleştiren dijital bloktur. Yazılım kodunu fiziksel elektrik sinyallerine dönüştüren ve sonucu elde etmek için transistörlerin durumunu değiştiren tam olarak ALU'dur. ALU olmadan işlemci, programın hiçbir talimatını işleyemezdi.
Aşağıda blok yapısı, gerçekleştirilen işlemlerin türleri ve bilgisayarın çalışmasını yönetmede durum bayraklarının rolü detaylıca incelenmektedir.
İçindekiler
ALU Nelerden Oluşur
Fiziksel düzeyde ALU, kombinasyonel bir mantık devresidir. Verileri sürekli olarak depolamaz, bunun yerine onları "anında" işler. Cihazın temel bileşenleri şunlardır:
- Toplayıcılar (Adders): Her türlü aritmetiğin temelidir. Modern mimarilerde çarpma işlemi bile genellikle hızlı toplama ve kaydırma dizilerine indirgenir.
- Mantık Kapıları (Logic Gates): Veriler üzerinde bit düzeyinde işlemler gerçekleştiren temel elemanlar (VE, VEYA, DEĞİL, ÖZEL VEYA).
- Çoklayıcılar (Multiplexers): Mevcut saat döngüsünde hangi sonucun (örneğin toplam veya mantıksal VE) çıkışa gönderileceğini seçen anahtarlar.
- Kaydırma Blokları (Shifters): Bitleri sola veya sağa kaydırmaktan sorumludur; bu, iki'nin kuvvetleriyle hızlı çarpma/bölme ve veri hizalama için kritiktir.
Tüm bu elemanlar, operandların genel amaçlı yazmaçlardan (GPR) veya L1 önbellekten geldiği veri yollarıyla birbirine bağlanmıştır.
ALU Hangi İşlemleri Gerçekleştirir
İşlemci talimatları, ALU tarafından işlenen iki büyük gruba ayrılabilir.
1. Aritmetik İşlemler
- Toplama (ADD) ve Çıkarma (SUB): Temel işlemlerdir. Çıkarma genellikle tümleyen kod ile toplama olarak uygulanır (ikinci sayının bitlerinin tersini alma + 1).
- Artırma (INC) ve Azaltma (DEC): Değeri bir artırmak veya azaltmak. Daha az mantık elemanı gerektirdiği için tam toplama işleminden daha hızlı gerçekleştirilirler.
- Çarpma ve Bölme: Basit mikrodenetleyicilerde kaydırma ve toplama döngüleri aracılığıyla taklit edilebilirler. Modern masaüstü CPU'larda (x86, ARM) bunun için ALU ile sıkı entegre edilmiş ayrı yüksek hızlı bloklar (çarpanlar) bulunur, ancak teknik olarak ayrı bir yürütme modülü olarak ayrılabilirler.
2. Mantıksal İşlemler ve Karşılaştırmalar
- Bit Düzeyinde Mantık:
AND(VE),OR(VEYA),XOR(ÖZEL VEYA),NOT(DEĞİL). Bit maskeleme, şifreleme ve bayrak işleme için kullanılırlar. - Kaydırmalar:
- Mantıksal: Boşalan bitleri sıfırlarla doldurur.
- Aritmetik: Sağa kaydırma sırasında işaret bitini (en yüksek anlamlı bit) korur; bu, negatif sayılarla çalışmak için önemlidir.
- Karşılaştırma (CMP): Aslında bir çıkarma işlemidir, ancak sonuç bir yazmaca kaydedilmez, yalnızca durum bayrakları güncellenir. Bu, işlemcinin karar vermesini sağlar (örneğin, "Eğer A > B ise, etikete atla").
Durum Bayraklarının Rolü (Status Flags)
ALU'nun çıktısı tek bir sayı ile sınırlı değildir. Her işlemden sonra özel bir bayrak yazmacı (x86'da EFLAGS/RFLAGS, ARM'da APSR) güncellenir. Bu bayraklar, program dallanması için kritik öneme sahiptir.
| Bayrak | Adı | Ne Zaman Ayarlanır |
|---|---|---|
| ZF | Zero Flag (Sıfır Bayrağı) | İşlem sonucu sıfıra eşittir. Eşitlik kontrolü (==) için kullanılır. |
| CF | Carry Flag (Taşıma Bayrağı) | En yüksek anlamlı bitten taşıma gerçekleşti (işaretsiz sayılar için). Sonucun bit genişliğine sığmadığını belirtir. |
| SF | Sign Flag (İşaret Bayrağı) | Sonucun en yüksek biti 1'dir (sayı negatiftir). |
| OF | Overflow Flag (Taşma Bayrağı) | İşaretli taşma gerçekleşti (sonuç, işaretli gösterim için çok büyük veya çok küçük). |
| PF | Parity Flag (Eşlik Bayrağı) | Sonucun en düşük byte'ındaki bir bitlerinin sayısı çifttir (eskimiş bayrak, nadiren kullanılır). |
Bu neden programcılar için önemli?
Bayrakları anlamak, optimize edilmiş kod yazmaya yardımcı olur. Örneğin, if (a == 0) kontrolü, ZF'yi ayarlayan bir karşılaştırma talimatına ve ardından ZF'ye bakan koşullu bir atlamaya derlenir. Gereksiz karşılaştırmalar işlemci pipeline'ını yavaşlatır.
Komut Yürütme Süreci: Adım Adım Döngü
ALU'nun çalışması, işlemci pipeline'ı ile ayrılmaz bir şekilde bağlantılıdır. ADD R1, R2 (Register 2'nin içeriğini Register 1 ile topla) talimatının yürütülmesi için basitleştirilmiş bir döngüyü inceleyelim:
- Getirme (Fetch): Kontrol birimi, işlem kodunu talimat belleğinden okur.
- Çözümleme (Decode): İşlemci bunun bir toplama komutu olduğunu anlar ve hangi registerların (R1 ve R2) veri kaynağı olduğunu belirler.
- Yürütme (Execute):
- R1 ve R2'deki veriler ALU girişlerine uygulanır.
- Kontrol birimi, ALU içindeki toplayıcıyı etkinleştirir.
- Birkaç nanosaniye içinde (sinyal yayılma gecikmesi) çıkışta toplam görünür.
- Aynı anda CF, ZF, SF, OF bayrakları güncellenir.
- Geri Yazma (Write Back): Elde edilen sonuç tekrar R1 registerına (veya başka bir hedef registera) yazılır.
Modern süperskaler mimarilerde birden fazla ALU bloğu olabilir (örneğin, 4–8 adet), bu da tek bir saat döngüsünde birkaç bağımsız toplama işleminin aynı anda gerçekleştirilmesine olanak tanır.
Evrim: Skaler ALU'dan Vektörel ALU'ya (SIMD)
Geleneksel ALU, bir seferde bir sayı çiftini işler (skaler işleme). Ancak modern görevler (grafikler, makine öğrenimi, video kodekler) veri dizilerinin aynı anda işlenmesini gerektirir.
Bunun için işlemcilere vektörel ALU'lar (SSE, AVX, NEON talimat desteği) entegre edilmiştir:
- Artırılmış bit genişliğine sahiptirler (128, 256 veya 512 bit).
- Tek bir işlemi (örneğin toplama) daha düşük bit genişliğine sahip (float veya int) 4, 8 veya 16 sayı çifti üzerinde aynı anda gerçekleştirmeye olanak tanır.
- Bu, performans yaklaşımını temelden değiştirir: tek bir hesaplamanın hızlandırılması yerine, veri throughput'u artırılır.
İşlemci Yapısı Hakkında Sık Karşılaşılan Yanlış Anlamalar
- "ALU işlemcideki her şeyi yapar." Hayır. Talimat getirmeden Kontrol Birimi (Control Unit), veri saklamadan registerlar ve önbellek, yüksek hassasiyetli kayan nokta işlemlerinden ise genellikle özel FPU'lar (Floating Point Units) sorumludur, although modern çekirdeklerde bunlar ana pipeline ile sıkı bir şekilde bütünleşmiştir.
- "Saat hızı ALU hızını belirler." Saat hızı önemlidir, ancak ALU'nun gecikmesi (latency) de en az o kadar önemlidir. ALU devresi çok karmaşıksa, sinyal daha uzun süre gider ve işlemci saat hızını düşürmek veya boş bekleme döngüleri (stalls) eklemek zorunda kalır.
- "Bölme işlemi toplama kadar hızlı yapılır." Bu bir hatadır. Bölme, en "pahalı" işlemlerden biridir. Toplama 1 saat döngüsünde (hatta süperskalerlik sayesinde daha az) gerçekleştirilirken, bölme 10 ila 50+ işlemci saat döngüsü sürebilir.
SSS: CPU Mimarisi Hakkında Sorular
ALU ile yardımcı işlemci arasındaki fark nedir? Tarihsel olarak yardımcı işlemci (örneğin matematiksel 8087), karmaşık hesaplamalar için ayrı bir çipti. Günümüzde yardımcı işlemci işlevleri doğrudan CPU çekirdeğine entegre edilmiştir ve ayrım sembolik hale gelmiştir (aynı silikon üzerinde FP/SIMD blokları).
ALU ondalık sayılarla çalışabilir mi? Standart tamsayı ALU'su (Integer ALU) yalnızca tamsayılarla çalışır. Kayan nokta (ondalık) işlemleri için, kendi normalizasyon ve yuvarlama mantığına sahip ayrı bir FPU (Floating Point Unit) pipeline'ı kullanılır, ancak çalışma prensipleri benzerdir.
Neden tüm görevler için tek bir devasa ALU yapılamaz? ALU genişliğini (bit genişliği) ve fonksiyon setini artırmak, silikon alanının ve ısı yayılımının katlanarak artmasına neden olur. Mühendisler denge arar: tek bir evrensel ama yavaş dev yerine, birkaç özelleşmiş hızlı blok yaparlar.