4 ms·
Hi! I'm the person who made this thing! Thanks for reading and thanks for all the corrections, in glorious Hacker News fashion. It's definitely a pleasant surp
by archmaster 3y ago
Hi! I'm the person who made this thing!
Thanks for reading and thanks for all the corrections, in glorious Hacker News fashion. It's definitely a pleasant surprise to see my project here. Putting the "You" in CPU is still very much a work in progress — I was hoping to polish it a lot more and even add some more content before posting on HN later next week :)
Some backstory on me: I'm 17 and left high school a year ago to work full-time at Hack Club (https://hackclub.com/ https://hackclub.com/). I've been programming for as long as I can remember, and started homeschooling about 6 years ago to focus more on that (and my other interests).
Since I'm entirely self-taught, I haven't taken any college systems classes — and while I had picked up a lot, I wasn't happy with my answer to "what happens when you run a thing." So I let myself spend a shit ton of time actually learning as much as possible. What I found was that:
1. Operating systems and hardware are really fun to learn about!
2. Wow, online resources on this stuff are terrible.
A decent portion of my research ended up at PDFs of lecture slides from 2014, or StackOverflow answers that were, in fact, incorrect or vastly oversimplified.
So, I wrote Putting the "You" in CPU to hopefully provide a better resource to people who wanted to start teaching themselves all this stuff! While I don't provide perfect coverage (still need to write a couple paragraphs on SMP), it's a lot better than most of what I've seen. I also had fun drawing and making diagrams for the first time, I think I definitely got progressively better and I'm really proud of some of the drawings in the latter few chapters.
P.S. The whole thing is open source on GitHub if you want to look under the hood: https://github.com/hackclub/putting-the-you-in-cpu https://github.com/hackclub/putting-the-you-in-cpu
- uneekname 3y ago> I was hoping to polish it a lot more and even add some more content before posting on HN later next week :) That's on me, I'm a fan of your work and saw this pop up on my GitHub feed. I probably should have considered if you were ready for it to be shared. I hope the attention was mostly positive!
- still_grokking 3y agoWow! I'm impressed! Have you actually gone down already the rabbit hole that is the history of computing and alternative approaches to what we have today?
- archmaster 3y agoThere are a lot of rabbit holes to go down and not enough time in my day! I cannot say in good conscience that I have gone down this one, although I've picked up a lot of factoids. I've read a couple books on the history of computing, but I'm not sure how much I actually remember — likely because I didn't go on many research tangents. Occasionally I also just get curious and Google something. So, definitely picked lots of tech-history things up, but not an expert by far. Perhaps some day I will be.
- BossingAround 3y agoAmazingly impressive! I just spent 5 minutes on your website, changing colors of adjacent tiles.
- archmaster 3y agoI knew I wanted my personal site to have some sort of interactive gimmick, seems like the tile grid worked out. Glad you enjoyed it!
- WaffleIronMaker 3y agoHeyo, as another teenager who has really enjoyed participating in Hack Club, it's great seeing this work! This is super great. Thanks for sharing :)
- ccrush 3y agoI had the same questions when I was about your age and found a lot of intersting answers in the Linux source code. of course it was a lot simpler back then. what really got me going was the osdev community (much smaller back then) and Intels system architecture documentation. iirc part 3a or 3b was where the good stuff is. it tells you a lot less about how things are and a lot more about how things could be. you also get to learn plenty of fun things in OSDEV too like how 32bit processors did 36bit addressing with PAE or how 64bit processors did 52bit addressing to squeeze money out of people. how computers start in 16bit mode and you have to learn systems level assembly code gymnastics to make it to long mode, why there's an 8bit mode around, and more. if you liked learning about loading binaries, you'll love how many surprises still exist. like 64bit mode still including memory segmentation but forcing it to flat mapping for lonh mode
- vacuity 3y agoFantastic work! This makes for a great resource to dive into OS dev. There's a lot of detail but it's easy to digest. I suggest slightly revising the end of note #2 for chapter 2 to reflect that some async paradigms in programming languages are cooperatively multitasked. Within a process, it's generally considered safe to utilize cooperative multitasking (desirability is a different question), although I believe Erlang sticks with preemption for robustness.
- gary_0 3y ago> Wow, online resources on this stuff are terrible. I've been thinking this a lot lately, searching for things like: a detailed block diagram of the Linux kernel, how page tables work, a comparison of function call ABIs on different platforms, details about low-level network protocols, reserved Linux PID numbers, etc. Occasionally I would find a Reddit thread with an answer, but it was mixed in with the usual Reddit dross, and I doubt that Reddit is a reliable place to store knowledge. StackOverflow was particularly unhelpful, as the questions are mostly oriented around accomplishing particular tasks, and the answers are necessarily brief. Nowadays, for general knowledge, I skip Google's enshittified search and go straight to Wikipedia, but Wikipedia has limits on how much detail it will go into about technical topics. I wonder if there's a need for a comprehensive wiki for all the details of computer guts? There are lots of scattered resources, but having them all compiled in one place would be awesome.
- cpach 3y agoA wiki for operating system internals. I like this idea!
- gary_0 3y agoNot just operating systems, but everything that goes on under the application layer! All the way down to the bits living in the CPU registers and going out the PCIe/USB/Ethernet ports. Another thought: a focus on staying up to date would be important. A lot of information about system internals I find is actually historical, and while that's useful sometimes, it's still a pretty big gap. Modern systems are quite poorly documented.
- cpach 3y ago“Modern systems are quite poorly documented” Hate to say it, but you’re probably very right.
- archmaster 3y agoThree things - https://wiki.osdev.org/Expanded_Main_Page https://wiki.osdev.org/Expanded_Main_Page is quite good or at least a starting place. It's very x86-centric, though, and doesn't have a lot of coverage. Also, a decent portion is out of date. I used it a decent amount as at least a component of my research for You in CPU. Agree that modern systems are even more terribly documented than systems in general. So many of the resources I found, even recent ones, were referring to stuff from the original x86 that had long changed. Almost everything I found about ELF or memory layout assumed the memory space was 4 GiB. Finally, I hope Putting the "You" in CPU gets well-SEOed if only so people like me Googling for modern answers to these questions will find at least something. I tried to make everything as relevant to modern day tech as possible, and to link to up-to-date resources.
- cpach 3y agoHey, you’re the author of water.css! Love that project. It really helped me when I was about to launch my blog and didn’t want to get held up for months by fiddling around with CSS. Thanks a lot for providing water.css!
- archmaster 3y agolol water.css never escapes me glad you like it :3