I've been reading kernel books for nearly 20 years -- this is not recommended.
Some of the chapters and explanations I liked, others I felt were dry and lacking. The code examples seem to run through a non-deterministic preprocessor -- the code is supposed to describe 2.4.18, but the code snippets don't quite match the actual code (while generally working the same way, the algorithms/loop structure are often rewritten and the macros are sometimes expanded). I find it very useful when books comment on actual code examples, this is "kinda massaged code" -- I found it very frustrating when I actually looked at the kernel tree when they had snippets in the book.
I often found it necessary to look at the actual code to give more context (but the code rarely matched verbatim -- very strange). And when they did rewrite algorithms, I found the kernel 2.4.18 source to be MORE lucid.
The explanations without code were adequate, and I found some to be illuminating. Perhaps since the book has two authors, different authors wrote different chapters? (I liked some chapters and didn't like others).
If you want a general understanding of how kernels work, Andy Tanenbaum's "Operating Systems: Design and Implementation" where he elaborates on Minix is very useful -- with a complete Minix system (Minix is more of a teaching tool, which it does well, Linus looked at lMinix and wanted a more useful system, hence Linux).
I found Robert Love's "Linux Kernel Development" very good (I read the 1st edition, still need to read the second edtion). And Linux Device Drivers (Corbet and Rubini) is very good and has excellent examples (but the examples may need some work to build on a current kernel -- had this problem with the 2nd edition).