I taught myself about operating systems by studying "Operating System Concepts Essentials (Second Edition)", by Abraham Silberschatz, Peter Baer Galvin and Greg Gagne.
My study will entail reading the entire textbook (am currently on Chapter 8), and completing all of the programming problems and projects. This link contains the base source code for some of the problems and projects: http://cs.westminstercollege.edu/~greg/osc/index.html
I completed the exercises in an instance of the Linux virtual machine provided on a related course website: http://cs.westminstercollege.edu/~greg/osc10e/vm/index.html
Unfortunately the exact course website does not provide a virtual machine. Nonetheless, I had no trouble using the virtual machine provided on the related course website.
I've had a lot of fun going through the book so far, and consider operating systems knowledge essential to all software engineers, since the operating system is the puppet master of all user processes.