A modern computer consists of one or more processors, some main memory, disks, printers, keyboard, a display, network interfaces, and other input/output devices. Writing programs that keep track of all these components and use them correctly, let alone optimally, is an extremely difficult job. For this reason, computers are equipped with a layer of software called the operating system, whose job is to manage all these devices and provide user programs with a simpler interface to the hardware.The operating system performs two unrelated functions, extending the machine and managing resources. The operating system we have designed has monolithic systems architecture.
The operating system is written as a collection of procedures, each of which can call any of the other ones whenever it needs to. When this technique is used, each procedure in the system has a well-defined interface in terms of parameters and results, and each one is free to call any other one, if the latter provides some useful computation that the former needs.The services (system calls) provided by the operating system are requested by putting the parameters in a well-defined place and then executing a trap (interrupt) instruction. This instruction switches the machine from user mode to kernel mode and transfers control to the operating system. The operating system then fetches the parameters and determines which system call is to be carried out.