Bölüm 7:

Tebrikler. Artık “sen”i CPU’nun içine epey sağlam bir şekilde yerleştirmiş olduk. Umarım keyif almışsındır.

Kapanırken tekrar vurgulamak istediğim şey şu: Bu makaledeki bilgiler gerçek ve yaşayan şeyler. Bir dahaki sefere bilgisayarının nasıl aynı anda birden fazla uygulama çalıştırabildiğini düşündüğünde, umarım timer chip’leri ve hardware interrupt’ları gözünün önüne gelir. Süslü bir programlama diliyle bir şey yazıp linker hatası aldığında, o linker’ın aslında ne yapmaya çalıştığını da biraz olsun hissedersin.

Bu makaledeki herhangi bir bölümle ilgili sorun, soru ya da düzeltmen varsa bana lexi@hackclub.com adresinden yazabilir veya GitHub’da issue ya da PR açabilirsin.

Son.

… ama dur, daha bitmedi.

Bonus: C Kavramlarını Türkçeleştirmek

Kendin low-level programlama yaptıysan, muhtemelen stack’in ve heap’in ne olduğunu biliyorsundur; büyük ihtimalle malloc da kullanmışsındır. Ama bunların sistem içinde nasıl uygulandığını çok düşünmemiş olabilirsin.

Öncelikle, bir thread’in stack’i sanal belleğin üst kısımlarında bir yere eşlenmiş sabit büyüklükte bir bellek alanıdır. Çoğu mimaride (hepsinde değil), stack pointer stack alanının tepesinden başlar ve büyüdükçe aşağı doğru ilerler. Eşlenmiş stack alanının tamamı için fiziksel bellek baştan ayrılmaz; bunun yerine, stack frame’lerine gerçekten ihtiyaç duyuldukça belleği tahsis etmek için demand paging kullanılır.

malloc gibi heap allocation fonksiyonlarının syscall olmaması ilk başta şaşırtıcı gelebilir. Heap yönetimi aslında libc implementasyonu tarafından sağlanır. malloc, free ve benzerleri kendi içinde epey karmaşık prosedürlerdir; libc, bellek eşleme detaylarını kendisi takip eder. User-space heap allocator’ı bunun için temelde mmap ve sbrk gibi syscall’lara başvurur.

Bonus: Küçük Notlar

Bunları ana akışta koyacak tutarlı bir yer bulamadım ama ilginçler, o yüzden buraya bırakıyorum.

Linux kullanıcılarının çoğunun yeterince ilginç bir hayatı vardır; page table’ların kernel içinde nasıl temsil edildiğini hayal etmeye fazla zaman ayırmazlar.

Jonathan Corbet, LWN

Hardware interrupt’lar için alternatif bir görselleştirme:

Assembly talimatlarını konuşma balonlarıyla gösteren dört panelli bir meme çizimi. Dışarıdan gelen başka bir ses normal akışı bozuyor ve son panelde küçük kuş hiç memnun görünmüyor.

Bazı syscall’ların kernel space’e sıçramak yerine vDSO adlı bir teknik kullandığını da not düşeyim. Burada buna girmeye vaktim olmadı ama konu oldukça ilginç; istersen buradan, buradan ve buradan devam edebilirsin.

Unix’e özgü detaylar konusunda son bir dürüstlük notu: anlatının önemli bir kısmı Unix dünyasına ait. macOS ya da Linux kullanıyorsan bu gayet iyi, ama aynı CPU mimarisi üzerinde dursa bile Windows’un programları nasıl yürüttüğü ya da syscall’ları nasıl yönettiği hakkında sana doğrudan aynı resmi vermez. İleride bu işin Windows tarafını anlatan ayrı bir yazı yazmayı çok isterim.

Teşekkür

Bu makaleyi yazarken GPT-3.5 ve GPT-4 ile yeterince konuştum. Bana bolca yanlış bilgi verdiler ve söylediklerinin çoğu işe yaramazdı; ama bazı düğümleri çözmede gerçekten yardımcı oldukları anlar da oldu. Sınırlarını biliyorsan ve söyledikleri her şeye son derece şüpheyle yaklaşıyorsan, LLM yardımı net biçimde faydalı olabilir. Yine de yazı yazmakta berbattırlar. Yazıyı senin yerine onların yazmasına izin verme.

Daha da önemlisi; beni düzelten, cesaretlendiren ve birlikte düşünmeme yardım eden herkese teşekkür ederim. Özellikle Ani, B, Ben, Caleb, Kara, polypixeldev, Pradyun, Spencer, Nicky (Bölüm 4‘teki harika elfi çizen kişi) ve sevgili ebeveynlerime minnettarım.

Eğer gençsen, bilgisayarları seviyorsan ve henüz Hack Club Slack‘e katılmadıysan, bence hemen katılmalısın. Düşüncelerimi paylaşabildiğim ve ilerleme kaydedebildiğim böyle bir topluluk olmasaydı bu makaleyi yazamazdım. Eğer genç değilsen, bunları yapmaya devam edebilmemiz için bize destek olabilirsin.

Bu makaledeki çizimlerin tamamı Figma‘da üretildi. Yazım ve düzenleme için Obsidian kullandım; zaman zaman metni cilalamak için Vale da devreye girdi. Makalenin Markdown kaynağı GitHub’da açık ve gelecekteki düzeltmelere açık; bütün çizimler de bir Figma Community sayfasında yayınlanıyor.

Sevimli, yalvaran bakışlı bir CPU.

Ek Okumalar

Bilgisayarların düşük seviyede nasıl çalıştığını ve kodun makineye nasıl çevrildiğini daha derinlemesine incelemek istersen, Fabien Sanglard’ın web sitesini şiddetle tavsiye ederim. Bu adaptasyonun ruhuna en uygun tamamlayıcı kaynaklardan biridir.