Putting the “You” in CPU - 17 yaşındaki birinin yazdığı, CPU’nun programları nasıl çalıştırdığına dair rehber
(github.com/hackclub)- Bilgisayarın bir programı baştan sona nasıl çalıştırdığını ele alan teknik bir açıklama; bilgisayarın açılıştan program çalıştırmaya kadar nasıl işlediğini anlamaya odaklanıyor
- Bir program çalıştırıldığında gerçekte neler olduğu, programların doğrudan CPU üzerinde çalışıp çalışmadığı, syscalls’ın ne olduğu ve nasıl işlediği, birden fazla programın aynı anda nasıl çalıştırıldığı gibi sorulardan yola çıkıyor
- Üniversiteye gitmeyenler için kapsamlı sistem kaynaklarının fazla olmaması; kalitesi değişen ve zaman zaman birbiriyle çelişen birçok kaynağa bakmak zorunda kalınması sorununu arka planına alıyor
- Birkaç haftalık araştırma ve neredeyse 40 sayfalık notlara dayanarak, öğrenilenleri tek ve sağlam bir yazıda derlemeyi amaçlayan bir kaynak
- Hızlı okumak isteyen veya konuyu zaten bildiğini düşünen okurlar için ayrıca Chapter 3: How to Run a Program bağlantısı sunuluyor
1 yorum
Hacker News yorumları
Merhaba! Bu yazıyı/mini kitabı yazan Lexi ben.
“Bir web sitesi açınca ne olur?” şeklinde klasik bir soru vardır, ama ben hep “Bir program çalıştırınca ne olur?” sorusunu daha çok merak ettim. Yaklaşık 3 ay önce bu soruya cevap veremiyor olmama o kadar sinirlendim ki kendim öğrenmeye karar verdim.
Programlamada bildiğim her şeyi kendi kendime öğrendiğim için bunun da kolay olacağını sandım ama hiç de öyle olmadı. İşletim sistemleri ve CPU’nun nasıl çalıştığına dair çevrim içi kaynakların çoğu berbattı; zaten kaynak da neredeyse yoktu. Bu yüzden öğrenirken iyi bir kaynak da kendim hazırlamam gerektiğini düşündüm; öğrendiklerimi derlerken 60 sayfalık bir Google Doc ortaya çıktı ve yazmaya buradan başladım.
Ama yazdıkça o devasa belgenin önemli bir kısmının yanlış olduğunu fark ettim ve daha fazla araştırma yapmam gerekti. Sürekli tekrar tekrar düzeltirken internetteki kaynakların kalitesi hâlâ kötüydü ve yazıyı daha iyi hâle getirmem gerekiyordu. Görsellere ve diyagramlara da ihtiyaç vardı; çizim yapmayı bilmediğim için Figma’yı açıp denemeler yaptım, bazılarını da bir hackathon’da kazandığım Wacom tabletle çizdim.
Aradan yaklaşık 3 ay geçti ve şimdi gerçekten gurur duyduğum bir sonuç var. Acemice illüstrasyonlarıyla birlikte Putting the "You" in CPU’nun son hâlini paylaşmaktan mutluyum. Bu çalışma, bilgisayarları seven lise öğrencilerinden oluşan Hack Club(https://hackclub.com) topluluğunun bir parçası olarak hazırlandı.
Birkaç hafta önce henüz üzerinde çalıştığım bir sürüm tesadüfen HN’de ilgi gördü ve aldığım geri bildirimler için gerçekten minnettarım. O zamandan beri epey toparladım ve artık dünyayla bizzat paylaşacak kadar içime siniyor.
Web sitesi statik bir HTML/CSS projesi ve tamamını sıfırdan kendim yazdım. Özellikle navigasyon bileşenini seviyorum. Umarım keyifle okursunuz ve herkesin öğrenebileceği bir kaynak olur.
Yeni bir şeyi kendi kendine öğrenirken böyle bir kaynak yazmak çok iyi bir yöntem. Düşünce sürecini netleştiriyor ve başta anladığını sandığın ama hâlâ bulanık kalan kısımları bulmanı sağlıyor.
Sondaki şu cümleyi de sevdim: “Bu yazıyı yazarken GPT-3.5 ve GPT-4 ile epey konuştum. Çok yalan söylediler ve bilgilerin çoğu işe yaramazdı, ama bazen sorunları çözme sürecinde çok yardımcı oldular. LLM’lerin sınırlarını bilir ve söyledikleri her şeyden aşırı derecede şüphe ederseniz toplam fayda pozitif olabilir. Ancak yazma konusunda berbattırlar. Yerine yazdırmayın.” Harika proje.
Örneğin “CPU tüm hesaplamalardan sorumludur. Büyük abidir. Şazam alakablam’dır…” gibi bir bağlamda şakacı cümleyi çıkarıp “CPU tüm hesaplamalardan sorumludur. Bilgisayarı açtığınız andan itibaren komutları tek tek yürütmeye başlar” gibi yazmak çok daha akıcı okunuyor.
Teknik olarak çok derin biri değilim, ama yazıyla para kazanan biri olarak bana böyle görünüyor. Çalışmanın kendisi harika; devam edin.
Bu tür konular genelde lisans düzeyindeki bilgisayar mimarisi ve işletim sistemi derslerinde iyi işlenir. Gerçi günümüzde modası geçtiği için çoğu yerde seçmeli ders hâline geldi.
Birçok üniversite ücretsiz dersler yayımladı; ayrıca bu alandaki profesörlerin yazdığı kitaplar da var. Daha güncel akımlara yakın bir şey görmek istersen ilgili teknoloji konferansı sunumları da oldukça faydalı.
Yine de öğretmek değeri azımsanan bir sanat; bilgiyi daha erişilebilir kılmak ya da daha eğlenceli ve etkileşimli hâle getirmek kesinlikle çok değerli.
Eskiden araştırma mühendisi olarak çalıştım; benim durumumda bir üniversite laboratuvarında bilgisayar güvenliği araştırmaları yapan yazılım mühendisiydim. İşletim sistemi derslerinin seçmeli olduğundan bahseden diğer yorumda olduğu gibi, lisansüstü öğrenciler arasında bile bu düzeyde işletim sistemi anlayışına sahip olmayanlar var.
İyi bilgi bulmak zor, ama kesinlikle mevcut. Bulması zor bilgileri bir araya getirip daha iyi bir biçime dönüştürmüş olmanız bunun kanıtı. Diplomam matematik alanında, ama bilişim bilgimi kendi kendime edindim. Bu şekilde öğrenme becerisi ve son derece teknik bilgileri erişilebilir biçimde aktarabilme yeteneği gerçekten önemli; hafife alınmamalı.
Sadece iki bağlantı paylaşacağım; yoksa sonu gelmeyebilir. İlki https://git.lain.faith/sys64738/airs-notes.git ve bağlayıcı bölümünün içindekiler sayfası https://lwn.net/Articles/276782/. ELF ve linking konusunun sadece yüzeyini kazıdıysanız, Ian Lance Taylor’ın 20 bölümlük blog serisi ve ek başlıklar, ELF hakkında bilmek isteyebileceğiniz her şeyi; ayrıca komutların aslında nasıl çalıştığından şüphe etmenize yol açacak ayrıntıları içeriyor. C++ exception’ı her oluştuğunda kullanılan bir sanal makine de olan ELF’in yoldaşı DWARF’a da kısaca değiniliyor.
İkincisi, https://0xax.gitbooks.io/linux-insides/content/ da harika bir proje. Linux çekirdeğinin çeşitli işleri nasıl yaptığını insanın okuyabileceği bir biçimde takip ediyor. HN’de daha önce paylaşılmış olduğundan neredeyse eminim.
Çok iyi yazılmış; bu konuyu derinlemesine kurcaladığın için tebrikler
Günümüzde 17 yaşındaki biri, anlamadığı şeyleri birbirine yapıştırarak “programlama” yaptığında bir yere kadar idare edebilir ama sonunda bir sınıra çarpacağını düşünüyorum. Bu yüzden şu anda yaptığın iş yalnızca senin için değil, bu materyalden öğrenecek herkes için gerçekten çok değerli
Tebrikler :) Henüz yapmadıysan şimdi bir emülatör dene. Aşırı eğlenceli
“Bir gün bir sınıra çarpacaksa”, yakında olup olmayacağını merak ediyorum
Sıfırdan bir MVC framework’ü yaptım, yorumlayıcılar ve derleyiciler yazdım, yanlışlıkla makine öğrenimini ve doğal dil işlemeyi de sıfırdan yeniden icat etmeye kalktım. Her türden havalı ve keyifli şey yaptım
Sonra parayı ve mevcut teknolojileri keşfettim. Başkalarının “sadece bunu kullan” diye gösterdiği şeyi kabul edince çok daha hızlı geliştirebildiğimi gördüm. Framework’ler de dahil. jQuery’nin hayatı bu kadar kolaylaştırması şaşırtıcıydı
Aradan birkaç yıl geçmişken, eskiden “sadece yapıştırıp kullanmak” gibi görünen şeyler artık “çok düşük seviyeli ileri düzey işler” sayılıyor. Çünkü o soyutlamaların üstüne yeni soyutlamalar daha koyduk
Bugün yeni başlayanların “bir şekilde kotarabildiği” şeyler, sonraki nesil için düşük seviyeli, dikkatli olunması gereken tehlikeli bölge olacak. Programlama bu açıdan harika
Hatta programlamaya akademik açıdan yaklaşmış biri, çeşitli teknolojileri temel düzeyde anladıktan sonra geçmesi gereken bir işle karşılaşınca tamamen bunalma ihtimali daha yüksek
Dev bir şirkette proje yöneticileri ve tasarımcılar gereksinimleri daraltıp yalnızca uygulamaya odaklanmanızı sağlıyorsa durum farklı olabilir; ama çoğu insan için bu nadir bir durum
Yalnızca kapağındaki dinozoru hatırladığım için başlığını yeniden aramam gerekti
Bu rehberi tamamladığın için tebrikler
Üniversiteye gitmiyorsanız, kapsamlı sistem kaynakları çok olmadığından kalitesi değişken ve bazen birbiriyle çelişen bir sürü materyali kurcalamak zorunda kalındığı anlaşılıyor
Bulabileceğiniz en iyi kaynak Charles Petzold’un Code: The Hidden Language of Computer Hardware and Software kitabı. 2. baskısı yeni çıktı
https://codehiddenlanguage.com/
https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
https://www.nand2tetris.org/
NAND kapısından fonksiyon çağrılarına kadar sizi çok iyi götürüyor ve bunu çok keyifli, etkileşimli bir şekilde yapıyor. Okurken kafanızda nasıl çalışacağını hayal etmek yerine doğrudan inşa ediyorsunuz
Ben kendi CPU assembly’mle ve programlanabilir shader diliyle LED matrisi süren küçük bir SIMD/GPU bile yaptım
15 yıl önce aldığımda CPU mimarisi kısmında gözlerim dalıp gitmişti; şimdi hazır olabilirim. Yakın zamanda 2. baskısını da aldım
Okuma listeme aldığım bir yazı. Daha önce şu küçük ayrıntı beni kazanmıştı
“Okurun tutarlı bir göz hizasını koruyabilmesi için her sayfanın altına boşluk ekledim.”
Gerçekten küçük ve geriye dönüp bakınca bariz bir ayrıntı. Ama şaşırtıcı derecede rahat. Bunu fark ettiğimde bunun bir tutku projesi olduğunu anladım
Web’de bir kitabın nasıl sunulacağı üzerine çok düşünmüş ve yeni bir nesilden beklenebilecek türde yeni teamüller üretmiş gibi. Örneğin üstteki bölüm gezinme bileşeninde önceki/sonraki bölümün hafif opak görünmesi yöntemini ilk kez gördüm
Neredeyse 40 yaşındayım ve ben böyle bir şeyi hiç başarmadım. Tam sahtekâr sendromumu yatıştırmaya çalışıyordum, biraz daha yatıştırmam gerekecek
Gerçekten çok iyi iş :p
Hâlâ yeterince zaman var ve acele etmek için pek sebep yok. Size ilham veren bir fikir seçip ayırabildiğiniz küçük boş zamanlarda yavaş yavaş ilerleyebilirsiniz
Asıl mesele, o işi yapan halinizle gurur duyabilmek gibi geliyor. Nihai ürün eninde sonunda gelir
OP, çalışmanı yaşını öne çıkararak mazur göstermeye çalışma. Bu yazı çoğu insanın ömrü boyunca yapabileceğinden daha iyi. Harika iş
newiçinde ölüp gittiği çok olur. Yaşını bir pazarlama unsuru olarak kullanmayı seçti ve belli ki işe yaradı17 yaşında böyle bir içerik üretiyorsa, bu alanı meslek olarak seçtiğinde gelecekte ne tür şaşırtıcı işler yapacağını hayal bile edemiyorum. Gerçekten harika
Önemsiz yönetim işleri, daha da önemsiz şirket hedefleri ve anlamsız kariyer gelişimi yüzünden ruhunun ezilmemesini dilerim. Şimdiden harika işler yapıyor; keşke teknoloji sektörünün hamster çarkında ruhunu öğütmeden bunu sürdürmesini sağlayacak bir fellowship gibi bir şey olsa
OP, Casey Muratori’nin computerenhance.com derslerine bir göz atsa iyi olur
Dersin ilk kısmındaki ödev, 1978 tarihli Intel 8086 simülatörü yapıyor. Modern x86_64 assembly hâlâ ona epey benziyor. Başka yerlerde gerçekten zor bulacağınız çok fazla bilgisayar bilgisi öğreniyorsunuz
Ben de neredeyse 17 yaşında biri olarak söyleyeyim, iyi iş çıkarmışsın! :^)
Daha sadece 20 dakika önce 16 bitlik bir tamsayının ilk baytını nasıl alacağımı araştırırken endianness’ı öğrendim; sen ise CPU hakkında bir kitap yazıyorsun
Crafting Interpreters’ı bitirince mutlaka okuyacağım. Yalnız diğer birçok proje gibi ilerleme hızım belirgin şekilde yavaşladığı için biraz zaman alabilir lol
Çok iyi bir yazı ve tarzını da sevdim. Yazı ile illüstrasyon/memelerin birleşimi gerçekten keyifliydi
RISC/CISC terimleri konusunda biraz çekimserim ama bu herkesin kendi zevkine kalmış bir mesele olabilir >.>
Kernel’ın bazı kısımlarının nasıl çalıştığını çözmeye zaman harcamış biri olarak, bu yazıyı hazırlama sürecinin ne kadar sancılı olabileceğini anlayabiliyorum. Yine de yazıya bakınca buna kesinlikle değmiş
NT tarafında Windows Internals, bilmek isteyeceğiniz pek çok şeyi ele alıyor; Microsoft dokümantasyonu da fena değil. Bana göre Linux kernel dokümantasyonundan kesinlikle daha iyi ve çok iyi bir başlangıç noktası
Windows hakkında daha fazlasını öğrenmek istiyorsanız oyun hackleme forumlarını/kaynaklarını da öneririm. Ayıklanması gereken çok şey var ama niş konularda zaman zaman oldukça iyi bir bilgi kaynağı olabiliyorlar
Son olarak, akıllı telefonda bakarken bazı kod bloklarının yazı tipi epey büyük olduğu için okumak zordu. Örneğin 6. bölümdeki
main.cböyleAyrıca “bilgisayarları seven bir gençseniz ve henüz Hack Club Slack’te değilseniz hemen katılın” cümlesi yaşlandığımı bana fazlasıyla iyi hatırlatıyor lol