En başından…
Bilgisayarlarla pek çok şey yaptım, ama bilgimde hep bir boşluk vardı: Bilgisayarında bir program çalıştırdığında tam olarak ne oluyor? Bu soruya takılıp kalıyordum; gerekli low-level bilginin büyük kısmına sahiptim ama parçaları bir araya getirmekte zorlanıyordum. Programlar gerçekten doğrudan CPU üzerinde mi çalışıyor, yoksa arada başka şeyler mi oluyor? Syscall’ları kullanıyordum ama bunlar nasıl çalışıyordu? Aslında neydiler? Birden fazla program aynı anda nasıl çalışabiliyordu?

Sonunda dayanamadım ve olabildiğince çok şeyi çözmeye koyuldum. Üniversiteye gitmiyorsan bu konuda derli toplu sistem kaynağı pek yok; bu yüzden kalite seviyesi değişen, bazen de birbiriyle çelişen tonla kaynağı taramak zorunda kaldım. Birkaç haftalık araştırma ve neredeyse 40 sayfalık nottan sonra, bilgisayarların açılıştan program yürütmeye kadar nasıl çalıştığına dair çok daha sağlam bir zihinsel modele sahip olduğumu düşünüyorum. Ben bunları öğrenirken elimde böyle bir yazı olmasını çok isterdim, o yüzden keşke biri benim için yazsaydı dediğim makaleyi şimdi ben yazıyorum.
Bu Yazı Hangi Soruya Cevap Veriyor?
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 güvenli bir çalışma alanı hazırlanır, CPU bu alandaki talimatları sırayla 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.
Bu yazı o tek cümleyi yavaş yavaş açıyor: CPU talimatları nasıl okur, RAM neden herkese ayrıymış 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
| Kavram | Halk diliyle kısa karşılığı |
|---|
| CPU | Talimatları okuyup uygulayan işlemci; bilgisayarın hesap yapan motoru. |
| RAM | Çalışan programların o anda kullandığı hızlı çalışma masası. |
| Disk/SSD | Programların ve dosyaların kapalıyken de durduğu kalıcı depo. |
| Kernel | Donanımı, belleği ve programları yöneten işletim sistemi çekirdeği. |
| Process | Çalışan bir programın işletim sistemi tarafından takip edilen örneği. |
| Syscall | Programın kernel’dan dosya okuma, bellek ayırma gibi kontrollü yardım istemesi. |
Yol Haritası
| Bölüm | Başlık | Ne Öğreneceksin? |
|---|
| 1 | Başlamadan Önce | Bit, byte, binary, hex, ASCII, bellek adresi, assembly nedir? |
| 2 | Temeller | CPU register’ları, instruction pointer, kernel/user modu, syscall nedir? |
| 3 | Bellek Hiyerarşisi | Register → cache → RAM → disk piramidi, SRAM/DRAM, locality |
| 4 | Zamanı Dilimle | Timer interrupt, preemptive multitasking, zaman dilimleri, context switch |
| 5 | Modern İşlemci Teknikleri | Pipeline, superscalar, branch prediction, multi-core, SMT, SIMD |
| 6 | Program Nasıl Çalıştırılır? | execve syscall’ı, kernel’ın binary format dedektifliği, shebang, binfmt_misc |
| 7 | Shell’den Kernel’e | Shell, PATH, fork+execve, pipeline, yönlendirme, environment variables |
| 8 | Bir ELF Ustasına Dönüşmek | ELF formatı, program header, section header, static vs dynamic linking, GOT/PLT |
| 9 | Bilgisayarındaki Çevirmen | Sanal bellek, page table, MMU, TLB, higher-half kernel, segfault, demand paging |
| 10 | Container ve İzolasyon | Namespaces, cgroups, seccomp, capabilities, pivot_root |
| 11 | Fork’lar ve COW’lar Üzerine | fork syscall’ı, Copy-on-Write, init process, boot zinciri |
| 12 | Son Söz | Büyük resim, stack/heap, ek okumalar |
Kısayol: İlk kez okuyorsan 1., 2. ve 3. bölümleri atlama; oradaki CPU, bellek, syscall ve multitasking temeli sonraki bölümlerin yükünü azaltır. Bu konulara zaten hâkimsen doğrudan 6. bölüme geçebilirsin.
Bir şeyi ancak başka birine açıklayabildiğinde gerçekten anladığını söylerler ya, biraz da o hesap.
Acelen mi var? Register, user/kernel mode, syscall ve process kelimeleri sana yabancı değilse hızlı rota açık:
6. bölüme geç; Linus Torvalds’ın kendisi değilsen muhtemelen yeni bir şey öğreneceksin.
1. bölüme devam et: Başlamadan Önce
»