İçindekiler
CPU'ya “Sen”i Katmak yazısının tam haritası.20 bölüm, toplam yaklaşık 240 dakikalık okuma.
Giriş
Yazının kapsamı, okuma rotası ve gereken altı temel kavram
1. Başlamadan Önce
Bit, byte, ikilik sistem, hex, negatif sayılar, ASCII, bellek adresi ve assembly
- Neden Sadece 0 ve 1?
- Bit ve Byte
- İkilik (Binary) Sistem
- Peki Eksi Sayılar?
- Hexadecimal (Onaltılık) Sistem
- ASCII ve Karakterlerin Sayı Hâli
- Endianness: Byte Sıralaması
- Bellek Adresi: Her Şeyin Bir Numarası Var
- Makine Kodunu Gözlemlemek
- Assembly ve Yüksek Seviye Diller
- C’den Makine Koduna: Derleme Pipeline’ı
- Dış Kaynaklar
- Özet
2. Temeller
CPU, register, instruction pointer ve fetch-execute döngüsü
3. Kernel, User Mode ve Syscall
Ayrıcalık seviyeleri, interrupt, syscall giriş yolu ve libc sarmalayıcıları
4. Mimariler: x86, ARM ve Diğerleri
Talimat kümesi ne demek, 32/64 bit farkı, x86-64 ile ARM, CISC ve RISC
- Talimat Kümesi: Donanımla Yazılım Arasındaki Sözleşme
- “32 bit” ve “64 bit” Tam Olarak Neyi Ölçer?
- x86’nın Hikâyesi: Bir Geriye Uyumluluk Anıtı
- ARM: Aynı Soruya Verilen Başka Bir Cevap
- CISC ve RISC: Kavga Neydi, Bugün Ne Kaldı?
- RISC-V: Sözleşmenin Kendisi Açık Olsa?
- Peki Aynı Program Neden Her Yerde Çalışmıyor?
- Özet
5. Bellek Hiyerarşisi
Register, L1/L2/L3 cache, RAM ve disk piramidi; SRAM ile DRAM farkı
6. Cache Nasıl Çalışır
Cache line, locality, tag/index/offset, associativity, MESI ve false sharing
7. Zamanı Dilimle
Timer interrupt, preemption, zaman dilimleri, context switch, EEVDF
8. İşlemciyi Hızlandıran Hileler
Dennard duvarı, pipeline, hazardlar, superscalar, çok çekirdek, SMT ve SIMD
9. Tahmin, Spekülasyon ve Spectre
Branch prediction, spekülatif yürütme, yan kanallar, Spectre ve Meltdown
10. Bir Program Nasıl Çalıştırılır?
execve syscall'ı, kernel'ın binary format dedektifliği, shebang, binfmt_misc
11. Shell'den Kernel'e
Shell, PATH, fork+execve, pipeline, yönlendirme, iş kontrolü ve sinyaller
- Shell Nedir?
- Komut Çözümleme: PATH ve Built-in’ler
- Fork + Execve + Wait: Shell’in Motoru
- Pipeline: | Karakteri
- Yönlendirme: >, <, >>
- Environment Variables (Ortam Değişkenleri)
- Subshell ve Parantezler
- Peki Kernel Tarafında Ne Oluyor?
- Pratik Deney: strace ile Fork, Exec ve Pipe
- pipe() ve dup2() ile Pipeline
- İş Kontrolü: Ctrl-C Aslında Kime Gidiyor?
12. Bir ELF Ustasına Dönüşmek
ELF formatı, program header, section header, static ve dynamic linking, GOT/PLT
13. Bellek Aslında Sanal
Sanal adres, sayfa, çerçeve, MMU, izolasyon, higher-half kernel ve ASLR
14. Adres Çevirisi ve TLB
Çok seviyeli sayfa tabloları, sayfa yürüyüşü, TLB, page fault ve demand paging
15. Bellek Güvenliği ve Sertleştirme
Buffer overflow, NX, stack canary, ASLR, PIE ve RELRO ile savunma katmanları
- Sorunun Kökeni: Sınır Kontrolü Olmayan Bellek
- NX: Veri Sayfaları Yürütülemez
- Stack Canary: Kanaryayı Madene İndir
- ASLR: Adresleri Her Çalıştırmada Karıştır
- PIE: Programın Kendisi de Taşınabilsin
- RELRO: Fonksiyon Tablosunu Kilitle
- FORTIFY_SOURCE: Derleyici Boyutu Biliyorsa Kontrol Etsin
- Hepsini Birlikte Görmek
- Katmanlar Neden Hepsi Birden Gerekli
- Özet
16. Fork'lar ve COW'lar Hakkında Konuşalım
fork syscall'ı, Copy-on-Write, init process, boot zinciri
17. Dosya Sistemi ve I/O
Her şey dosyadır, file descriptor, VFS, inode, page cache, mmap ve epoll
18. Sanal Makineler ve Container'lar
Hypervisor, donanım desteği, namespace ve cgroup ile iki farklı izolasyon yolu
- Temel Fikir: Kernel’a Kernel Olmadığını Söylememek
- İki Tür Hypervisor
- x86’nın Sanallaştırmayla İmtihanı
- Belleğin İki Kez Çevrilmesi
- Sahte Donanım: Cihazlar Nereden Geliyor?
- Container: Donanımı Değil, Görüntüyü Taklit Etmek
- Kernel Bu Pencereyi Nasıl Kuruyor?
- Container İmajı Nedir?
- docker run Yazdığında Sırayla Ne Oluyor?
- Sanal Makine mi, Container mı?
- Özet
19. Son Söz
Büyük resim, buradan sonra ne okumalı, birkaç küçük not