Switching to Blackboard All assignments will be submitted through blackboard To access, you need to do the following: Get your UNET id and set a password. Contact UNET helpdesk or the IT helpdesk if necessary. Can also call 800 number on blackboard homepage. http://www.courses.maine.edu/ All future homework/projects must be submitted via the digital dropbox on blackboard.
Proposed Schedule Modification Reschedule preliminary 1 to Monday, October 4th. Reschedule due date for project part 1 to Wednesday October 6th.
Midterm READING: You are responsible for all of the material covered in the book up to (but not including) Section 2.3.7 except for the following sections: Chapter 1: 1.2.1, 1.2.2, 1.2.4, 1.2.5, 1.3, 1.5.8, 1.7 to the end of the chapter. Chapter 2: 2.2.6, 2.3.7 to the end of the chapter. Also responsible for all class slides!! Please make sure you review the material carefully because large pieces of it is not covered in the book.
Dining Philosophers (1) Philosophers eat/think Eating needs 2 forks Pick one fork at a time How to prevent deadlock
A nonsolution to the dining philosophers problem
Solution to dining philosophers problem (part 1)
Solution to dining philosophers problem (part 2)
State Array S Array T T T T T Mutex = 1 NULL 0 0 0 0 0 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ;
State Array S Array E T T T T Mutex = 0 NULL 1 0 0 0 0 2 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ;
State Array S Array E T T T T Mutex = 0 NULL 1 0 0 0 0 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; up(mutex) ; down(S[0]) ;
State Array S Array E T T T T Mutex = 1 NULL 0 0 0 0 0 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; up(mutex) ; down(S[0]) ; // falls through to //critical section Preempted
State Array S Array E T T T T Mutex = 1 NULL 0 0 0 0 0 1 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ;
State Array S Array E T T T T Mutex = 0 NULL 0 0 0 0 0 1 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ;
State Array S Array E T T T T Mutex = 0 NULL 0 0 0 0 0 1 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ;
State Array S Array E T E T T Mutex = 0 NULL 0 0 1 0 0 1 1 2 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ;
State Array S Array E T E T T Mutex = 0 NULL 0 0 1 0 0 1 1 2 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ;
State Array S Array E T E T T Mutex = 1 NULL 0 0 0 0 0 1 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; //falls through semaphore //and enters critical section.
State Array S Array E T E T T Mutex = 1 NULL 0 0 0 0 0 1 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; eat() !!! P3: take_forks(3) ; down(mutex) ; test(3) ; up(mutex) ; down(S[3]) ;
State Array S Array E T E H T Mutex = 1 NULL 0 0 0 -1 0 1 1 1 0 1 Mutex.queue S[3].queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; eat() !!! P3: take_forks(3) ; down(mutex) ; test(3) ; up(mutex) ; down(S[3]) ; P3
State Array S Array E T E H T Mutex = 1 NULL 0 0 0 -1 0 1 1 1 0 1 Mutex.queue S[3].queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; eat() !!! P3: take_forks(3) ; down(mutex) ; test(3) ; up(mutex) ; down(S[3]) ; P2: put_forks(2) ; set state[2] = Thinking. test(1) ; P3
State Array S Array E T T H T Mutex = 0 NULL 0 0 0 -1 0 1 1 1 0 1 Mutex.queue S[3].queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; eat() !!! P3: take_forks(3) ; down(mutex) ; test(3) ; up(mutex) ; down(S[3]) ; P2: put_forks(2) ; set state[2] = Thinking. test(1) ; //left neighbor not //hungry. P3
State Array S Array E T T H T Mutex = 0 NULL 0 0 0 -1 0 1 1 1 0 1 Mutex.queue S[3].queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; eat() !!! P3: take_forks(3) ; down(mutex) ; test(3) ; up(mutex) ; down(S[3]) ; P2: put_forks(2) ; set state[2] = Thinking. test(1) ; P3
State Array S Array E T T T T Mutex = 0 NULL 0 0 0 0 0 1 1 1 1 1 Mutex.queue P0: take_forks(0) down(mutex) ; test(0) ; down(S[0]) ; Preempted P2: take_forks(2) ; test(2) ; up(mutex) ; down(S[2]) ; eat() !!! P3: take_forks(3) ; down(mutex) ; test(3) ; up(mutex) ; down(S[3]) ; P2: put_forks(2) ; set state[2] = Thinking. test(1) ; P3 Ready Queue
Solution to dining philosophers problem (part 2)
Create Deadlock down(S[x]) ; up (mutex) ;