Learning Systems and Kernel Programming
I’ve been toying around with setting up a website for a while now. Partially motivated by having a place to keep some interesting links handy, and partially as an open journal/learning diary. I enjoy learning about new (to me at-least) concepts, technologies, and systems. So why not join me on my journey to learn some stuff, I’m going to attempt a post a week, some weeks I might get stuck on a problem and curse that I ever started this project. Hopefully my floundering will entertain, but who knows maybe we’ll all learn something in the process.
One of the best ways to learn something new is to explain it to someone else. If you can’t explain the concept you are trying to learn, you don’t understand it. To that end, this blog will be my attempt to learn, distill and (hopefully) explain concepts in systems/kernel programming.
On the Kernel side, I’ll be posting a few articles about working with XV6 in order to learn Operating system concepts, and how to apply those concepts to the Linux Kernel.
Some areas I’ll touch on:
- The boot process
- Memory Management
- Networking
- System call interfaces
- ACPI tables
On the systems programming side, it’s probably going to be a bit of whatever takes my fancy, so far I’ve got:
- Executable file formats (ELF/a.out etc.)
- Executable Linking and relocation
- Executable Loaders
- Dynamic and Static linking
- Boot-loaders
For each topic that gets covered I’ll setup a GitHub repo with some code and tag the beginning and end of the week so you can see in real-time how everything is progressing. As I mentioned before, It’s entirely possible that there will be a few weeks where there’s minimal GitHub activity, in any case I’m going to attempt to crystallize what the blockers are.
Enough Explainy Explainy talk. Lets get cracking!