Tuesday, October 27, 2009

8.7. Process Structure



8.7. Process Structure


Guardian is a microkernel system: apart from the
low-level interrupt handlers (a single procedure, IOINTERRUPT) and some very low-level code, all the system services are
performed by system processes which run in system code and data space.



The more important processes
are:




  • The system monitor, PID 0 in each CPU, which is responsible for starting and
    stopping other processes and for miscellaneous tasks such as returning status
    information, generating hardware error messages, and maintaining the time of
    day.



  • The memory manager, PID 1 in each CPU, which is responsible for I/O for
    the virtual memory system.



  • The I/O processes, which are
    responsible for controlling I/O devices. All access to I/O devices from anywhere
    in the system goes via its dedicated I/O process. The I/O controllers are
    connected to two CPUs, so each device is controlled by a pair of I/O processes
    running in those CPUs: a primary process that
    performs the work and a backup process that tracks the state of the primary process and
    waits to fail or hand over control to it voluntarily ("primary switch").


    The main issue in the choice of
    primary CPU is the CPU load, which needs to be balanced manually. For example,
    if you have six devices connected between CPUs 2 and 3, you would probably put
    the primary process of three of them in CPU 2, and the primary process of the
    other three in CPU 3.


8.7.1. Process Pairs


The concept of process pairs is not
limited to I/O processes. It is one of the cornerstones of the fault-tolerant
approach. To understand the way they work, we need to understand the way
messages are passed in the system.


 


No comments: