Книга: Distributed operating systems
9.2.1. Processes
9.2.1. Processes
A process in Chorus is a collection of active and passive elements that work together to perform some computation. The active elements are the threads. The passive elements are an address space (containing some regions) and a collection of ports (for sending and receiving messages). A process with one thread is like a traditional UNIX process. A process with no threads cannot do anything useful, and normally exists only for a very short interval while a process is being created.
Three kinds of processes exist, differing in the amount of privilege and trust they have, as listed in Fig. 9-6. Privilege refers to the ability to execute I/O and other protected instructions. Trust means that the process is allowed to call the kernel directly.
Type | Trust | Privilege | Mode | Space |
---|---|---|---|---|
User | Untrusted | Unprivileged | User | User |
System | Trusted | Unprivileged | User | User |
Kernel | Trusted | Privileged | Kernel | Kernel |
Fig. 9-6. The three kinds of processes in Chorus.
Kernel processes are the most powerful. They run in kernel mode and all share the same address space with each other and with the microkernel. They can be loaded and unloaded during execution, but other than that, can be thought of as extensions to the microkernel itself. Kernel processes can communicate with each other using a special lightweight RPC that is not available to other processes.
Each system process runs in its own address space. System processes are unprivileged (i.e., run in user mode), and thus cannot execute I/O and other protected instructions directly. However, the kernel trusts them to make kernel calls, so system processes can obtain kernel services directly, without any intermediary.
User processes are untrusted and unprivileged. They cannot perform I/O directly, and cannot even call the kernel, except for those calls that their subsystem has decided to make on their behalf. Each user process has two parts: the regular user part and a system part that is invoked after a trap. This arrangement is similar to the way that UNIX works.
Every process (and port) has a protection identifier associated with it. If the process forks, its children inherit the same protection identifier. This identifier is just a bit string, and does not have any semantics associated with it that the kernel knows about. Protection identifiers provide a mechanism which can be used for authentication. For example, the UNIX subsystem could assign a UID (user identifier) with each process and use the Chorus protection identifiers to implement the UIDs.
- Using the kill Command to Control Processes
- Listing Processes with ps
- 15.4.1. Debugging Multiple Processes
- 7.3.1. Processes
- 8.2.1. Processes
- 9.7.3. Processes
- 1.5.2 A version using multiple processes
- 4 Processes and Processors in Distributed Systems
- Листинг 11.9. (processes.c) Серверный модуль, отображающий таблицу процессов
- Processes and Threads
- Owner match
- 6.3.6. Release Consistency