0% found this document useful (0 votes)
54 views

Operating Systems 5

The document discusses process management concepts in operating systems. It covers process scheduling with long term, short term, and medium term schedulers. It also discusses process creation using fork(), process termination, and replacing a process image using exec(). Sample code is provided to demonstrate using fork() and exec() to create a new process that executes another program.

Uploaded by

ayesha abid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
54 views

Operating Systems 5

The document discusses process management concepts in operating systems. It covers process scheduling with long term, short term, and medium term schedulers. It also discusses process creation using fork(), process termination, and replacing a process image using exec(). Sample code is provided to demonstrate using fork() and exec() to create a new process that executes another program.

Uploaded by

ayesha abid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 34

Operating

Systems
Lecture 6
Agenda for Today
 Process scheduling concepts
 Process creation and termination
 Process management in UNIX/Linux—
system calls: fork, exec, wait, exit
 Sample codes
 Recap of the lecture
Schedulers
 Long term scheduler
 Short term scheduler
 Medium term scheduler
Queues in a Computer
System
Long Term Scheduler
 Long-term scheduler (or job scheduler) –
selects processes from the job pool to be
brought into the ready queue.
 Long-term scheduler is invoked very
infrequently (seconds, minutes)  (may be
slow).
 The long-term scheduler controls the degree
of multiprogramming.
 More processes, smaller percentage of time
each process is executed
Short Term Scheduler
 Short-term scheduler (or CPU scheduler) –
selects which process should be executed
next and allocates it the CPU through the
dispatcher.
 Short-term scheduler is invoked very frequently
(milliseconds)  (must be fast).
 Invoked when following events occur
 CPU slice of the current process finishes
 Current process needs to wait for an event
 Clock interrupt
 I/O interrupt
 System call
 Signal
Medium Term
Scheduler
 Also known as swapper
 Selects an in-memory process and swaps
it out to the disk temporarily
 Swapping decision is based on several
factors
 Arrival of a higher priority process but no
memory available
 Poor mix of jobs
 Memory request of a process cannot be met
Addition of Medium
Term Scheduling
Context Switch
 When CPU switches to another process,
the system must save the state (context)
of the ‘current’ (old) process and load the
saved state for the new process.
 Context-switch time is overhead; the
system does no useful work while
switching.
 Time dependent on hardware support;
typically in microseconds
Process Creation
 Parent process create children processes,
which, in turn create other processes,
forming a tree of processes.
 Resource sharing
 Parent and children share all resources.
 Children share a subset of parent’s resources.
 Parent and child share no resources.
 Execution
 Parent and children execute concurrently.
 Parent waits until children terminate.
Process Creation …
 Address space
 Child duplicate of parent.
 Child has a program loaded onto it.
 UNIX examples
 fork system call creates a new process
 exec system call used after a fork to
replace the process’ memory image with
a new executable.
Processes Tree on a
UNIX System
Process Termination
 Process executes the last statement and
requests the operating system to terminate
it (exit).
 Output data from child to parent (via wait).
 Process resources are deallocated by the
operating system, to be recycled later.
Process Termination …
 Parent may terminate execution of
children processes (abort).
 Child has exceeded allocated resources
(main memory, execution time, etc.).
 Parent needs to create another child but has
reached its maximum children limit
 Task performed by the child is no longer
required.
 Parent exits.
 Operating system does not allow child to continue
if its parent terminates.
 Cascaded termination
Process Management in
UNIX/Linux
Important process-related UNIX/Linux
system calls
 fork
 wait
 exec
 exit
fork()
 When the fork system call is executed, a new
process is created which consists of a copy of the
address space of the parent.
 This mechanism allows the
parent process to communicate easily with the child
process.
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
fork() ...
 The return code for fork is zero for the child process
and the process identifier of child is returned to the
parent process.
 On success, both processes continue execution at the
instruction after the fork call.
 On failure, -1 is returned to the parent process and
errno is set appropriately to indicate the reason of
failure; no child is created
fork()—Sample Code
main()
{
int pid; • Pid 1234
Parent Process pid = 1234

...
pid = fork();
if (pid == 0) {
/* Code for child */ Child Process pid = 0
... • Pid=0
}
else {
/* Code for parent */
...
}
Kernel Space
...
}
fork()—Inherits from
the Parent
The child process inherits the following attributes
from the parent:
 Environment
 Open file descriptor table
 Signal handling settings
 Nice value
 Current working directory
 Root directory
 File mode creation mask (umask)
 Etc.
fork()—Child Differs
from the Parent
The child process differs from the parent
process:
 Different process ID (PID)
 Different parent process ID (PPID)
 Child has its own copy of parent’s file
descriptors
 Etc.
fork()—Reasons for
Failure
 Maximum number of processes allowed to execute
under one user has exceeded
 Maximum number of processes allowed on the
system has exceeded
 Not enough swap space
wait()
 The wait system call suspends the
calling process until one of its
immediate children terminates, or until
a child that is being traced stops
because it has hit an event of interest.
 wait returns prematurely if a signal is
received. If all children processes
stopped or terminated prior to the call
on wait, return is immediate.
Synopsis of wait()
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *stat_loc);

<sys/types.h>:
/usr/include/sys/types.h
wait() ...
 If the call is successful, the
process ID of the terminating child
is returned.
 If parent terminates all its children
have assigned as their new
parent, the init process. Thus the
children still have a parent to
collect their status and execution
statistics.
wait() ...
 Zombie process—a process that
has terminated but whose exit
status has not yet been received
by its parent process or by init.
Sample Code—fork
#include <stdio.h>
void main()
{
int pid, status;

pid = fork();
if(pid == -1) {
printf(“fork failed\n”);
exit(1);
}
Sample Code—fork
if(pid == 0) { /* Child */
printf(“Child here!\n”);
exit(0);
}
else { /* Parent */
wait(&status);
printf(“Well done kid!\n”);
exit(0);
}
}
Semantics of fork

fork

P
exec()
 Typically the exec system call is used
after a fork system call by one of the
two processes to replace the process’
memory space with a new executable
program.
 The new process image is
constructed from an ordinary,
executable file.
exec()
 There can be no return from a
successful exec because the
calling process image is overlaid
by the new process image
Synopsis of exec()

#include <unistd.h>
int execlp (const char *file, const
char *arg0, ..., const char *argn,
(char *)0);
Sample Code—fork
and exec
#include <stdio.h>
void main()
{
int pid, status;

pid = fork();
if(pid == -1) {
printf(“fork failed\n”);
exit(1);
}
Sample Code—fork
and exec
if(pid == 0) { /* Child */
if (execlp(“/bin/ls”, “ls”, NULL)< 0) {
printf(“exec failed\n”);
exit(1);
}
}
else { /* Parent */
wait(&status);
printf(“Well done kid!\n”);
exit(0);
}
}
Semantics of fork
parent parent parent

P P P

fork

P P ls ls
exec
child child child
1 2 3

You might also like