X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=doc%2Fthreads.texi;h=d90b43895396a0ec81c3ff9c4ae91515572522ac;hp=8dad172b4540dffb30722957c7c29a69f02d7698;hb=f1f2dc8de9e336d83383692d4478bb14a3dafc11;hpb=54913c009db0536777e2637dc57e69372ba4dbef diff --git a/doc/threads.texi b/doc/threads.texi index 8dad172..d90b438 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -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