A few months ago I went through xv6 on my own as an experiment in getting better at systems programming. I wrote a bunch of posts about it, in case people are interested:<p>Grokking xv6: <a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix00&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix00&#x2F;</a><p>What is a shell and how does it work?: <a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix01&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix01&#x2F;</a><p>What&#x27;s on the stack?: <a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix02&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix02&#x2F;</a> (video of tracing a system call from user space to kernel space and back: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=TWksEdn5eoA" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=TWksEdn5eoA</a>)<p>Page tables and virtual memory: <a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix03&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix03&#x2F;</a><p>Locks and concurrency:
<a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix04&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix04&#x2F;</a><p>A short overview of the file system:
<a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix05&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix05&#x2F;</a><p>Grok LOC?
<a href="http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix06&#x2F;" rel="nofollow">http:&#x2F;&#x2F;experiments.oskarth.com&#x2F;unix06&#x2F;</a><p>It was a very educational experience for me, and I highly recommend the journey for other people.