Standing at over 900 pages this book is the most dense book I have ever invested time and effort into, and well worth it too!
The topics covered computer sytems (big surprise) from the ground up; beginning with numerical binary representation and machine level code,
going through CPU design and the basics of concurrency, the virtual memory and cache hierarchies, all the way up the kernel,
exception/ signal handling and ending with network programming and concurrent programming.
Each topic is encapsulated within the context of coding efficient programs or aiming at being a better programming in general; modern CPU
architecture is discussed within the context of exploiting parallelism for example, while the virtual memory and memory architecture is
discussed within the context of exploiting locality instead and writing cache-friendly code. The topics of linking and the ELF structure of object files
are given in detail to sidestep common linking errors and to master machine level debugging respectively. The practice problems and
CMU's own publically available labs emphasis programming in C, and more specifically, pointers and how to properly appeciate them. It's great. All of it.
What I appreciate the most is breaking above the layman level of understanding when it comes to programming; I hope to no longer
be forced to seek help in understanding a topic and settling for a reply like "Concurrency is two lines of customers ordering from a s
ingle cashier", or other weird analogies involving passports or phonelines or even Rob Pike's own gofers. Just knowing that threads
are logical control flows running within a single process with their own context is enough to make all the above seem like almost gibberish.
Some notes, practice problem solutions and the labs can be found here:https://github.com/Adhamkmopp/cmu-comp-systems