half done lec 5 notes
[kspaans/CS350] / lec05-0519.tex
1 \documentclass{article}
2 \usepackage{fullpage}
3 \usepackage{amsmath}
4 \author{Kyle Spaans}
5 \date{May 15, 2009}
6 \title{Operating Systems Lecture Notes}
7 \begin{document}
8 \maketitle
9
10 \section*{Lecture 5 -- Interrupts and Locks}
11 We are reminded that the test-compile system is online, and that we should
12 submit assignments early and often.
13
14 \subsection*{Bounded Buffer}
15 We can use two semaphores to enforce both a lower and upper bound in the amount
16 of items in, see code in course notes.
17
18 \subsection*{Turning Interrupts On and Off}
19 In looking again at the implementation of \texttt{P()}, we notice that it calls
20 \texttt{thread\_sleep()} from inside of it's critical section, interrupts are
21 turned off. Does this mean that \texttt{thread\_sleep()} will turn them back
22 on? No, in fact the implemtation asserts that interrupts be turned off inside
23 of \texttt{thread\_sleep()}. Think of it this way: interrupts will be turned 
24 off during the entire process of the context switch (naturally). Therefore they
25 will be turned back on when the thread is selected to run again, and execution
26 pops it way down through the stack frames. For example, if another thread that
27 gets context switched to was put to sleep from \texttt{thread\_sleep()} then
28 it will eventually turn interrupts back on after continuing from the return
29 from \texttt{thread\_sleep()}.
30
31 Note that \texttt{thread\_wakeup()} will choose only a single thread to wakeup
32 if there are more than one thread sleeping on a particular address. Also
33 remember that \texttt{thread\_wakeup()} will not cause a context switch, it
34 only moves thread to the ready queue, out of the sleeping queue.
35
36 \subsection*{Implementing Locks}
37 It should not be very hard to implement them, we just need to make sure that
38 we've got them correct, since they will be used everywhere in the rest of
39 \emph{OS161}.
40
41 \end{document}