If you are also interested in OS development, Stanford has developed Pintos[1] which is designed to teach OS concepts: threads, system calls (and the security thereof), virtual memory and filesystems.
Unfortunately it was essentially samizdat until 1996. But it's an excellent work, and e.g. taught me pointers when the K&R chapter on pointers and arrays didn't work for me.
Tanenbaum's ineffable "Operating Systems Design and Implementation" and MINIX (a learning OS) existed then, and was what Linus Torvalds studied before creating Linux:
I particularly focused on this section http://www.brokenthorn.com/Resources/OSDev18.html . Although not mandatory for development, having a grasp of these concept does give a better insight. Well done!
This site is focused only on x86 rather than x86_64. In fact you'll find that this organisation of permissions within the kernel using 4 ring levels will only work on x86 as most other ISAs only have two levels, supervisor and user (ARM, MIPS, SPARC et aia).
It's still a very incomplete system: it loads, sets up IDT/GDT, uses several simple drivers for keyboard, timers, serial interfaces, probing PCI bus, an effort to write a floppy disk driver (I could test it on virtual machines only though). There's a demo of multitasking, a demo of going to userspace and doing system calls, a demo of VFS and RAM-fs (I overcomplicated it and got stuck, but I have not rewritten it yet).
These articles were an invaluable source of information and a starting point for design.
[1] - http://www.stanford.edu/class/cs140/projects/pintos/pintos.h...