11/15: Advanced waiting
One of our goals for this unit is that you be comfortable with new system calls, as well as the system calls we’ve explicitly taught. To that end, this exercise asks you to solve the “waitlimit” problem from class using advanced system calls you learn from manual pages and Internet resources. Your handout code is in
signalfd system call implements “synchronous” signal delivery. It essentially implements a signal pipe entirely inside the kernel, reducing the number of system calls required to receive a signal. Read the manual page for
signalfd (and browse the Internet for interesting links), then change
waitlimit-signalfd.c to solve the waitlimit problem using
signalfd instead of a signal pipe.
Solution 2: Signal blocking
The kernel allows processes to block most signals so they aren’t delivered immediately. (This is analogous to disabling interrupts in the kernel.) The relevant system calls include
pselect, and they use library calls such as
sigaddset to manipulate blocked-signal masks. It is possible to use signal blocking and
pselect to solve the waitlimit problem without a signal pipe. Change
waitlimit-pselect.c to do this.
This is a little harder than
signalfd, so make sure you look online for resources. For instance: An article on pselect
When you're done
Please complete this survey.