Skip to content

Bölüm 2 / 16

Bilgisayar mimarisi

CPU, veri yolu, bellek hiyerarşisi, önbellek, G/Ç.

9 dakikalık okuma

Sıfır Noktası'nda bilgisayarın parçalarını kuşbakışı görmüştün; bu ders kaputu açıyor. Von Neumann modeli, CPU'nun getir-çöz-yürüt döngüsü, yazmaçlar, veri yolu ve dersin asıl yıldızı: bellek hiyerarşisi ile önbellek. "Neden dizi taraması hızlı, neden 64 bit?" sorularının cevabı buradadır — yazılı sınavın donanım sorularının tamamı bu dersin içinden çıkar.

01Ne öğreneceksin

  • Von Neumann mimarisi ve getir-çöz-yürüt (fetch-decode-execute) döngüsü
  • CPU'nun içi: ALU, kontrol birimi, yazmaçlar; saat hızı, çekirdek, komut kümesi
  • Veri yolu türleri ve "32 bit / 64 bit" ifadesinin gerçek anlamı
  • Bellek hiyerarşisi: yazmaçtan diske hız/kapasite/maliyet dengesi
  • Önbellek ve yerellik (locality) — kod performansına dokunan donanım gerçeği
  • G/Ç yöntemleri: yoklama (polling), kesme, DMA

02Von Neumann modeli ve komut döngüsü

1945'te tarif edilen ve bugünkü telefonundan sunucuya her makinenin hâlâ izlediği model üç parçadan oluşur: merkezî işlem birimi (CPU), bellek ve giriş/çıkış birimleri; aralarında veriyi taşıyan veri yolları (bus). Modelin devrimsel fikri şudur: program da veridir — komutlar, işlenen sayılarla aynı bellekte durur (stored program). 7. derste "derleyici kodu makine koduna çevirir" demiştik (sif-ilk-program); o makine kodu, belleğe yüklenen sayı dizisinden başka bir şey değildir.

CPU'nun bütün hayatı tek döngüdür — getir, çöz, yürüt:

1. GETİR (fetch)  : Program sayacının (PC) gösterdiği adresteki komutu bellekten al
2. ÇÖZ  (decode)  : Komutun ne istediğini anla — "iki yazmacı topla", "belleğe yaz"...
3. YÜRÜT (execute): İşlemi yap, sonucu yazmaca/belleğe koy, PC'yi sonraki komuta ilerlet
   → başa dön. Saniyede milyarlarca kez.

Programındaki toplam = a + b; satırı bu döngüde üç-beş makine komutuna dönüşür: a'yı yazmaca yükle, b'yi yükle, topla, sonucu belleğe yaz. Koşul ve döngüler ise (prg-kosul, prg-dongu) program sayacını başka adrese "zıplatan" dallanma komutlarıdır — if'in donanım karşılığı budur.

03CPU'nun içi: ALU, kontrol birimi, yazmaçlar

Üç iç bileşeni sınav tanımlarıyla bil:

BileşenGörevi
ALU (Aritmetik Mantık Birimi)Aritmetik (toplama, çıkarma) ve mantık (VE, VEYA, karşılaştırma) işlemlerini fiilen yapan devre
Kontrol birimi (CU)Komutu çözer; ALU'yu, yazmaçları ve veri yollarını yönetir — orkestra şefi
Yazmaçlar (register)CPU'nun içindeki bir avuç ultra hızlı hücre; işlenmekte olan veriler ve özel sayaçlar (PC, SP) burada durur

Yazmaç sayısı azdır (64 bit x86'da 16 genel amaçlı) ama erişim tek saat vuruşudur — hiyerarşinin zirvesi. Saat (clock) tüm devreyi senkronlayan nabızdır; 3,5 GHz = saniyede 3,5 milyar vuruş. 2000'lerin ortasında saat hızı fizik duvarına (ısı) çarptı; endüstri hızı değil çekirdek sayısını artırmaya döndü. Bugünkü "8 çekirdekli işlemci" 8 bağımsız getir-çöz-yürüt motoru demektir — yazılıma bedavaya hız vermez, işi paralel bölmek gerekir; bunun zorlukları 5. dersin (tb-eszamanlilik) konusudur. Modern CPU ayrıca komutları bant üzerinde üst üste bindirir (pipeline: biri yürütülürken sıradaki çözülür, bir sonraki getirilir) ve if'lerde hangi dalın geleceğini tahmin eder (dallanma tahmini); tahmin tutmazsa bant boşalır ve onlarca vuruş kaybedilir.

Bir de komut kümesi mimarisi (ISA) kavramı: CPU'nun anladığı komut dili. Masaüstü/sunucuda x86-64, telefonlarda ve yeni Mac'lerde/bazı sunucularda ARM hâkimdir. Bir ISA için derlenen program diğerinde çalışmaz — "Apple Silicon için ayrı paket" indirmenin, .NET'in her platforma ayrı runtime yayınlamasının nedeni budur. GPU ise ayrı bir uzmandır: binlerce basit çekirdekle aynı işlemi devasa veri yığınına aynı anda uygular — grafik ve yapay zekâ eğitiminin (Hat 21) donanımı.

04Veri yolu ve 32/64 bit meselesi

Bileşenler arasında üç mantıksal hat çalışır: adres yolu ("hangi bellek hücresi?"), veri yolu ("taşınan değer") ve kontrol yolu ("oku mu, yaz mı?"). Adres yolunun genişliği, görülebilir bellek miktarını sınırlar: 32 hat ile 2³² adres = 4 GB — 32 bit Windows'un 4 GB RAM üstünü görememesinin meşhur nedeni. 64 bit mimaride adres uzayı pratikte sınırsızdır (2⁶⁴).

"64 bit işlemci" dendiğinde kastedilen paket şudur: yazmaçlar 64 bit geniştir, adresler 64 bittir, ALU 64 bitlik sayılarla tek adımda işlem yapar. Yazılımcıya dokunan yüzü: işaretçiler/referanslar 64 bit (8 bayt) yer tutar, long tek komutla işlenir ve 32 bit derlenmiş bir işlem (process) 64 bit işletim sisteminde çalışsa bile 4 GB adres duvarına takılır. C# derlerken gördüğün "AnyCPU / x64 / x86" seçimi tam bu karardır.

05Bellek hiyerarşisi: hız-kapasite-maliyet üçgeni

İdeal bellek hem büyük hem hızlı hem ucuz olurdu; fizik üçünü birden vermez. Mühendislik cevabı kademelendirmedir — küçük-hızlı-pahalıdan büyük-yavaş-ucuza doğru bir piramit:

KademeTipik boyutErişim süresiNot
Yazmaç~1 KB'den az< 1 nsCPU'nun içinde, uçucu
L1 önbellek32-128 KB / çekirdek~1 nsSRAM, uçucu
L2 önbellek0,5-2 MB / çekirdek~4 nsSRAM, uçucu
L3 önbellek8-96 MB, paylaşımlı~10-40 nsSRAM, uçucu
RAM (ana bellek)8-128 GB~60-100 nsDRAM, uçucu — güç kesilince silinir
SSD0,25-8 TB~50-150 µsKalıcı, hareketli parça yok
HDD1-20 TB~5-10 msKalıcı, dönen plaka + kafa

Sayıların kendisi değil oranlar ezberlenir: RAM, L1'den ~100 kat; SSD, RAM'den ~1000 kat; HDD, SSD'den ~100 kat yavaştır. Ölçek hissi için klasik benzetme — yazmaç erişimi 1 saniye olsaydı RAM ~2 dakika, SSD ~1 gün, HDD ~4 ay olurdu. Kıdemli yazılımcının veritabanı indeksine (Hat 07), önbellek servislerine (Redis, Hat 19) ve "diske az in, ağa daha az çık" refleksine sahip olmasının kökü bu tablodur. Uçucu/kalıcı ayrımı da sınav klasiğidir: RAM ve önbellekler güç kesilince silinir (volatile); SSD/HDD kalıcıdır. "Dosyayı kaydetmek" = veriyi RAM'den kalıcı depoya yazmak.

06Önbellek ve yerellik: donanımın koda dokunduğu yer

RAM, CPU'ya göre yüz kat yavaşsa CPU neden sürekli beklemez? Çünkü aradaki önbellek (cache) kademeleri, yakında lazım olacak veriyi önceden tutar. İşleyişi iki gözleme dayanır — yerellik ilkeleri:

  • Zamansal yerellik: az önce eriştiğin veriye yakında yine erişirsin (döngü sayacı, sık kullanılan nesne).
  • Uzamsal yerellik: bir adrese eriştiysen komşularına da erişirsin (dizinin sıradaki elemanı). Donanım bu yüzden belleği tek bayt değil, cache line denen 64 baytlık bloklar hâlinde çeker.

Aranan veri önbellekte bulunursa isabet (hit), bulunamayıp RAM'e inilirse ıskalama (miss) denir; modern iş yüklerinde isabet oranı %95'in üzerindedir ve performansın sırrı budur. Yazılımcıya pratik çıkarımı — dizi ile bağlı listenin (Hat 02, tb-veri-yapilari-1) gerçek dünyadaki hız farkı: dizi elemanları bellekte yan yanadır, bir cache line çekildiğinde sıradaki 15 int bedavaya gelir; bağlı listenin düğümleri belleğe saçılmıştır, her adım muhtemel bir miss'tir. "Big-O'su aynı ama dizi 10 kat hızlı" ölçümlerinin açıklaması asimptotik değil, mimaridir. Aynı nedenle 2 boyutlu diziyi satır satır gezmek, sütun sütun gezmekten kat kat hızlıdır — bellekte satırlar ardışıktır.

07Giriş/çıkış: yoklama, kesme, DMA

Klavye, disk, ağ kartı — hepsi CPU'dan milyonlarca kat yavaştır. CPU onlarla üç yöntemle konuşabilir; sınav bu üçlüyü tanım düzeyinde sorar:

  • Yoklama (polling): CPU aygıta sürekli "bitti mi? bitti mi?" diye sorar. Basit ama israftır — çekirdek, beklemekle meşgul edilir.
  • Kesme (interrupt): aygıt işi bitince CPU'ya sinyal gönderir; CPU elindeki işi bırakıp kısa bir kesme işleyici çalıştırır, sonra kaldığı yere döner. Modern sistemlerin standardıdır — klavyede tuşa bastığında olan tam olarak budur. Ayrıntısı sonraki derste (tb-isletim-sistemi).
  • DMA (Direct Memory Access): büyük veri bloklarında (disk okuma, ağ paketi) aracı DMA denetleyicisi veriyi CPU'ya uğratmadan doğrudan RAM'e taşır; CPU yalnızca "başla" der ve bitiş kesmesini alır. Disk-RAM arası yüksek hızın mimarı budur.

Depolama tarafında iki teknolojiyi karşılaştırmalı bil: HDD dönen manyetik plaka + okuma kafasıdır — mekanik olduğundan rastgele erişimde milisaniyeler kaybeder, ama TB başına en ucuz seçenektir (arşiv, yedek). SSD flash bellektir — hareketli parça yok, rastgele erişim ~100 kat hızlı; işletim sistemi ve veritabanı diski için bugünün varsayılanıdır. Sunucu dünyasında SSD'ler NVMe arayüzüyle PCIe hattına doğrudan bağlanır; SATA'ya göre kat kat bant genişliği sunar — "diski NVMe olan makine" ifadesini sunucu kiralarken göreceksin.

08Mini alıştırma — Kendi makineni tanı + yerelliği ölç

Yaklaşık 15-20 dakika · terminal + dotnet new console -o mimari

  1. Makinenin envanterini çıkar. Linux: lscpu (çekirdek sayısı, L1/L2/L3 boyutları), free -h (RAM), lsblk -d -o NAME,ROTA (ROTA 0 = SSD). Windows: Görev Yöneticisi → Performans sekmesi aynı bilgiyi verir. Çekirdek sayısı, L3 boyutu ve RAM'i not et.
  2. Uzamsal yerelliği ölç: 4096×4096'lık int[,] diziyi önce satır-satır ([i, j]), sonra sütun-sütun ([j, i]) gezerek topla; iki turu da System.Diagnostics.Stopwatch ile süre ölç. (Ölçümden önce birer ısınma turu at.)
  3. Sonucu yorumla: iki döngünün eleman sayısı ve Big-O'su aynı — fark nereden geliyor? "Cache line" ve "uzamsal yerellik" terimlerini kullanarak iki cümle yaz.
  4. Kapanış tahmini: makinendeki L3 önbellek, kaç adet int tutar? (L3 baytı ÷ 4). Dizinin tamamı L3'e sığıyor mu?

09Kendini sına

Von Neumann mimarisinin bileşenlerini say ve "saklı program" fikrinin ne olduğunu açıkla.

CPU (ALU + kontrol birimi + yazmaçlar), bellek, giriş/çıkış birimleri ve bunları bağlayan veri yolları. Saklı program: komutlar da veri gibi aynı bellekte tutulur; CPU program sayacının gösterdiği adresten komutları sırayla çekip getir-çöz-yürüt döngüsüyle işler. Program değiştirmek, donanımı değil bellek içeriğini değiştirmektir — genel amaçlı bilgisayarı mümkün kılan fikir budur.

ALU, kontrol birimi ve yazmaç ne iş yapar? Saat hızı ile çekirdek sayısı neyi ölçer?

ALU aritmetik ve mantık işlemlerini fiilen hesaplayan devredir; kontrol birimi komutu çözüp diğer bileşenleri yönetir; yazmaçlar CPU içindeki en hızlı, en küçük veri hücreleridir. Saat hızı saniyedeki senkron vuruş sayısıdır (tek çekirdeğin temposu); çekirdek sayısı bağımsız yürütme motoru sayısıdır. Çok çekirdek, ancak iş paralel bölünebilirse hız verir — otomatik değildir.

Bellek hiyerarşisini hızlıdan yavaşa sırala; uçucu/kalıcı ayrımını işaretle. Neden tek tip "hem büyük hem hızlı" bellek kullanılmaz?

Yazmaç → L1 → L2 → L3 önbellek → RAM → SSD → HDD. Yazmaçtan RAM'e kadar hepsi uçucudur (güç kesilince silinir); SSD ve HDD kalıcıdır. Hız, kapasite ve maliyet aynı anda optimize edilemez: hızlı bellek (SRAM) pahalı ve küçüktür, ucuz bellek yavaştır. Hiyerarşi + yerellik ilkeleri sayesinde sistem, "neredeyse önbellek hızında, neredeyse disk kapasitesinde" davranır.

Kesme ile yoklamanın farkı nedir? DMA hangi sorunu çözer?

Yoklamada CPU aygıtı sürekli sorgulayarak bekler — çevrim israfıdır. Kesmede aygıt hazır olduğunda CPU'ya sinyal verir; CPU işini bırakıp kesme işleyiciyi çalıştırır ve geri döner — CPU bu sayede beklerken başka iş yapar. DMA, büyük veri bloklarının aygıt ile RAM arasında CPU'ya uğramadan taşınmasını sağlar; CPU yalnızca transferi başlatır ve bitiş kesmesini alır. Disk ve ağ gibi yüksek hacimli G/Ç'nin CPU'yu boğmamasının nedeni DMA'dır.

10Sınav köşesi

Yazılıda nasıl sorulur

Üç kalıp hâkimdir. (1) Tanım eşleme: "Aritmetik ve mantıksal işlemleri yapan birim?" (ALU), "Komutları çözüp birimleri yöneten?" (kontrol birimi), "İşlenecek komutun adresini tutan?" (program sayacı). (2) Sıralama: "Erişim hızına göre sırala: RAM, yazmaç, L2 önbellek, HDD" — piramidi ezbere bil; "hangisi uçucudur?" çeşidi de gelir (RAM uçucu, ROM/disk kalıcı). (3) Hesap/kavram: "32 bit adres yolu en fazla kaç GB belleği adresler?" (2³² bayt = 4 GB), "Aygıtın veriyi CPU'yu meşgul etmeden belleğe aktarması?" (DMA). Şık tuzağı: ALU ile kontrol birimini, RAM ile önbelleği birbirinin tanımıyla eşleştiren seçenekler — tanımları kelimesi kelimesine değil işleviyle ezberle.

Sözlüde nasıl anlatılır — 2 dakikalık taslak

"Bilgisayar nasıl çalışır?" sorusuna omurga: (1) Von Neumann üçlüsü + saklı program, tek cümle. (2) Getir-çöz-yürüt döngüsü — "C#'taki bir toplama satırı birkaç makine komutuna iner" köprüsü, teori-pratik bağını gösterir. (3) Bellek hiyerarşisi: "hız-kapasite-maliyet aynı anda olmaz, kademelendiririz; önbellek yerellik ilkeleriyle çalışır" — ardından mutlaka somut örnek: "dizinin bağlı listeden hızlı olmasının sebebi cache line'dır" cümlesi, konuyu yazılımcı gözüyle sindirdiğini tek başına kanıtlar. (4) Kapanış: kesme ve DMA'nın CPU'yu bekleme işinden kurtardığı — bir sonraki dersin (işletim sistemi) kapısını da aralar.