There are two techniques by which a program executing in user mode can request the
kernel's services: •
System call •
Message passing Operating systems are designed with one or the other of these two facilities, but not both. First, assume that a
user process wishes to invoke a particular target system function. For the
system call approach, the user process uses the trap instruction. The idea is that the system call should appear to be an ordinary procedure call to the application program; the
OS provides a library of user functions with names corresponding to each actual system call. Each of these stub functions contains a trap to the OS function. When the application program calls the stub, it executes the trap instruction, which switches the
CPU to
kernel mode, and then branches (indirectly through an OS table), to the entry point of the function which is to be invoked. When the function completes, it switches the processor to
user mode and then returns control to the user process, thus simulating a normal procedure return. In the
message passing approach, the user process constructs a message that describes the desired service. Then it uses a trusted send function to pass the message to a trusted
OS process. The send function serves the same purpose as the trap; that is, it carefully checks the message, switches the
processor to kernel mode, and then delivers the message to a process that implements the target functions. Meanwhile, the user process waits for the result of the service request with a message receive operation. When the OS process completes the operation, it sends a message back to the user process. The distinction between the two approaches has important consequences regarding the independence of the OS behavior from the application process behavior, and the resulting performance. As a rule of thumb,
operating systems based on a
system call interface can be made more efficient than those requiring messages to be exchanged between distinct processes. This is the case even though the system call must be implemented with a trap instruction; that is, even though the trap is relatively expensive to perform, it is more efficient than the message-passing approach, where there are generally higher costs associated with the process
multiplexing, message formation and message copying. The system call approach has the interesting property that there is not necessarily any OS process. Instead, a process executing in
user mode changes to
kernel mode when it is executing kernel code, and switches back to user mode when it returns from the OS call. If, on the other hand, the OS is designed as a set of separate processes, it is usually easier to design it so that it gets control of the machine in special situations, than if the kernel is simply a collection of functions executed by user processes in kernel mode. Procedure-based operating systems usually include at least a few
system processes (called
daemons in
UNIX) to handle situations whereby the machine is otherwise idle such as
scheduling and handling the network. == See also ==