http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf