Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lab assignment 1: Synchronization

Similar presentations


Presentation on theme: "Lab assignment 1: Synchronization"— Presentation transcript:

1 Lab assignment 1: Synchronization
Operating Systems ECE344 Lab assignment 1: Synchronization Question: java thread? Ding Yuan

2 Overview of the lab assignment
Task 1: implementing synchronization primitives 1a: implement lock 1b: implement condition variable Task 2: use synchronization primitives to solve problems 2a: Mice and cats 2b: traffic lights Ding Yuan, ECE344 Operating System

3 Ding Yuan, ECE344 Operating System
Lock and cond. var. P(sem) { Disable interrupts; while (sem->count == 0) { thread_sleep(sem); /* current thread will sleep on this sem */ } sem->count--; Enable interrupts; V(sem) { Disable interrupts; sem->count++; thread_wakeup (sem); /* this will wake up all the threads waiting on this sem. Why wake up all threads? */ Enable interrupts; } why wake up all threads: this is to make the threads runnable. Then it’s up to the scheduler to pick one. all these thread will “return” from thread_sleep. only one can pass P. --- this is also why we need a while (sem->count != 0) instead of “if (sem->count != 0)”. sleep with interrupts disabled: thread sleep will eventually call mips_switch to swtich to a new thread. when that thread is waken up, the first thing is to enable interrupt. Needs atomic region Atomic region can be done in a similar way to semaphore If you understand how semaphore is implemented, should be trivial! Cannot use semaphore to implement lock or cond. var. Ding Yuan, ECE344 Operating System

4 Synchronization problems
How to start? First: write operation code Next: carefully reason about all the possible interleaving and timing scenarios Add synchronization Ding Yuan, ECE344 Operating System

5 Ding Yuan, ECE344 Operating System
Mice and cats Two bowls, multiple cats and mice Safety criteria: If a cat is eating at either dishes, no mouse can eat If a mouse is eating at either dishes, no cat can eat Ding Yuan, ECE344 Operating System

6 Ding Yuan, ECE344 Operating System
Operation code void sem_eat(const char *who, int num, int bowl, int iteration) { kprintf("%s: %d starts eating: bowl %d, iteration %d\n", who, num, bowl, iteration); clocksleep(1); kprintf("%s: %d ends eating: bowl %d, iteration %d\n", who, num, } void mousesem(void * p, unsigned long mousenumber) { int bowl, iteration; for (iteration = 0; iteration < 4; iteration++) { sem_eat (”mouse", mousenumber, bowl, iteration); int catmousesem(.. ..) { for (index = 0; index < NCATS; index++) thread_fork("catsem Thread”, NULL, index, catsem, NULL); for (index = 0; index < NMICE; index++) thread_fork(”mousesem Thread”, NULL, index, mousesem, NULL); Ding Yuan, ECE344 Operating System

7 Ding Yuan, ECE344 Operating System
About starvation You do not need to consider priority or starvation e.g., mice can prevent cat from eating Since cats/mice will eventually finish eating, won’t starve forever Ding Yuan, ECE344 Operating System


Download ppt "Lab assignment 1: Synchronization"

Similar presentations


Ads by Google