Several architectural choices are possible for the implementation of the OS subsystem responsible for process management and control. The same goals of address space protection and controlled access to OS resources can be achieved through the same mechanisms (separation between privileged and user execution modes), yet via radically different designs.
From an historical perspective, we observe a continuing tendency toward ``lighter'', smaller kernels or, putting it in a different way, toward kernels that delegate as much as possible of their functionality to the processes. The reasons for this line of development lie mainly in the ever increasing sophistication of the operating systems themselves, and consequently in an attempt to manage effectively the complexity of their design, implementation and maintenance by making them more and more modular.
Hence, from monolithic OS kernels, whose code executes outside all processes, we pass to kernels which execute mainly in the context of the processes, to microkernels, which push the modularization to the ultimate end by making the OS itself a collection of inter-operating ``special'' processes.
In the following sections we shall consider in some detail these basic architectures in some detail (see Fig. 3).
Figure 3: A schematic view of two possible OS execution models: nonprocess kernel (left), kernel executed in a process's context (right)