The Elements of Computing Systems: Building a Modern Computer from First Principlesby Noam Nisan and Shimon Schocken