1. Introduction
Microprocessor simulators have been around since the dawn of computing to serve many roles, including hardware development and debugging, providing binary compatibility and enabling performance studies. Microarchitects and researchers are generally interested in cycle accurate simulation tools, which construct a complete microprocessor pipeline in software and simulate the flow of each instruction through this pipeline, so as to collect much more accurate timing information down to individual cycles. Full system simulators take accuracy a step further by simulating all instructions in both user applications and the kernel, and may also support cycle accurate modeling of multiprocessor configurations and hardware devices inside a virtual machine.