1 / 7

Operating Systems ECE344

Operating Systems ECE344. Lab assignment 1: Synchronization. Ding Yuan. 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

darva
Download Presentation

Operating Systems ECE344

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Operating SystemsECE344 Lab assignment 1: Synchronization 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. Lock and cond. var. • 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. 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; } P(sem) { Disable interrupts; while (sem->count == 0) { thread_sleep(sem); /* current thread will sleep on this sem */ } sem->count--; Enable interrupts; } 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. 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. Operation code void sem_eat(const char *who, intnum, 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, bowl, iteration); } void mousesem(void * p, unsigned long mousenumber) { int bowl, iteration; for (iteration = 0; iteration < 4; iteration++) { sem_eat (”mouse", mousenumber, bowl, iteration); } } intcatmousesem(.. ..) { for (index = 0; index < NCATS; index++) thread_fork("catsemThread”, NULL, index, catsem, NULL); for (index = 0; index < NMICE; index++) thread_fork(”mousesem Thread”, NULL, index, mousesem, NULL); } Ding Yuan, ECE344 Operating System

  7. 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

More Related