Operating system support
Either user-level or system-level simulators requires to support some of the tasks performed by the target operating system.
User-level simulators do not simulate the whole operating system. To perform some ISA instructions like the system calls, it requires some additional System Capabilities mimicking the system behavior, or the ability to handle pthreads in the simulated program.
System-level simulators are simulating the whole operating system, so they do not rely on such translation to the native host. However some part of the hardware software such as the bios also needs to be executed / simulated.
Target OS & User-level simulators
User-level simulators focus on simulating the user-space part of the target ISA, such as computation instructions, load/stores, branches and so on... Such simulator usually do not implement complex scheduling techniques, running a single thread over a single processor dedicated to this only thread.
However, to simulate at user-level even a simple benchmark, it is required to implement tasks that are indeed dedicated to the target OS, like performing the simulated System Calls natively, or being able to simulate several threads on a CMP architecture.
So far, we have developed the following OS capabilities:
Target OS & Full System simulators
Full System simulators are simulating the full OS of the target architecture. Such simulators does not require some translation to the native operating system as user-level simu:lators does, however they have additional requirements tied to the booting or the target operating system:
- Upon booting an operating system requires a list of mandatory devices. Linux upon booting for instance expect to have a chopset, a PCI bus, a hard drive controler and an output console. All such devices needs to be implemented before booting an operating system.
- The detection of such devices is partly resolved by the bios of various hardware components. Such bios correspond to the solfware part of the attached hardware, and they should be simulated before the operating system can starts.