![Page 1: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/1.jpg)
CS307 Operating Systems
Project 2: Inter-Process Communication and Synchronization
Fan WuDepartment of Computer Science and Engineering
Shanghai Jiao Tong University
Fall 2011
![Page 2: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/2.jpg)
1.2Operating Systems
Objectives
Solve inter-process communication problems during concurrent execution of processes.
Use Posix Pthread library for concurrency.
Use semaphores.
![Page 3: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/3.jpg)
1.3Operating Systems
Enviroment
VMWare (optional)
Ubuntu Linux (recommended)
![Page 4: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/4.jpg)
1.4Operating Systems
What to Submit A“tar” file of your DIRECTORY, containing:
Your makefile Any “.cc”, “.c”, and “.h” files Any “readme” or “.pdf” files asked for in the project A text file containing the runs of your programs for each of the project
parts “testscript” Do not submit ALL runs you have done, just the output required to
demonstrate a successful (or unsuccessful) run If you cannot get your program to work, submit a run of whatever
you can get to work as you can get partial credit Copy & paste, or use “>” to redirect output to a file
DO NOT SUBMIT your object or executable files, remove them before you pack your directory
![Page 5: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/5.jpg)
1.5Operating Systems
How to Submit
Remove your “.o” files and executablesrm *.orm basic_serverrm basic_client
Pack your entire directory (including the directory)tar –cvf Prj2+StudentID.tar project1
Send your Prj2+StudentID.tar file to [email protected]
![Page 6: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/6.jpg)
1.6Operating Systems
For Help?
Teaching Assistant Zuying Wei
Email: [email protected]
Mengjie Yu
Email: [email protected]
Instructor Fan Wu
Office: 3-537 SEIEE Building
Office hours: 1~2PM Mon&Wed
![Page 7: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/7.jpg)
1.7Operating Systems
Resources
Unix programming http://users.actcom.co.il/~choo/lupg/tutorials/multi-pro
cess/multi-process.html#%0Ashmem
Posix Thread Programming https://computing.llnl.gov/tutorials/pthreads/
POSIX Semaphores http://www.csc.villanova.edu/~mdamian/threa
ds/posixsem.html
![Page 8: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/8.jpg)
1.8Operating Systems
Larry digs the holes. Moe places a seed in each hole. Curly then fills the hole up.
Moe cannot plant a seed unless at least one empty hole exists.
Curly cannot fill a hole unless at least one hole exists in which Moe has planted a seed.
If there are MAX unfilled holes, Larry has to wait.
There is only one shovel with which both Larry and Curly need to dig and fill the holes, respectively.
Problem 2.1 – Stooge Farmers Problem
Larry digs holesMoe seedsCurly fills the hole
Larry and Curly share a shovel
![Page 9: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/9.jpg)
1.9Operating Systems
Problem 2.1 – General Requirement
Source file: LarryCurlyMoe.c
Executable file: LCMg++ LarryCurlyMoe.c –o LCM –lpthread
Run: LCM Maxnum Maxnum: Max number of unfilled holes.
Sample run: “LCM 5”
![Page 10: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/10.jpg)
1.10Operating Systems
Problem 2.1 – Sample Output> ./LCM 3Maximum number of unfilled holes: 3Begin run.Larry digs another hole #1.Moe plants a seed in a hole #1.Curly fills a planted hole #1.Larry digs another hole #2.Larry digs another hole #3.Moe plants a seed in a hole #2.Curly fills a planted hole #2.Moe plants a seed in a hole #3.Curly fills a planted hole #3.……Larry digs another hole #11.Moe plants a seed in a hole #9.Curly fills a planted hole #9.Larry digs another hole #12.Moe plants a seed in a hole #10.Curly fills a planted hole #10.End run.
![Page 11: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/11.jpg)
1.11Operating Systems
Problem 2.1 – Functions You Will Need
• Header: #include <semaphore.h>
• sem_t: structure of semaphoresem_t Shovel;
• sem_init: initialize semaphoresem_init(&Shovel,0,1);
// set up a binary semaphore to act as a mutex for the critical section "use of shovel", initialize it to 1
• sem_destroy: destroy a semaphoresem_destroy(&Shovel);
![Page 12: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/12.jpg)
1.12Operating Systems
Problem 2.1 – Functions You Will Need
sem_wait: wait for/block on a semaphore sem_post: signal/post on a semaphore
// Have Larry wait until he can use the shovel// [in other words, wait to use the critical resource]sem_wait(&Shovel);// Larry now has the shovel, so dig the hole// [thereby using the critical resource, in this case// it is the global variable “HolesDug”]printf("Larry digs another hole #%i.\n",++HolesDug);// Larry is done with the shovel, so signal on the semaphore// [thereby freeing the critical resource CR and unblocking// a thread/process that is waiting on the CR]sem_post(&Shovel);
![Page 13: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/13.jpg)
1.13Operating Systems
Problem 2.1 – Understanding Semaphore
sem_wait: decrease the value of the semaphore, and if the value is <0, it will BLOCK the thread
sem_post: increase the value of the semaphore, and if the value becomes <= 0, the OS will unblock a blocked thread (a thread who called sem_wait and was blocked)
![Page 14: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/14.jpg)
1.14Operating Systems
Problem 2.1 – Basic Program Flow
1. Create 3 functions called “Larry”, “Curly”, “Moe”
2. Create a few semaphores
3. Initialize the semaphores
4. Create 3 threads, run the three functions from step 1 on each of the threads.
5. Run for AT LEAST 100 steps (so have at least 100 holes filled by Curly)
![Page 15: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/15.jpg)
1.15Operating Systems
Problem 2.1 – What you want to see...
You need to see some interleaving of the functions running on the threads.
At first, one thread will execute and dig some holes, then another will seed the holes, then the other will fill the holes
Then, given enough time, there should be an interleaving showing a dig, a seed, and a fill
![Page 16: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/16.jpg)
1.16Operating Systems
Problem 2.2 – Burger Buddies Problem Cooks, Cashiers, and Customers are each modeled as a
thread. Cashiers sleep until a customer is present. A Customer approaching a cashier can start the order
process. A Customer cannot order until the cashier is ready. Once the order is placed, a cashier has to get a burger from
the rack. If a burger is not available, a cashier must wait until one is
made. The cook will always make burgers and place them on the
rack. The cook will wait if the rack is full. There are NO synchronization constraints for a cashier
presenting food to the customer.
![Page 17: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/17.jpg)
1.17Operating Systems
Problem 2.2 – Burger Buddies Problem
![Page 18: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/18.jpg)
1.18Operating Systems
Problem 2.2 – Sample Output> ./BBC 2 4 41Cooks [2], Cashiers [4], Customers [41]Begin run.Cook [1] make a burger.Cook [1] make a burger.Cook [2] make a burger.Customer [10] come.Casher [3] accepts an order.Casher [3] take a burger to customor.Customer [19] come.Casher [2] accepts an order.Casher [2] take a burger to customor.Customer [7] come.Casher [3] accepts an order.Casher [3] take a burger to customor.Customer [17] come.Casher [2] accepts an order.Cook [1] make a burger.Casher [2] take a burger to customor.……
![Page 19: CS307 Operating Systems Project 2: Inter-Process Communication and Synchronization Fan Wu Department of Computer Science and Engineering Shanghai Jiao](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56649efe5503460f94c1388d/html5/thumbnails/19.jpg)
1.19Operating Systems
Tips
Simulating time passing sleep(rand() % NUM);
Assigning ID id_cook[i] = i +1; create_thread (Cook, &id_cook[i]);
void *Cook(void *args){
int id = *(int *)args;
…
}