I have almost finished the book (I still need to read the last two small chapters about Sun's NFS and Andrew FS).
Very well written, explanations are clear and interesting to read.
You can find the book freely and legally in PDF here : OSTEP
I bought the book, I prefer to read on paper, the print is of nice quality.
For those like me who buy the book, there is a fourth chapter about security only available in PDF.
First, as a programmer, should you read this book? Is it not too low-level? My answer to that is: you can't go too low-level when you are a programmer.
The more you know and understand how everything works and interacts, the better for your "mental map".
If you are experienced enough you will have already learned a lot or have an intuition of how OSes work at a low-level. That's my case, and reading this book helped me a lot crystallizing and confirming my knowledge. Of course, I learned a lots of new concept, mostly on file systems, as I had very few interests in this area (it's definitely not my cup of tea).
This chapter gives a very good overview of what a CPU has to do to organise its work. It helped me a lot organizing some knowledge I had and filling some gaps.
For example, the different algorithms for CPU scheduling, what a trap handle is and how it is actually used, and many smaller details about paging, translation lookaside buffers, etc.
This is the kind of knowledge that helps a lot in understanding some behaviours and bugs.
I think reading this chapter once is definitely not enough. The next steps would be to do the homework, that I didn't do for lack of time and motivation, too much to read and do. Or dig deeper into the FreeBSD sources and read actual good, working code.
As a C++ programmer I have already worked on multi-threaded project or read a lot about this (e.g., C++ concurrency in actions), but reading this still helped me understand how the OS performs its magic. And it is not magic anymore which is good!
Ah, persistence and file systems... This has been harder for me to read as I have little interest in file systems. But I did read this chapter and learned a lot. So, if even I finished it, that means the book is able to keep you reading even when you are not really interested, which is a very good sign. This is maybe the chapter where I learned the most. First, that it is definitely not a subject I like... It is still very well explained and detailed enough to give a good overview. I mostly enjoyed the chapter "I/O Devices", where there are good explanations on how the OS communicates with devices via registers. There are maybe too much details about HDD performance and how to compute throughput.
Conclusion: A very good book! If you want to understand how an OS works with a big picture, this book is for you. There are enough details so you can learn a lot, but you won't be drown in overly dark corner explanations. Now, if you'll excuse me, I have a sudden craving for peach.