The Elements of Computing Systems: Building a Modern Computer from First Principles