To manage processes, the kernel must have a clear picture
of what each process is doing. It must know, for instance, the process’s
priority, whether it is running on a CPU or blocked on an event, what
address space has been assigned to it, which files it is allowed to
address, and so on. This is the role of the process
descriptor — a
type structure whose fields contain all the information related to a
single process.[*] As the repository of so much information, the process
descriptor is rather complex. In addition to a large number of fields
containing process attributes, the process descriptor contains several
pointers to other data structures that, in turn, contain pointers to
other structures. Figure
3-1 describes the Linux process descriptor schematically.
The six data structures on the right side of the figure refer to specific resources owned by the process. Most of these resources will be covered in future chapters. This chapter focuses on two types of fields that refer to the process state and to process parent/child relationships.
As its name implies, the
state field of the process descriptor
describes what is currently happening to the process. It consists of
an array of flags, each of which describes a possible process state.
In the current Linux version, these states are mutually exclusive, and
hence exactly one flag of
always is set; the remaining flags are cleared. The following are the
possible process states: