Signals and Alarms

Download Report

Transcript Signals and Alarms

Task Control:
Signals and Alarms
Chapter 7 and 8
Pag
e1
B. RAMAMURTHY
Amrita-UB-MSES-2013-12
5/18/2013
Multi-tasking
Pag
e2
 How to create multiple tasks? Ex: Xinu create()
 How to control them?
 ready()
 resched()
 How to synchronize them? How to communicate among
them?
 XINU: semaphores, send and receive messages
 How to (software) interrupt a process? signals
Amrita-UB-MSES-2013-12
5/18/2013
Examples
Pag
e3
 Consider g++ myProg.c
 You want to kill this process after you started the compilation..hit
cntrl-C
 Consider execution of a program called “badprog”
>badprog
It core dumps .. What happened? The error in the program results in a
signal to kernel to stop and dump the offending code
 Consider “kill –p <pid>”
 Kill issues a termination signal to the process identified by the pid
Amrita-UB-MSES-2013-12
5/18/2013
Linux Processes
Pag
e4
 Similar to XINU Procs.
 Lets understand how to create a linux process and
control it.
 Chapter 7 and 8 of text book.
 Chapter 7 : multi-tasking
 Chapter 8: Task communication and synchronization
Amrita-UB-MSES-2013-12
5/18/2013
Process creation
Pag
e5
• Four common events that lead to a process
creation are:
1) When a new batch-job is presented for execution.
2) When an interactive user logs in / system
initialization.
3) When OS needs to perform an operation (usually
IO) on behalf of a user process, concurrently with
that process.
4) To exploit parallelism an user process can spawn
a number of processes.
Amrita-UB-MSES-2013-12
5/18/2013
Termination of a process
Pag
e6
• Normal completion, time limit exceeded, memory
•
•
•
•
•
unavailable
Bounds violation, protection error, arithmetic error,
invalid instruction
IO failure, Operator intervention, parent termination,
parent request, killed by another process
A number of other conditions are possible.
Segmentation fault : usually happens when you try
write/read into/from a non-existent
array/structure/object component. Or access a pointer to a
dynamic data before creating it. (new etc.)
Bus error: Related to function call and return. You have
messed up the stack where the return address or
parameters are stored.
Amrita-UB-MSES-2013-12
5/18/2013
Process control
Pag
e7
 Process creation in unix is by means of the system call fork().
 OS in response to a fork() call:






Allocate slot in the process table for new process.
Assigns unique pid to the new process..
Makes a copy of the process image, except for the shared
memory.
both child and parent are executing the same code
following fork()
Move child process to Ready queue.
it returns pid of the child to the parent, and a zero
value to the child.
Amrita-UB-MSES-2013-12
5/18/2013
Process control (contd.)
Pag
e8
 All the above are done in the kernel mode in the process
context. When the kernel completes these it does one of the
following as a part of the dispatcher:
 Stay in the parent process. Control returns to the user
mode at the point of the fork call of the parent.
 Transfer control to the child process. The child process
begins executing at the same point in the code as the
parent, at the return from the fork call.
 Transfer control another process leaving both parent and
child in the Ready state.
Amrita-UB-MSES-2013-12
5/18/2013
Process Creation (contd.)
 Parent process create children processes, which, in turn create
other processes, forming a tree of processes
 Generally, process identified and managed via a process
identifier (pid)
 Resource sharing
 Parent and children share all resources
 Children share subset of parent’s resources
 Parent and child share no resources
 Execution
 Parent and children execute concurrently
 Parent waits until children terminate
Amrita-UB-MSES-2013-12
Page
9
5/18/2013
Process Termination
 Process executes last statement and asks the operating system
to delete it (exit)
 Output data from child to parent (via wait)
 Process’ resources are deallocated by operating system
 Parent may terminate execution of children processes (abort)
 Child has exceeded allocated resources
 Task assigned to child is no longer required
 If parent is exiting
 Some operating system do not allow child to continue if
its parent terminates
 All children terminated - cascading termination
Amrita-UB-MSES-2013-12
Page
10
5/18/2013
Example Code
Pag
e 11
1.
int retVal;
2.
3.
printf(" Just one process so far\n");
printf(" Invoking/Calling fork() system call\n");
4.
retVal = fork(); /* create new process*/
5.
6.
if (retVal == 0)
printf(" I am the child %d \n",getpid());
7.
8.
else if (retVal > 0)
printf(" I am the parent, child has pid %d \n", retVal);
9.
10.
else
printf(" Fork returned an error %d \n", retVal);
Amrita-UB-MSES-2013-12
5/18/2013
Input/output Resources
Pag
e 12
 What is standard IO?
 These are resources allocated to the process at
