Process Table

advertisement
Processes
Process Control
Unix manages multiple concurrent processes. Each process has memory allocation for its
exclusive use, referred to at the address space of the process and is composed of:
 Text – Machine instructions for procedures and function in the program
 Data – that values of variables, arrays, and structures
 Stack – to manage function calls, returns, parameter passing, returned value
Each process is also assign system resources necessary for the UNIX kernel (the central part of
the operating system) to manage.
Each process is represented by an entry in the process table which is manipulated by the kernel
to manage all processes.
A process usually goes through a number of states:




Running – The process is executing
Asleep – Waiting for an event to occur, e.g., I/O completion by a peripheral device
Ready – Scheduled for CPU service
Zombie – Process has terminated. Last state of a process
Process Table
A system-wide process table is maintained in the UNIX kernel to control all processes. There is
one table entry for each existing process. Each process entry contains info such as:









PID process ID
UID
State
Event
Size
Locations
Priority
Signals
Accounting
For more details see table on page 348.
1
Displaying process status
To display information about existing processes use the UNIX command:
ps
To display all processes use option –a. Use option –l for long.
Process Creation: fork
The fork system call is used inside a C program to create another process. The process that
calls the fork is called the parent process and the newly created process is called the child
process. After the fork call the child and parent processes run concurrently. To invoke fork
use:
int pid;
pid = fork();
The child process is a copy of the parent process except for the following:
1. The child process has a unique PID (process identification)
2. The child process has a different PIPD (parent process identification = PID or creator)
The fork is called by the parent, but returns in both the parent and child. In the parent it returns
the PID of the child process, whereas in the child it returns 0. If fork fails, no child process is
created and it returns –1.
Example C program using fork.
http://www.ececs.uc.edu/~berman/620/fork.c
As a second example using fork, the following program uses the child to compute the partial
sums and the parent to compute the partial product from an array Numbers of integers. Both
child and parent have access to their own copies of the Numbers and other variables such as
Answer.
http://www.ececs.uc.edu/~berman/620/sumprod.c
2
Program Execution: execv
An execv (exc1, execve) call transforms the calling process into a new process
constructed from an executable file (either an a.out file of an executable text file).
Example C program to implement a simple shell using fork and execv calls.
http://www.ececs.uc.edu/~berman/620/background.c
Synchronization of Parent and Child Processes
The parent process can wait for the child process to terminate before proceeding further using
the system call:
#include <sys/wait.h>
int pid = wait(union wait *status)
Interprocess Communication (IPC)
The C library function popen creates a child process to execute the sh cmd_string and
extablishes a read or write stream (FILE *) to the child
FILE *popen(char *cmd_string, char mode)
where mode is
“r” for reading the standard output of given command
“w” for writing the standard input of given command
The stream created by popen can be shut down by
int pclose(FILE *stream)
Example C program: application of popen that counts total number of words in a list of files.
http://www.ececs.uc.edu/~berman/620/count.c
3
Interprocess Communication with pipe
A pipe is a direct in memory I/O channel between processes.
int pipe(int FileDescriptors[2])
establishes a pipe with a buffer and two descriptors
FileDescriptors[0] (for reading the pipe)
FileDescriptors[1] (for writing the pipe)
Example C program: A parent process writes the message “Hello Dolly” to a child process
through a pope.
http://www.ececs.uc.edu/~berman/620/hellodolly.c
4
Download