The long Unix heritage that is built into Linux and the accompanying C libraries provides almost everything you need in order to write stable and resilient embedded applications. The issue is that for every job, there are at least two ways to achieve the end you desire.
In this chapter, I focused on two aspects of system design: partitioning into separate processes, each with one or more threads to get the job done, and scheduling of those threads. I hope that I shed some light on this and have given you the basis for further study into all of them.
In the next chapter, I will examine another important aspect of system design: memory management.