home *** CD-ROM | disk | FTP | other *** search
- .s1
- 5. Processes and images
- .es
- An
- .ft I
- image
- .ft
- is a computer execution environment.
- It includes a core image,
- general register values,
- status of open files,
- current directory and the like.
- An image is the current state of a pseudo-computer.
- .pg
- A
- .ft I
- process
- .ft
- is the execution of an image.
- While the processor is executing on behalf of a process,
- the image must reside in core;
- during the execution of other processes it remains in core
- unless the appearance of an active, higher-priority
- process
- forces it to be swapped out to the fixed-head disk.
- .pg
- The user-core part of an image is divided into three logical segments.
- The program text segment begins at location 0 in the virtual address space.
- During execution, this segment is write-protected
- and a single copy of it is shared among
- all processes executing the same program.
- At the first 8K byte boundary above the program text segment in the
- virtual address space begins a non-shared, writable data segment,
- the size of which may be extended by a system call.
- Starting at the highest
- address in the virtual address space is a stack segment,
- which automatically grows downward
- as the hardware's stack pointer fluctuates.
- .s2
- 5.1 Processes
- .es
- Except while \*sUNIX\*n is bootstrapping itself into operation, a new
- process can come into existence only
- by use of the \fIfork\fR system call:
- .dc
- processid = fork\|(\|label\|)\|
- .ec
- When \fIfork\fR is executed by a process, it
- splits into two independently executing processes.
- The two processes have independent
- copies of the original core image,
- and share any open files.
- The new processes differ only in that one is considered
- the parent process:
- in the parent,
- control returns directly from the \fIfork\fR,
- while in the child, control is passed
- to location
- .ft I
- label.
- .ft R
- The \fIprocessid\fR returned by the \fIfork\fR call is the identification
- of the other process.
- .pg
- Because the return points in the parent and child process
- are not the same, each image existing after a
- \fIfork\fR may determine whether it is the parent or child process.
- .s2
- 5.2 Pipes
- .es
- Processes may communicate
- with related processes using the same system
- .ft I
- read
- .ft
- and
- .ft I
- write
- .ft
- calls that are used for file system I/O.
- The call
- .dc
- filep = pipe\|(\|\|)\|
- .ec
- returns a file descriptor \fIfilep\fR and
- creates an inter-process channel called a \fIpipe\fR.
- This channel, like other open files, is passed from parent to child process in
- the image by the \fIfork\fR call.
- A \fIread\fR using a pipe file descriptor
- waits until another process writes using the
- file descriptor for the same pipe.
- At this point, data are passed between the images of the
- two processes.
- Neither process need know that a pipe,
- rather than an ordinary file,
- is involved.
- .pg
- Although
- inter-process communication
- via pipes is a quite valuable tool
- (see \(sc6.2),
- it is not a completely general
- mechanism,
- since the pipe must be set up by a common ancestor
- of the processes involved.
- .s2
- 5.3 Execution of programs
- .es
- Another major system primitive
- is invoked by
- .dc
- execute\|(\|file, arg\*t\d1\u\*n, arg\*t\d2\u\*n, .\|.\|. , arg\*t\dn\u\*n\|)\|
- .ec
- which requests the system to read in and execute the program
- named by \fIfile\fR, passing it string arguments
- .ft I
- arg\v'.3'\*t1\*n\v'-.3'\|, arg\v'.3'\*t2\*n\v'-.3'\|, .\|.\|.\|\|, arg\v'.3'\*tn\*n\v'-.3'.
- .ft R
- All the code and data in the process using \fIexecute\fR
- is replaced from the \fIfile\fR,
- but
- open files, current directory, and
- inter-process relationships are unaltered.
- Only if the call fails, for example
- because \fIfile\fR could not be found or because
- its execute-permission bit was not set, does a return
- take place from the \fIexecute\fR
- primitive;
- it resembles a ``jump'' machine instruction
- rather than a subroutine call.
- .s2
- 5.4 Process synchronization
- .es
- Another process control system call
- .dc
- processid = wait\|(\|\|)\|
- .ec
- causes its caller to suspend
- execution until one of its children has completed execution.
- Then \fIwait\fR returns the \fIprocessid\fR of the terminated process.
- An error return is taken if the calling process has no
- descendants.
- Certain status from the child process
- is also available.
- .s2
- 5.5 Termination
- .es
- Lastly,
- .dc
- exit\|(\|status\|)\|
- .ec
- terminates a process,
- destroys its image,
- closes its open files,
- and generally obliterates it.
- When the parent is notified through
- the \fIwait\fR primitive,
- the indicated \fIstatus\fR is available
- to the parent.
- Processes may also terminate as a result of
- various illegal actions or user-generated signals
- (\(sc7 below).
-