Ana içeriğe geç

CPU'ya “Sen”i Katmak

Bir programı çalıştırınca CPU, RAM, disk ve kernel perde arkasında ne yapar? Hiç bilmeyenler için kolaydan zora ilerleyen bu rehberde bit/byte temelleri, bellek hiyerarşisi, process, syscall, multitasking, shell, sanal bellek, ELF, fork/COW ve Linux program yükleme akışını adım adım öğren.

Emircan Demir · Ağustos 2026 · İçindekiler · Tek sayfa

En başından…

Bilgisayarında bir program çalıştırdığında tam olarak ne oluyor?

Soru masum görünüyor. Ama cevabı, diskte duran ölü bir dosyadan CPU’nun içindeki milyarlarca transistöre kadar uzanan koca bir zincir — ve o zinciri baştan sona, hiçbir halkasını atlamadan kurabilen şaşırtıcı derecede az insan var. Çoğumuz halkaların bir kısmını gayet iyi biliriz: derleyicinin ne yaptığını, RAM’in ne işe yaradığını, syscall’ın hangi başlık dosyasında durduğunu. Parçaları tek tek bilmek yetmiyor; asıl iş onları doğru sırayla birbirine bağlamak.

Bu kitap tam olarak o bağlantıyı kuruyor. Üç soruyu omurga olarak alıyorum:

Karalanmış bir dijital çizim. Uzun saçlı birisi, ikili dosyaları okuyan bir bilgisayarı inceliyor; sonra duruşu bozuk bir masaüstü bilgisayarda konuyu kazmaya başlıyor.

Bu konuyu tek parça hâlinde anlatan derli toplu bir kaynak, özellikle Türkçede neredeyse yok. Var olanlar ya tek bir katmana odaklanıyor — sadece CPU, sadece kernel, sadece derleyici — ya da okuru üç paragraf sonra kaynak kodun ortasında yalnız bırakıyor. Aradaki köprüyü kimse kurmuyor.

Anlatım sırasını buna göre kurdum: her bölüm bir öncekinin bıraktığı yerden başlıyor ve hiçbir kavramı, sana anlatmadan kullanmıyorum. Kitabı bitirdiğinde bilgisayarın açıldığı andan bir programın ilk talimatını yürüttüğü ana kadar olan zinciri kafanda baştan sona kurabiliyor olacaksın. Hedef bu, ölçü de bu.

Her Şeyin Tek Cümlelik Özeti

Bir uygulamaya çift tıkladığında ya da terminalde bir komut çalıştırdığında olay şuna benzer: programın dosyası diskten okunur, bellekte ona kendine ait bir çalışma alanı hazırlanır — varsayılan olarak o alan yalnızca ona görünür, başka bir program oraya kendiliğinden uzanamaz —, CPU o alandaki talimatları tek tek kendi içine çekip yürütür, kernel ise hem kaynakları paylaştıran hem de herkesin kendi sınırında kalmasını sağlayan hakem gibi davranır.

O tek cümlenin her kelimesini teker teker açacağız: CPU talimatları nasıl okur, RAM neden her programa sanki bilgisayardaki tek program oymuş gibi görünür, aynı anda birden fazla program nasıl çalışır, syscall neden gerekir ve Linux bir dosyayı gerçek bir programa nasıl dönüştürür?

Okurken Bilmen Gereken 6 Kavram

KavramTek cümlelik karşılığı
CPUTalimatları okuyup uygulayan işlemci; bilgisayarın hesap yapan motoru.
RAMÇalışan programların o anda kullandığı hızlı çalışma masası; elektrik kesildiği anda üzerindeki her şey silinir.
Disk/SSDProgramların ve dosyaların kapalıyken de durduğu kalıcı depo.
Kernelİşletim sisteminin merkezindeki program; donanımı, belleği ve diğer programları yönetir.
ProcessÇalışan bir programın işletim sistemi tarafından takip edilen örneği.
SyscallProgramın kernel’dan dosya okuma, bellek ayırma gibi kontrollü yardım istemesi.

Program mı, process mi?

Kitap boyunca en çok karıştırılan ayrım bu, o yüzden baştan netleştirelim. Program, diskte duran ölü bir dosyadır; kimse çalıştırmadığı sürece hiçbir şey yapmaz. Process ise o dosyanın çalışır hâle gelmiş, kendi belleği ve kendi durumu olan canlı bir örneğidir. Aynı programdan aynı anda beş process çalıştırabilirsin: beşi de aynı dosyadan doğar, ama beşinin de belleği ayrıdır ve birbirlerinden habersizdirler.

Bu Kitap Hangi Makineyi Anlatıyor?

Bir zinciri baştan sona göstermenin bedeli, o zinciri belirli bir makinede göstermek zorunda olmandır. Her cümlede “Windows’ta şöyle, ARM’da böyle, BSD’de bambaşka” demeye kalksam anlatı ilk bölümde dağılırdı. O yüzden baştan söylüyorum: bu kitabın örnek makinesi Linux çalıştıran bir x86-64 bilgisayardır. Program dosyaları ELF biçimindedir, C kütüphanesi glibc, derleyici GCC ya da Clang’dır.

Bu seçim neyi kapsıyor, neyi kapsamıyor — ayrımı yapmak önemli:

Sayılar için de aynı sözleşme geçerli. Kitap boyunca göreceğin gecikme süreleri, boyutlar ve yüzdeler mertebe vermek içindir: “cache RAM’den yaklaşık yüz kat hızlıdır” cümlesi taşınabilir bir bilgidir, “L3 tam olarak 27 nanosaniyedir” değildir. Gerçek değerler işlemci nesline, iş yüküne ve ölçüm yöntemine göre değişir. Kendi makinenin sayılarını merak edersen bölümlerin içinde onları ölçecek komutları da veriyorum — orası tahmin yapılacak yer değil.

Yol Haritası

BölümBaşlıkNe öğreneceksin?
1Sayılar: Bit'ten Kayan NoktayaBit, byte, ikilik sistem, negatif sayılar, kayan nokta ve onaltılık sistem
2Metin, Bellek ve KodASCII ve Unicode, endianness, bellek adresi, assembly ve derleme zinciri
3TemellerCPU, register, instruction pointer ve fetch-execute döngüsü
4Kernel, User Mode ve SyscallAyrıcalık seviyeleri, interrupt, syscall giriş yolu ve libc sarmalayıcıları
5Mimariler: x86, ARM ve DiğerleriTalimat kümesi ne demek, 32/64 bit farkı, x86-64 ile ARM, CISC ve RISC
6Saat, Çekirdek ve Mantıksal İşlemciClock cycle, frekans, IPC, güç duvarı, turbo, fiziksel çekirdek ve mantıksal işlemci
7Bellek HiyerarşisiRegister, L1/L2/L3 cache, RAM ve disk piramidi; SRAM ile DRAM farkı
8Cache Nasıl ÇalışırCache line, locality, tag/index/offset, associativity, MESI ve false sharing
9Zamanı DilimleTimer interrupt, preemption, zaman dilimleri, context switch, EEVDF
10Aynı Anda İki ŞeyYarış durumu, kritik bölge, mutex, semafor, ölümcül kilitlenme, kilidin bedeli ve bellek modeli
11İşlemciyi Hızlandıran HilelerPipeline, hazardlar, superscalar, out-of-order yürütme, register renaming ve SIMD
12Tahmin, Spekülasyon ve SpectreBranch prediction, spekülatif yürütme, yan kanallar, Spectre ve Meltdown
13Bir Program Nasıl Çalıştırılır?execve syscall'ı, kernel'ın binary format dedektifliği, shebang, binfmt_misc
14Shell'den Kernel'eShell, PATH, fork+execve, pipeline, yönlendirme, iş kontrolü ve sinyaller
15Bir ELF Ustasına DönüşmekELF formatı, program header, section header, static ve dynamic linking, GOT/PLT
16Bellek Aslında SanalSanal adres, sayfa, çerçeve, MMU, izolasyon, higher-half kernel ve ASLR
17Adres Çevirisi ve TLBÇok seviyeli sayfa tabloları, sayfa yürüyüşü, TLB, page fault ve demand paging
18Bellek Güvenliği ve SertleştirmeBuffer overflow, NX, stack canary, ASLR, PIE ve RELRO ile savunma katmanları
19Fork'lar ve COW'lar Hakkında Konuşalımfork syscall'ı, Copy-on-Write, init process, boot zinciri
20Dosya Sistemi ve I/OHer şey dosyadır, file descriptor, VFS, inode, page cache, mmap ve epoll
21Sanal Makineler ve Container'larHypervisor, donanım desteği, namespace ve cgroup ile iki farklı izolasyon yolu
22Son SözBüyük resim, buradan sonra ne okumalı, birkaç küçük not

Bölümlerin içinde yer yer katlanmış Derinleşme panelleri göreceksin. Onlar ana anlatının dışında duran, isteğe bağlı derinliktir: tasarım gerekçeleri, tarihsel kararlar, kernel kaynağı. Hiçbirini açmadan kitabın tamamını anlayabilirsin; konuya zaten hâkimsen de seni asıl şaşırtacak yerler çoğu zaman oralardır. Yolda anlamını unuttuğun bir terim olursa Sözlük her terimi kısa bir tanımla ve ilk anlatıldığı bölümle birlikte listeler; bütün bölümlerin alt başlıklarıyla dökümü de İçindekiler sayfasındadır.

Bir şeyi ancak başka birine anlatabildiğinde gerçekten anlarsın. Bu kitabın ölçüsü de bu: son sayfayı kapattığında, bilgisayarında bir programın nasıl çalıştığını baştan sona bir başkasına anlatabiliyor olacaksın.

1. bölüme devam et: Sayılar: Bit'ten Kayan Noktaya