the time of creation:
 From Wikipedia/Standard_streams
Amrita-UB-MSES-2013-12
5/18/2013
Signals
Pag
e 13
 Signals provide a simple method for transmitting software







interrupts to UNIX process
Signals cannot carry information directly, which limits their
usefulness as an general inter-process communication
mechanism
However each type of signal is given a mnemonic name; Ex:
SIGINT
See signal.h for others
SIGHUP, SIGINT, SIGILL, SIGTRAP, SIGFPE, SIGKILL
SIGALRM (sent by kernel to a process after an alarm timer
has expired)
SIGTERM
signal (signal id, function) simply arms the signal
Amrita-UB-MSES-2013-12
5/18/2013
Signal
Value
Action Comment
------------------------------------------------------------------------SIGHUP
1
Term Hangup detected on controlling terminal
or death of controlling process
SIGINT
2
Term Interrupt from keyboard
SIGQUI
3
Core Quit from keyboard
SIGILL
4
Core Illegal Instruction
SIGABR
6
Core Abort signal from abort(3)
SIGFP
8
Core Floating point exception
SIGKILL 9
Term Kill signal
SIGSEG
11
Core Invalid memory reference
SIGPIPE 13
Term Broken pipe: write to pipe with no readers
SIGALRM 14
Term Timer signal from alarm(2)
SIGTERM 15
Term Termination signal
SIGUSR1
30,10,16 Term User-defined signal 1
SIGUSR2
31,12,17 Term User-defined signal 2
SIGCHLD
20,17,18 Ign
Child stopped or terminated
SIGCONT
19,18,25 Cont Continue if stopped
SIGSTOP
17,19,23 Stop Stop process
SIGTSTP
18,20,24 Stop Stop typed at tty
SIGTTIN
21,21,26 Stop tty input for background process
SIGTTOU
22,22,27 Stop tty output for background process
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
Amrita-UB-MSES-2013-12
Page
14
5/18/2013
Realtime signals
Pag
e 15
 Linux supports real-time signals as originally defined
in the POSIX.1b real-time extensions (and now
included in POSIX.1-2001). Linux supports 32 realtime signals, numbered from 32 (SIGRTMIN) to 63
(SIGRT- MAX)
 Main difference is that these are queued and not lost.
 Realtime signals are delivered in guaranteed order.
Amrita-UB-MSES-2013-12
5/18/2013
Intercept Signals
Pag
e 16
Task
1
Task
2
Two essential parameters are destination process identifier
and the signal code number: kill (pid, signal)
Signals are a useful way of handling intermittent data arrivals or rare error
conditions.
Amrita-UB-MSES-2013-12
5/18/2013
Handling Signals
Pag
e 17
 Look at the examples:
 Catching SIGALRM
 Ignoring SIGALRM
 sigtest.c
 sigHandler.c
 pingpong.c
 See /usr/include/sys/iso/signal_iso.h for signal
numbers
Amrita-UB-MSES-2013-12
5/18/2013
Signals and Alarms
Pag
e 18
#include <signal.h>
unsigned int alarm( unsigned int seconds );
alarm(a); will start a timer for a secsonds and will interrupt the
calling process after a secs.
time(&t); will get you current time in the variable t declared as
time_t t
ctime(&t); will convert time to ascii format
Alarm has a sigaction function that is set for configuring the alarm
handler etc.
sigaction(SIGALRM, &act, &oldact) ; the third paramter is for old
action configuration
Amrita-UB-MSES-2013-12
5/18/2013
Sample programs
Pag
e 19
 Starting new tasks in linux: page 165
 Programs in pages: 174-180 on signals and alarms
 See demos directory for first
 See page 175 for the second program
 See page 178 … for the third program
Amrita-UB-MSES-2013-12
5/18/2013
Pingpong
Pag
e 20
Parent
PSIG 43
Child
CSIG 42
Amrita-UB-MSES-2013-12
5/18/2013
Observe in pingpong.c
Pag
e 21
 pause(): indefinite
 sleep(): sleep is random/finite time
 While loop
 Signal handlers
 Re-arming of the signals
Amrita-UB-MSES-2013-12
5/18/2013
Volatile
Pag
e 22
 A variable should be declared volatile whenever its
value could change unexpectedly. In practice, only
three types of variables could change:



Memory-mapped peripheral registers
Global variables modified by an interrupt service routine
Global variables within a multi-threaded application
Amrita-UB-MSES-2013-12
5/18/2013
Summary
Pag
e 23
 We studied signals and alarms
 Their specification and example programs
 Signals in pthread is different. We will discuss this
next class.
Amrita-UB-MSES-2013-12
5/18/2013