Homework 2
cs550 Operating Systems
5 points
Due Wednesday, Sept. 24, 2014 at the beginning of class

1. Write a program in C that uses two different threads to increment and decrement the same static integer one thousand times each, respectively.  You must write a different function for each thread.  Run this program many times (at least ten).  Is the output ever different from run to run?

2. Write a C program using MPI that uses two processes - one client and one server.  This program should send seven messages from the server and receive seven messages in the client.  Any additional processes that are created should print a statement indicating that they are inactive.  Additionally, write a SLURM batch script for this program.

3. Read about pipes in section 3.6.3 of your textbook.  Try using some pipes with commands on Littlefe.  For example, try ls -al | less and ps | grep bash.  Using the sample pipe program provided in the textbook on pages 143-144, modify the program to write an array of doubles to the pipe in the parent process.  The child process should determine if those doubles are positive or negative and print appropriate output.

4. Write a program that sends data in a ring of processes (from process 0 to 1 to 2 . . . to process n-1 and back to process 0) using C and MPI.  Part of the data sent from one process to the next must include an identifier (such as the rank) from the sending process.

5. Write a program that uses two threads (in addition to the main thread) to compute the sum of all elements of a double array.  The main thread should acquire the data as input and start two worker threads.  The worker threads should sum the first and last halves of the array elements.  After the worker threads complete their tasks, the main thread should sum the two results and provide the sum as output.