Allow .png as alternate for ASCII art.
[pintos-anon] / doc / 44bsd.texi
index e53e829ce2be438f9d1621eb5f8e1c94f891f715..d066ee7f6806ed579db59095572818173d5bc7a8 100644 (file)
@@ -165,7 +165,8 @@ From the opposite direction, @math{f(t)} decays to weight @math{w} at
 The initial value of @var{recent_cpu} is 0 in the first thread
 created, or the parent's value in other new threads.  Each time a timer
 interrupt occurs, @var{recent_cpu} is incremented by 1 for the running
-thread only.  In addition, once per second the value of @var{recent_cpu}
+thread only, unless the idle thread is running.  In addition, once per
+second the value of @var{recent_cpu}
 is recalculated for every thread (whether running, ready, or blocked),
 using this formula:
 
@@ -190,6 +191,11 @@ multiple of a second, that is, when @code{timer_ticks () % TIMER_FREQ ==
 The value of @var{recent_cpu} can be negative for a thread with a
 negative @var{nice} value.  Do not clamp negative @var{recent_cpu} to 0.
 
+You may need to think about the order of calculations in this formula.
+We recommend computing the coefficient of @var{recent_cpu} first, then
+multiplying.  Some students have reported that multiplying
+@var{load_avg} by @var{recent_cpu} directly can cause overflow.
+
 You must implement @func{thread_get_recent_cpu}, for which there is a
 skeleton in @file{threads/thread.c}.