We are in general working with most types of distributed and parallel systems, in form of everything from embedded systems to multiprocessor systems and clusters.
Our focus lies primarily on efficient and scalable communication inside of these systems.
The systems and development environments that we are in first hand working with are:
- Multi-threading. Multiple threads communicating inside of one application, where communication takes place via shared memory.
- Multi-processing. Multiple processes running separately or inside the same application, where communication takes place via shared memory or message passing.
- Distributed systems. Multiple processes running on separate platforms, interconnected via communication networks and message passing.
We have knowledge in a large number of algorithms and methods in these areas. We can adopt those or create new for specific needs.
The technologies that we are in first hand working with are:
- Non-blocking synchronization. This technology is primarily suitable for environments with shared memory and can preferably be used with multi-thread and multi-process environments aiming for increased scalabily and parallelism.
- Blocking synchronization. This includes synchronization and communication in multi-thread and multi-process environments using mutex and semaphore objects.
- Real-time systems. We have knowledge in hard as well as soft real-time requirements and how these can be realized on platforms with or without built-in parallelism.
- Message passing. We have knowledge in construction of server systems where replication and other mechanisms can be used for creating stable and scalable systems.
We have experience and knowledge in most modern computer architectures and operating systems for personal computers, workstations, and server systems. Examples of known architectures are Pentium, Ultrasparc, PowerPC, and MIPS, and examples of known operating systems are Windows, Linux, Solaris, Irix and more.