Exercise 3 ========== Using Spread, you should write a tool that reliably multicasts messages between n processes that reside on the same Spread network. The tool consists of only one program: mcast - the tool's process. The mcast process should be run as follows: mcast The num_of_processes indicates how many mcast processes will be run. The maximal number of num_of_processes is 10. The num_of_messages indicates how many messages THIS mcast has to initiate. This number may be on the order of 100000. Each message should contain the creating process_index, the message_index, and a random number, each stored in a 4 bytes integer. The random number is an integer, picked at the time of the creation of the message, randomly selected from the range 1-1,000,000. In addition, each message will include 1300 additional payload bytes. Therefore, each message should contain exactly 1312 bytes. The message_index is a per-process counter that is incremented each time a process initiates a message. The requirement is for all the processes to deliver all messages in AGREED order. On delivery of a message the mcast should write to a file, in ASCII format, the message id as follows: fprintf( fd, "%2d, %8d, %8d\n", message->process_index, message->message_index, message->random_number ); The output file name will be .out After all the mcast processes have been run, they get membership messages and wait until all of them are running (thus, no need for a separate start_mcast program). To benchmark your program you should run a test with 8 machines where only 6 of them send 160000 messages each, for a total of 960000 messages, and time how long the test takes. The other machines will get 0 as . Spread will already be running on the ugrad machines on its default port, 4803. We have two separate Spread networks running on ugrad1-ugrad12 as well as ugrad13-ugrad24. You can develop your program on either of these networks. A sample class_user.c program, needed spread libraries and a sample makefile are provided in the ~cs417/exercises/ex3 directory on the ugrad lab. Submission: ---------- A final submission of documentation, writeup and code. Due Wednesday, November 3rd at 11pm. This is an electronic submission. See instructions below. This final report should also include a brief discussion of the performance results you achieved. The programs should be complete, sound, and well-documented. A makefile that compiles and builds your program with clearly documented options (if needed) is required. You should make a tar file named exactly as your login account with all your documents and code (DO NOT include core files, object files, or any subdirectories) and email the tar file as an attachment to cs417@cs.jhu.edu. The subject of the email should be "Exercise 3 submission ", and in the body of the email write the names of the students that worked on the exercise.