Process Management: Instructor: Asst Prof Mobeena Shahzad BESE 24 (A, B, C)
Process Management: Instructor: Asst Prof Mobeena Shahzad BESE 24 (A, B, C)
BESE 24 (A,B,C)
2 Process Concept
Process – a program in execution
process execution must progress in sequential fashion.
No parallel execution of instructions of a single process
Process is the dynamic execution context of a program
Multiple parts
The program code, also called text section
Current activity including program counter, processor registers
Stack containing temporary data
Function parameters, return addresses, local variables
Goal -- Maximize CPU use, quickly switch processes onto CPU core
Context-switch time is pure overhead; the system does no useful work while
switching
The more complex the OS and the PCB the longer the context switch
Time dependent on hardware support
Some hardware provides multiple sets of registers per CPU multiple contexts
loaded at once
15 Multitasking in Mobile Systems
Some mobile systems (e.g., early version of iOS) allow only one process to run,
others suspended
Due to screen real estate, user interface limits iOS provides for a
Single foreground process- controlled via user interface
Multiple background processes– in memory, running, but not on the display, and with
limits
Limits include single, short task, receiving notification of events, specific long-running
tasks like audio playback
The variable values and program counter (PC) are copied from the parent to the
new child process
The return value of fork is different in the parent and child process
In the parent process, the return value is the child process Id
In the child process, the return value is 0
This is the only difference between the parent and the child process
The parent can wait for the child to terminate by executing wait system call OR the
parent can continue to execute
The child often starts a new and different program within itself, via a call to exec
#include <sys/types.h>
#include <studio.h> C Program
21 #include <unistd.h> Forking Separate
int main()
{ Process
pid_t retValue;
re nt
else if (retValue > 0) { /* parent process */ Pa
/* parent will wait for the child */
wait (NULL);
printf ("Child Complete");
}
return 0;
}
int main()
{
22 pid_t retValue; C Program
Forking
retValue = fork(); /* fork another process */ Separate
Process
if (retValue < 0) { /* error occurred */
printf ("Fork Failed");
return 1;
}
else if (retValue == 0) { /* child process */
printf (“Child Process Created");
execlp ("/bin/ls", "ls", NULL);
}
else { /* parent process */
/* parent will wait for the child */
wait (NULL);
printf ("Child Complete");
}
return 0;
}
23
Process Creation – Using fork()
pid_t fork(); -- copy the current process
New process has different pid
When = 0:
Running in new Child process
When < 0:
Error! Must handle somehow
Running in original process
re nt
Pa
#include <stdlib.h>
#include <stdio.h> Example
#include <unistd.h>
#include <sys/types.h>
if (cpid > 0) {
for (i = 0; i < 5; i++) {
printf("Parent: %d\n", i);
}
} else if (cpid == 0) {
for (i = 0; i > -5; i--) {
printf("Child: %d\n", i);
}
}
STARTUPINFO si;
PROCESS_INFORMATION pi; Process
31 ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
Creation
ZeroMemory( &pi, sizeof(pi) ); // Start the child process. using WIN32
if( !CreateProcess( NULL, // No module name (use command line).
API
"C:\\WINDOWS\\system32\\mspaint.exe", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return -1;
}
WaitForSingleObject( pi.hProcess, INFINITE ); // Wait until child process exits.
STARTUPINFO si;
PROCESS_INFORMATION pi;
32
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
BOOL retValue;
if( retValue == 0)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return -1;
}
Parent may terminate the execution of children processes using the abort()
system call. Some reasons for doing so:
Child has exceeded allocated resources
Task assigned to child is no longer required
The parent is exiting, and the operating systems does not allow a child to continue if
its parent terminates
34 Process Termination
Some operating systems do not allow child to exists if its parent has terminated.
If a process terminates, then all its children must also be terminated.
cascading termination. All children, grandchildren, etc., are terminated.
The termination is initiated by the operating system.
The parent process may wait for termination of a child process by using the
wait()system call. The call returns status information and the pid of the
terminated process
pid = wait(&status);
Cooperating process can affect or be affected by other processes, including sharing data
Reasons for cooperating processes:
Information sharing
Computation speedup
Modularity
Convenience
Two variations:
unbounded-buffer places no practical limit on the size of the buffer:
Producer never waits
Consumer waits if there is no buffer to consume
bounded-buffer assumes that there is a fixed buffer size
Producer must wait if all buffers are full
Consumer waits if there is no buffer to consume
40 IPC – Shared Memory
The communication is under the control of the users processes not the
operating system.
Major issues is to provide mechanism that will allow the user processes to
synchronize their actions when they access shared memory.
41 Bounded-Buffer – Shared-Memory Solution
Shared data
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
Implementation issues:
How are links established?
Can a link be associated with more than two processes?
How many links can there be between every pair of communicating processes?
What is the capacity of a link?
Is the size of a message that the link can accommodate fixed or variable?
Is a link unidirectional or bi-directional?
45 Implementation of Communication Link
Physical:
Shared memory
Hardware bus
Network
Logical:
Direct or indirect
Synchronous or asynchronous
Automatic or explicit buffering
46 Direct Communication
Mailbox sharing
P1, P2, and P3 share mailbox A
P1, sends; P2 and P3 receive
Who gets the message?
Solutions
Allow a link to be associated with at most two processes
Allow only one process at a time to execute a receive operation
Allow the system to select arbitrarily the receiver. Sender is notified who the
receiver was.
50 Synchronization
Message passing may be either blocking or non-blocking
send(next_produced);
}
Consumer
message next_consumed;
while (true) {
receive(next_consumed)
“Process Management”