Created on Monday, 12 November 2012 Last Updated on Wednesday, 29 May 2013 Written by Daniel Rubio Bonilla

Simulation is often used to inspect various characteristics of a system. In the S(o)OS project we investigate service-oriented aspects of operating systems. One part of the project requires simulating the interactions between software components of an operating system and between OS and application software.

While creating new operating system concepts and regarding their interaction with the programmability of large-scale systems, we found that existing simulation packages do not seem to have the right abstractions for fast design exploration. The ability to simulate separate components of the OS and of the application was the main goal to develop the OS simulator SoOSiM. The design decisions were:

  • To simulate message passing and shared memory as the main forms of communication between software components.
  • Achieve synchronization between components through blocking messaging.

  • To have global ticks, designating an abstract notion of progress.

  • To observe the number of ticks a software component is active, waiting for a response after invoking another component, or idle.


Basic Structure 

The purpose of SoOSiM is to provide a platform that allows a developer to observe the interactions between OS modules and application threads. For this reason the simulated hardware is highly abstract. In SoOSiM, the hardware platform is described as a set of nodes. Each node represents a physical computing object: such as a core, a complete CPU, a memory controller, etc. Every node has a local memory of potentially infinite size. The layout and connectivity properties of the nodes are not part of the system description.

Each node hosts a set of components. A component represents an executable object: such as a thread, application, OS module, etc. Components communicate with each other either using direct messaging, or through the local memory of a node. Having both explicit messaging and shared memory, SoOSiM supports the two well-known methods of communication. Components also have a message queue, because:

  • Multiple components can potentially send messages to the same component concurrently.
  • A component can receive messages while it is actually waiting for a response from anothercomponent.

All components in a simulated system, even those hosted within the same node, are executed concurrently, from the component's point of view. The simulator neither poses restrictions as to which components can communicate with each other nor to which node's local memory they can read from and write to.



Installation guide 




Source code:

To download SoOSiM from the git repository execute:
git clone git://


Screen shots:

Thursday the 17th. Sponsored under FP7-ICT-2009.8.1, Grant Agreement No. 248465. This website is monitored by Google Analytics. IP addresses are anonymized.
Copyright 2012