I encountered many of these while reading through Understanding The Linux Kernel  and The Linux Programming Interface .
Both are great books which are primarily about the "how" of the kernel, but cover a lot of the "why" of the design and algorithms as well.
I actually have that book as well. I don't know how I forget to mention it. As I recall, it was bit less dense than the other two.
After buying it I found The Linux Programming Interface... and I certainly regretted having bought the former rather than the later. But for beginners I recommend the first.