X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fthreads.texi;h=1231168e34224ab3aca2ee50479087ceb0abdf46;hb=d4def0ac6ef072cf0cf8a968784bc21371bd4d58;hp=f8cd04e704e2ccf1b83ddda41e4e27ab4e2b49fd;hpb=2e9f1eca8738a888033e4be9f661da9734e130e9;p=pintos-anon diff --git a/doc/threads.texi b/doc/threads.texi index f8cd04e..1231168 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -40,7 +40,7 @@ The first step is to read and understand the code for the initial thread system. Pintos already implements thread creation and thread completion, a simple scheduler to switch between threads, and synchronization -primitives (semaphores, locks, condition variables, and memory +primitives (semaphores, locks, condition variables, and optimization barriers). Some of this code might seem slightly mysterious. If @@ -170,7 +170,7 @@ Infrastructure}, for more information. @item synch.c @itemx synch.h Basic synchronization primitives: semaphores, locks, condition -variables, and memory barriers. You will need to use these for +variables, and optimization barriers. You will need to use these for synchronization in all four projects. @xref{Synchronization}, for more information. @@ -522,7 +522,7 @@ policy at Pintos startup time. By default, the priority scheduler must be active, but we must be able to choose the 4.4@acronym{BSD} scheduler with the @option{-mlfqs} kernel option. Passing this -option sets @code{enable_mlfqs}, declared in @file{threads/init.h}, to +option sets @code{thread_mlfqs}, declared in @file{threads/thread.h}, to true when the options are parsed by @func{parse_options}, which happens midway through @func{main}. @@ -791,4 +791,32 @@ scheduler at the same time. Yes. In general, your implementation may differ from the description, as long as its behavior is the same. + +@item Some scheduler tests fail and I don't understand why. Help! + +If your implementation mysteriously fails some of the advanced +scheduler tests, try the following: + +@itemize +@item +Read the source files for the tests that you're failing, to make sure +that you understand what's going on. Each one has a comment at the +top that explains its purpose and expected results. + +@item +Double-check your fixed-point arithmetic routines and your use of them +in the scheduler routines. + +@item +Consider how much work your implementation does in the timer +interrupt. If the timer interrupt handler takes too long, then it +will take away most of a timer tick from the thread that the timer +interrupt preempted. When it returns control to that thread, it +therefore won't get to do much work before the next timer interrupt +arrives. That thread will therefore get blamed for a lot more CPU +time than it actually got a chance to use. This raises the +interrupted thread's recent CPU count, thereby lowering its priority. +It can cause scheduling decisions to change. It also raises the load +average. +@end itemize @end table