İşlemci bellek mimarisi: Yazmaçlardan önbelleğe
İşlemcinin (CPU) kendi iç bellek birimlerine yazmaçlar ve önbellek belleği (L1, L2 ve genellikle L3 düzeyleri) dahildir. ROM (Salt Okunur Bellek) fiziksel olarak CPU'nun hesaplama çekirdeğinin bir parçası değildir, ancak işlemcinin mikro kodu gömülü kalıcı bellekte saklanabilir. Yazmaçlar aritmetik işlemler için verilere anında erişim sağlar, önbellek ana belleğe erişimdeki gecikmeleri azaltır ve ROM sistemin ilk başlatılmasından sorumludur.
Bu hiyerarşiyi anlamak, kodlarını optimize etmeye çalışan geliştiriciler ve donanım seçen kullanıcılar için kritiktir. Her bir öğeyi ayrıntılı olarak inceleyelim.
İçindekiler
Yazmaçlar: Çekirdeğin ultra hızlı belleği
Yazmaçlar, hacim olarak en küçük ancak doğrudan işlemcinin hesaplama biriminde bulunan en hızlı bellek türüdür. Bunlara erişim tek bir işlemci döngüsünde gerçekleşir.
Temel işlevler
- İşlenenleri saklama: Şu anda toplama, çarpma veya mantıksal işlem yapılan sayılar.
- Akış kontrolü: Bir sonraki komutun adresini (komut sayacı — IP/EIP/RIP) ve yığın işaretçisini (SP/ESP/RSP) saklama.
- Sistem durumu: Bayrak yazmacı (EFLAGS/RFLAGS), son işlemin sonucu hakkında bilgi saklar (sıfır olup olmadığı, taşma, sayının işareti).
Performans üzerindeki etkisi
Yazmaç sayısı mimari ile sınırlıdır (örneğin, x86-64'te 16 genel amaçlı yazmaç mevcuttur). Derleyici tüm aktif değişkenleri saklamak için yeterli yazmaca sahip değilse, fazla verileri yığına boşaltmak zorunda kalır (spilling işlemi), bu da daha yavaş belleğe erişimler nedeniyle programın çalışma hızını ciddi şekilde düşürür.
Programcılar için: Eski C/C++ standartlarında register gibi anahtar kelimelerin kullanımı artık bir değişkenin yazmaça yerleştirilmesini garanti etmez. Modern derleyiciler (GCC, Clang, MSVC), değişkenlerin yaşam grafiğine dayanarak yazmaçları bağımsız olarak optimal şekilde dağıtır.
Önbellek belleği: Çok düzeyli tampon (L1, L2, L3)
Ana bellek (DRAM) işlemciden onlarca kat daha yavaş çalıştığından, aralarına CPU kristaline entegre edilmiş statik bellek (SRAM) olan önbellek yerleştirilir.
Önbellek düzeyleri
| Düzey | Hız | Hacim (tipik) | Özellikler |
|---|---|---|---|
| L1 (Seviye 1) | Maksimum | Çekirdek başına 32–128 KB | Komut önbelleği (L1i) ve veri önbelleği (L1d) olarak ayrılır. Yalnızca kendi çekirdeği tarafından erişilebilir. |
| L2 (Seviye 2) | Yüksek | Çekirdek başına 256 KB – 2 MB | Genellikle veri ve komutları birleştirir. L3'ten daha hızlı, ancak L1'den daha yavaştır. |
| L3 (Seviye 3) | Orta | İşlemci başına 16–128+ MB | Tüm çekirdekler için ortak kaynak. Bellek denetleyicisi üzerindeki yükü azaltır. |
Yerellik ilkesi
Önbelleğin etkinliği iki ilke üzerine kuruludur:
- Zamansal yerellik: Veriler yakın zamanda kullanıldıysa, büyük olasılıkla tekrar ihtiyaç duyulacaktır (bu nedenle L1/L2'de kalırlar).
- Mekansal yerellik: Bir bellek hücresine erişildiyse, büyük olasılıkla yakında komşu hücrelere de ihtiyaç duyulacaktır (bu nedenle önbellek verileri bütün satırlar halinde yükler — cache lines, genellikle 64 bayt).
Önbellek isabeti olmaması (Cache Miss) — işlemcinin gerekli verileri önbellekte bulamadığı ve ana belleğe gitmek zorunda kaldığı durumdur. Bu sırada gecikme ~1 ns'den (L1) ~100 ns'ye (DRAM) çıkar. İşlemci için bu, yüzlerce döngü boyunca beklemek anlamına gelir.
ROM efsanesi: Gerçekte nerede bulunur?
"CPU'ya ne dahildir?" sorusunda ROM ile ilgili sık sık kafa karışıklığı yaşanır. Kavramları ayırt etmek önemlidir:
- ROM, hesaplama hattının bir parçası değildir. İşlemci ara hesaplama sonuçlarını ROM'da saklamaz.
- Fiziksel konum. BIOS/UEFI çipleri (ROM rolünü üstlenen Flash bellek) anakart üzerinde bulunur, CPU kristalinin içinde değil.
- İstisna: Mikro kod. Modern işlemcilerin içinde gerçekten de mikro kodu saklayan küçük bir kalıcı bellek alanı (veya korumalı SRAM) vardır; bu, karmaşık x86/ARM komutlarını işlemcinin iç mikro işlemlerine çeviren düşük seviyeli talimatlardır. Ancak kullanıcılar kendi verilerini saklamak için bu belleğe erişemez.
Sonuç olarak, uygulama performansı bağlamında "işlemci bellek birimleri"nden bahsederken, yalnızca yazmaçları ve önbelleği ele alırız. ROM, platform altyapısına aittir, kullanıcının görevlerini yürütmesi için CPU kaynaklarına dahil değildir.
Bellek hiyerarşisi nasıl çalışır
İşlemcinin veri alma süreci bir filtre gibi görünür:
- İstek: Yürütme birimine
Xadresindeki veriler gerekir. - L1 Kontrolü: Veriler var mı? Evet -> kullan (1-4 döngü). Hayır -> adım 3.
- L2 Kontrolü: Veriler var mı? Evet -> L1'e kopyala ve kullan (10-20 döngü). Hayır -> adım 4.
- L3 Kontrolü: Veriler var mı? Evet -> L2/L1'e kopyala ve kullan (30-50 döngü). Hayır -> adım 5.
- RAM'e Erişim: Bellek denetleyicisi verileri ana bellekten ister (100-300 döngü). Veriler L3'e gelir, ardından basamaklı olarak yukarı çıkar.
Özelliklerin karşılaştırmalı tablosu
| Bellek türü | Konum | Volatilite | Erişim süresi (gecikme) | Ana görev |
|---|---|---|---|---|
| Yazmaçlar | Çekirdek içinde | Evet (kapanınca kaybolur) | < 1 ns | Hesaplama, adresleme |
| Önbellek L1 | Çekirdek içinde | Evet | ~1 ns | En sık kullanılan veriler için tampon |
| Önbellek L2 | Çekirdek içinde (veya yanında) | Evet | ~3-5 ns | İkinci düzey tampon |
| Önbellek L3 | CPU kristali üzerinde (ortak) | Evet | ~10-20 ns | Çekirdek senkronizasyonu, ön yükleme |
| ROM (BIOS) | Anakart üzerinde | Hayır | > 50-100 ns* | Sistem yükleme, yapılandırma |
*ROM gecikmesi bağlantı arayüzüne bağlı olarak değişir ve normal programların yürütme döngüsünde yer almaz.
Mimariyi anlamadaki yaygın hatalar
- "Önbellek ne kadar büyükse, o kadar iyidir." Bu sadece kısmen doğrudur. Büyük önbelleğin gecikmesi daha fazladır. Oyunlar için yüksek saat hızı ve hızlı L1/L2 daha önemlidir, veritabanı sunucuları için ise devasa L3.
- "ROM programların çalışmasını hızlandırır." Hayır. ROM yalnızca bilgisayar açıldığında veya yazılım güncellemelerinde okunur. Oyun veya tarayıcı çalışırken ROM devrede değildir.
- "Yazmaçlar genişletilebilir." Mimari yazmaç sayısı işlemci standardı (ISA) ile sabittir. Kullanıcı yazmaç "ekleyemez", bu bir mimari seçimi meselesidir (örneğin, x86'dan ARM veya RISC-V'ye geçiş farklı sayıda yazmaç sağlayabilir).
SSS: Sorular ve cevaplar
Önbellek ile ana bellek arasındaki fark nedir? Önbellek flip-floplardan (SRAM) oluşur, çok hızlıdır, pahalıdır ve kristal üzerinde çok yer kaplar. Ana bellek (DRAM) kondansatörler kullanır, daha ucuzdur, daha yoğundur ancak sürekli yenileme gerektirir ve daha yavaş çalışır.
İşlemci önbelleği manuel olarak temizlenebilir mi?
Hayır, önbellek yönetimi işlemcinin donanım denetleyicisi tarafından yapılır. Yazılımsal olarak işlemciye belirli verileri önbelleğe almaması için ipucu verilebilir (SIMD'de _mm_stream_ tipi talimatlar), ancak tamamen "temizlemek" mümkün değildir ve gerek de yoktur.
Neden CPU özelliklerinde yalnızca L3 hacmi belirtilir? L1 ve L2 hacimleri belirli bir çekirdek için kesinlikle standartlaştırılmıştır ve genellikle aynı nesil içinde değişmez. L3 ise modelden modele değişir (örneğin, Ryzen 7 ve Ryzen 9'da farklı L3 hacimleri vardır), bu nedenle pazarlama farklılaştırıcısı olarak kullanılır.
Video belleği (VRAM) işlemci bellek birimlerine dahil midir? Hayır. Video belleği grafik işlemciye (GPU) aittir. Entegre grafikli sistemlerde GPU, genel ana belleğin (RAM) bir kısmını kullanır, ancak bu işlemci çekirdeklerinin dahili belleği değildir.