Efficiently programming a single processor to ``simultaneously'' execute several processes at once appears to be a relatively simple problem. However, if one constructs a multi-programming mechanism without the benefit of experience or a successful example, there are plenty of opportunities to make mistakes. The result may be long hours of searching for subtle non-reproducible bugs and an eventual ``patched up'' mechanism with several undesirable properties, such as expensive context switches, long periods with interrupts masked, and so on.
A number of operating system textbooks (for example[1, 2, 3, 4]) describe multi-programming mechanisms in a fair amount of detail. However, these expositions skim over important details. Furthermore, the multi-programming mechanisms they describe tend to be inefficient and largely based on out-dated assumptions and requirements. No detailed description of a modern, general-purpose multi-programming mechanism that also supports real-time processes, has so far been published.
This article is an attempt to explain and justify an efficient, general-purpose multi-programming mechanism based on modern assumptions, in enough detail to enable the reader to construct a similar mechanism with confidence. The article makes specific references to the Motorola 680XX-architecture[5] and offers some criticisms of the architecture. However, the discussion is relevant to other architectures as well.
Prof Herman Venter