Thus far in this book all programs have been application programs executed under the Raspbian operating system. An operating system can be viewed as a set of programs that provide services to application programs. These services allow the application programs to use the hardware, but only under the auspices of the OS.
The material in this chapter provides a very brief overview of concepts that are important when writing system software. A full treatment of the material would require that you have a detailed understanding of how to program the specific hardware you are using, which is beyond the scope of this book. The goal here is to provide you with a brief introduction.
The Linux kernel in Raspbian allows multiple programs to be executing concurrently, and each of the programs is accessing the hardware resources of the computer. One of the jobs of the operating system is to manage the hardware resources in such a way that the programs do not interfere with one another. In this chapter we introduce the CPU features that enable the operating system to carry out these management tasks.