X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fthreads.texi;h=7964879223fb93e4ad7e67e791c1946b4b68e649;hb=51878ce2ad4922e38f3e3c84a2108e18ec9e5517;hp=eeb17eeac26298c6728c1349abbb5bc3a12f1222;hpb=c75a1a1b7c79c1a516256b8cf072631a7aa575eb;p=pintos-anon diff --git a/doc/threads.texi b/doc/threads.texi index eeb17ee..7964879 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -217,14 +217,24 @@ call this code yourself. @item serial.c @itemx serial.h Serial port driver. Again, @func{printf} calls this code for you, -so you don't need to do so yourself. Feel free to look through it if -you're curious. +so you don't need to do so yourself. +It handles serial input by passing it to the input layer (see below). @item disk.c @itemx disk.h Supports reading and writing sectors on up to 4 IDE disks. This won't actually be used until project 2. +@item kbd.c +@itemx kbd.h +Keyboard driver. Handles keystrokes passing them to the input layer +(see below). + +@item input.c +@itemx input.h +Input layer. Queues input characters passed along by the keyboard or +serial drivers. + @item intq.c @itemx intq.h Interrupt queue, for managing a circular queue that both kernel @@ -630,6 +640,45 @@ that happens to follow @func{fail} in memory, which in this case happens to be @func{pass}. @xref{Backtraces}, for more information. + +@item How do interrupts get re-enabled in the new thread following @func{schedule}? + +Every path into @func{schedule} disables interrupts. They eventually +get re-enabled by the next thread to be scheduled. Consider the +possibilities: the new thread is running in @func{switch_thread} (but +see below), which is called by @func{schedule}, which is called by one +of a few possible functions: + +@itemize @bullet +@item +@func{thread_exit}, but we'll never switch back into such a thread, so +it's uninteresting. + +@item +@func{thread_yield}, which immediately restores the interrupt level upon +return from @func{schedule}. + +@item +@func{thread_block}, which is called from multiple places: + +@itemize @minus +@item +@func{sema_down}, which restores the interrupt level before returning. + +@item +@func{idle}, which enables interrupts with an explicit assembly STI +instruction. + +@item +@func{wait} in @file{devices/intq.c}, whose callers are responsible for +re-enabling interrupts. +@end itemize +@end itemize + +There is a special case when a newly created thread runs for the first +time. Such a thread calls @func{intr_enable} as the first action in +@func{kernel_thread}, which is at the bottom of the call stack for every +kernel thread but the first. @end table @menu