Team BBL
Previous Page Next Page

Exercises

14.1

Write a test program that illustrates your system's behavior when a process is blocked trying to write-lock a range of a file and additional read-lock requests are made. Is the process requesting a write lock starved by the processes read-locking the file?

14.2

Take a look at your system's headers and examine the implementation of select and the four FD_ macros.

14.3

The system headers usually have a built-in limit on the maximum number of descriptors that the fd_set data type can handle. Assume that we need to increase this limit to handle up to 2,048 descriptors. How can we do this?

14.4

Compare the functions provided for signal sets (Section 10.11) and the fd_set descriptor sets. Also compare the implementation of the two on your system.

14.5

How many types of information does getmsg return?

14.6

Implement the function sleep_us, which is similar to sleep, but waits for a specified number of microseconds. Use either select or poll. Compare this function to the BSD usleep function.

14.7

Can you implement the functions TELL_WAIT, TELL_PARENT, TELL_CHILD, WAIT_PARENT, and WAIT_CHILD from Figure 10.24 using advisory record locking instead of signals? If so, code and test your implementation.

14.8

Determine the capacity of a pipe using nonblocking writes. Compare this value with the value of PIPE_BUF from Chapter 2.

14.9

Recall Figure 14.28. Determine the break-even point on your system where using writev is faster than copying the data yourself and using a single write.

14.10

Run the program in Figure 14.32 to copy a file and determine whether the last-access time for the input file is updated.

14.11

In the program from Figure 14.32, close the input file after calling mmap to verify that closing the descriptor does not invalidate the memory-mapped I/O.

    Team BBL
    Previous Page Next Page