Add PC speaker driver and connect it to '\a' in the VGA console.
[pintos-anon] / doc / threads.texi
index 8dad172b4540dffb30722957c7c29a69f02d7698..d90b43895396a0ec81c3ff9c4ae91515572522ac 100644 (file)
@@ -246,6 +246,16 @@ and serial drivers.
 Real-time clock driver, to enable the kernel to determine the current
 date and time.  By default, this is only used by @file{thread/init.c}
 to choose an initial seed for the random number generator.
+
+@item speaker.c
+@itemx speaker.h
+Driver that can produce tones on the PC speaker.
+
+@item pit.c
+@itemx pit.h
+Code to configure the 8254 Programmable Interrupt Timer.  This code is
+used by both @file{devices/timer.c} and @file{devices/speaker.c}
+because each device uses one of the PIT's output channel.
 @end table
 
 @node lib files
@@ -787,11 +797,19 @@ What is happening is that output from two threads is being
 interleaved.  That is, one thread is printing @code{"(alarm-priority)
 Thread priority 29 woke up.\n"} and another thread is printing
 @code{"(alarm-priority) Thread priority 30 woke up.\n"}, but the first
-thread is being interrupted by the second in the middle of its output.
+thread is being preempted by the second in the middle of its output.
 
 This problem indicates a bug in your priority scheduler.  After all, a
 thread with priority 29 should not be able to run while a thread with
 priority 30 has work to do.
+
+Normally, the implementation of the @code{printf()} function in the
+Pintos kernel attempts to prevent such interleaved output by acquiring
+a console lock during the duration of the @code{printf} call and
+releasing it afterwards.  However, the output of the test name,
+e.g., @code{(alarm-priority)}, and the message following it is output
+using two calls to @code{printf}, resulting in the console lock being
+acquired and released twice.
 @end table
 
 @node Advanced Scheduler FAQ