Many embedded developers who are familiar with real-time operating systems (RTOS) consider the Unix process model to be cumbersome. On the other hand, they see a similarity between an RTOS task and a Linux thread and they have a tendency to transfer an existing design using a one-to-one mapping of RTOS tasks to threads. I have, on several occasions, seen designs in which the entire application is implemented with one process containing 40 or more threads. I want to spend some time considering whether this is a good idea or not. Let's begin with some definitions.
A process is a memory address space and a thread of execution, as shown in the following diagram. The address space is private to the process and so threads running in different processes cannot access it. This memory separation is created by the memory management subsystem in the kernel, which...