[SOLVED] CS CMPUT 379 (E.S. Elmallah)

$25

File Name: CS_CMPUT_379_(E.S._Elmallah).zip
File Size: 263.76 KB

5/5 - (1 vote)

Interprocess Communication: Signals and Pipes
1. Signals
1.1 Signal Environments
1.2 Experiments with signal()

Copyright By Assignmentchef assignmentchef

1.3 Experiments with POSIX.1 sigaction()
2.1 Named Pipes (FIFOS)
3. Concurrent servers: A First Look 3.1 Example: POLL()
CMPUT 379 (E.S. Elmallah)
1. Signals
Signals are viewed as software interrupts : they provide a way of handling asynchronous events.
Every signal has a name, and a default action: T = terminate, TC = terminate and core dump, I = ignore, S = stop
o keyboard generated
SIGSTP [ctl-z] keyboard stop signal S SIGINT [ctl-c] interrupt T
SIGQUIT [ctl- ] quit signal TC
CMPUT 379 (E.S. Elmallah)

o hardware exceptions
SIGSEGV SIGFPE
segmentation fault TC
floating point exception TC bus error TC
o software conditions
SIGCHLD change in child status I SIGALARM timer alarm T SIGHUP hangup T
CMPUT 379 (E.S. Elmallah)
Terminology: a signal is called
o posted (generated, or sent ) if the event that causes
the signal has occurred,
o delivered (or caught ) if the associated action is taken,
o pending if it has been posted but not delivered, or blocked,
o blocked if it is pending because the target process does not want it delivered
Signal disposition:
o Let the default apply
o Ignore the signal (except SIGKILL and SIGSTOP ) o Catch it by a user defined function (signal handler).
CMPUT 379 (E.S. Elmallah)

1.1 Signal Environments
Currently, one can distinguish 4 signal environments o The Traditional System-V Signal Environment
o The BSD4.3 Signal Environment
o The System V.3 (SVR3) Environment
o The POSIX Signal Environment
CMPUT 379 (E.S. Elmallah)
The Traditional System-V Signal Environment
o dates back to V7 research UNIX, provides an easy
interface: signal(), pause(), SIG_DFL, SIG_IGN o has some limitations that causes unreliable
behaviour:
signal handlers are reset to SIG_DFL after a signal is received
slow system calls are interrupted (causing error return) when a signal is delivered
no support for blocking
CMPUT 379 (E.S. Elmallah)

The BSD4.3 Signal Environment
o provides a more reliable environment
o modifies the V7 signal handling by providing
signal handling remains installed during, and after delivery
signal masking, and blocking during the duration of signal handling
o Interface: sigvec() , sigstack() , siginterrupt() , sigsetmask() , sigpause()
CMPUT 379 (E.S. Elmallah)
The System V.3 (SVR3) Environment
o uses a similar approach to BSD4.3
o Interface: sigset() , sighold() , sigrelse(), sigignore() , sigpause()
The POSIX Signal Environment
o supports all features in BSD4.3 and SVR3
o does not standardize all options; the existing implementations are largely identical
o the interface provides: sigaction() , sigprocmask() , sigemptyset(), sigfillset() , sigaddset() , sigdelset(), sigismember() , sigpending()
CMPUT 379 (E.S. Elmallah)

1.2 Experiments with signal()
On SunOS 5.8: signal() is defined as:
#include
void (*signal (int sig, void (*disp)(int))) (int);
CMPUT 379 (E.S. Elmallah)
Example: signal()
#include , , int i;
void quit(int code) {
fprintf(stderr,
Interrupt (code= %d, i= %d)
, code,i); }
int main (void) { signal(SIGQUIT,quit); for (i= 0; i < 9e7; i++)if (i % 10000 == 0) putc(‘.’, stderr); return(0); CMPUT 379 (E.S. Elmallah)o you can also use kill -QUIT pid_number o can you interrupt several times?CMPUT 379 (E.S. Elmallah) #include , , , , jmp_buf return_pt;
void quit (int code) {
char answer;
fputs(
restart the loop?, stdout); answer= fgetc(stdin); if (answer == y) longjmp(return_pt,1);
main (void) {
if (setjmp(return_pt) == 0) signal(SIGQUIT,quit); printf (
loop begins:
);
for (i= 0; i < 9e7; i++)if (i % 10000 == 0) { putchar(‘.’); fflush(stdout); } puts( ”
Finished!”); CMPUT 379 (E.S. Elmallah)1.3 Experiments with POSIX.1 sigaction() Defined as:int sigaction (int signo, struct sigaction *act, struct sigaction *oact);signo specifies the signal to be caughtact points to a structure specifying the new action to be takenoact points to a structure storing the previous handler sigaction returns 0 if OK & -1 on error actions remain in effect, unless explicitly changedCMPUT 379 (E.S. Elmallah) struct sigaction:int sa_flags;void (*sa_handler)(int);sigset_t sa_mask;void (*sa_sigaction) (int, siginfo_t *, void *); }; struct siginfo_t :int int int pid_t uid_tsi_signo si_errno si_codesi_pid si_uid// signal number // error number // signal code// sending process ID // sending user ID CMPUT 379 (E.S. Elmallah) On entry to the handler,o sa_mask is added to the to the set of signals alreadybeing blocked when the signal is delivered.o In addition, the signal that caused the handler to be executed will also be blocked. If sa_flags[SA_SIGINFO] = 1 the senders si_pid is returned in a siginfo_t structure.CMPUT 379 (E.S. Elmallah) Example: sigaction()#include , , int i;
struct sigaction oldAct, newAct;
void quitHandler (int sigNo, siginfo_t *sigInfo) {
fprintf (stderr,
signo= %d, sender= %d, i= %d)
,
sigNo, sigInfo->si_pid, i);
CMPUT 379 (E.S. Elmallah)

int main (void) {
newAct.sa_handler = quitHandler; newAct.sa_flags |= SA_SIGINFO;
// omit error checking now
sigaction (SIGQUIT, &newAct, &oldAct); for (i= 0; i < 9e7; i++)if (i % 10000 == 0) putc(., stderr); sigaction(SIGQUIT,&oldAct,&newAct); return(0); CMPUT 379 (E.S. Elmallah) CS: assignmentchef QQ: 1823890830 Email: [email protected]

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] CS CMPUT 379 (E.S. Elmallah)
$25