To pass the course, you must have passed the assignments (labs) and have passed the exam (see more information). For the exam, the only permitted material is a dictionary.
For the exam, you need neither the lectures nor the slides. Just read the textbook. For each chapter in the book, we list below the sections you need to read for the exam, and those you can skip. Of course it might help a great deal to read the latter too, to clarify concepts and see them in action.
Chap 2. Read all, except 2.9 through 2.13 (volatile variables, BACI, Java, Ada, Promela specific notation - the only language required of you is (Ben-Ari's) pseudo-code.
Chap 3. Read all.
Chap 4. You can skip 4.7 and 4.8 (to do with Spin and Promela).
Chap 5. Skip the whole chapter.
Chap 6. Read the whole chapter up to Sec 6.9 inclusive. Skip the rest - Sec 6.10 and 6.11 develop the theory further, and Sec 6.12 - 6.15 are language specific.
Chap 7. Read all except the language specific sections: Sec 7.9, 7.11, 7.12, and the last subsection of 7.10. Ada is the only language that provides protected objects, so 7.10 is in a sense about Ada. However, most of it is in pseudo-code (i.e., read!) and only the last subsection is concerned with actual Ada (skip).
Chap 8. Read all except 8.5 (Promela), 8.7 (RPC). Rendezvous is included, so read 8.6, but again the last subsection is Ada specific, so you can skip it.
Chap 9. Read all except Sec9.5 on implementation.
Some previous exams are available below for reference.
Hints to solve the exercises:
Q1 : (a) The scenario q1, q2, p1, q1 gives n=0 at the end. The scenario p1, q1, q2, p2, p1, q1 gives n=1 at the end.
Q2 : The abbreviated version leaves out p1, q1, p4 and q4. Each state now shows where the program counters of p and q are, and the values of wantp and wantq. Draw the state diagram and show there is no state with p5 and q5.
Q3 : (a) The state diagram is on p108 of the text-book (b) the definitions of wait and signal are on p109 and p110. (c) See algorithm 6.8 on p119.
Q4 : (a) See p 161. (b). eating(i) becomes true only by executing takeForks(i) completely, or by by being unblocked in releaseForks(i+1) or releaseForks(i-1). In both cases, we have fork[i].
Q5 & Q6 : These are programming problems, not involving formal reasoning.
Q7 : (a) the processes can livelock, looping p- to p3 and q- to q3. The invariant is that exactly one of C, Lp and Lq is true, (b) We did this in class, in my 3rd lecture. If p does not progress, Lp must be false. So q must progress, and will then set C to true. Assuming fairness, p must then progress.
The list above will give you a pretty good idea what to expect from an exam. Of course, the course has been run by different teachers and each of them has its own style. If you still want more exams, you can get a copy of them from the Studieexpedition. The structure of the exam and the type of questions is not drastically changing throughout the years. It is true that the used programming languages can be different but the problems the past exams ask to solve are relevant.