X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2F44bsd.texi;h=208dcd47cfccc100854419f58878eb33ffe42d41;hb=9087580da55af9d9515c5d7cb73a48a62cf3a36b;hp=e53e829ce2be438f9d1621eb5f8e1c94f891f715;hpb=be9aa9a652ea92ba5459c9337b6738de61b54eae;p=pintos-anon diff --git a/doc/44bsd.texi b/doc/44bsd.texi index e53e829..208dcd4 100644 --- a/doc/44bsd.texi +++ b/doc/44bsd.texi @@ -160,12 +160,13 @@ weight of @math{a} at time @math{t+1}, @am{a^2, a**2} at time @math{f(t)} has a weight of approximately @math{1/e} at time @math{t+k}, approximately @am{1/e^2, 1/e**2} at time @am{t+2k, t+2*k}, and so on. From the opposite direction, @math{f(t)} decays to weight @math{w} at -@am{t = \log_aw, t = ln(w)/ln(a)}. +time @am{t + \log_aw, t + ln(w)/ln(a)}. 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}.