X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2F44bsd.texi;h=743dad36fca230323600e4f9add0465fcad742df;hb=919347c164606c3f1544b2e8bd62f505aeda80a1;hp=d49f23490281312499a91d2d00ef9e7bd9f6c91d;hpb=4879d73c341778a907b777da3a6a15a131c5a913;p=pintos-anon diff --git a/doc/44bsd.texi b/doc/44bsd.texi index d49f234..743dad3 100644 --- a/doc/44bsd.texi +++ b/doc/44bsd.texi @@ -76,11 +76,10 @@ Thread priority is dynamically determined by the scheduler using a formula given below. However, each thread also has an integer @dfn{nice} value that determines how ``nice'' the thread should be to other threads. A @var{nice} of zero does not affect thread priority. A -positive @var{nice}, to the maximum of 20, increases the numeric -priority of a thread, decreasing its effective priority, and causes it -to give up some CPU time it would otherwise receive. On the other hand, -a negative @var{nice}, to the minimum of -20, tends to take away CPU -time from other threads. +positive @var{nice}, to the maximum of 20, decreases the priority of a +thread and causes it to give up some CPU time it would otherwise receive. +On the other hand, a negative @var{nice}, to the minimum of -20, tends +to take away CPU time from other threads. The initial thread starts with a @var{nice} value of zero. Other threads start with a @var{nice} value inherited from their parent @@ -114,7 +113,9 @@ the formula @noindent where @var{recent_cpu} is an estimate of the CPU time the thread has used recently (see below) and @var{nice} is the thread's -@var{nice} value. The coefficients @math{1/4} and 2 on @var{recent_cpu} +@var{nice} value. The result should be rounded down to the nearest +integer (truncated). +The coefficients @math{1/4} and 2 on @var{recent_cpu} and @var{nice}, respectively, have been found to work well in practice but lack deeper meaning. The calculated @var{priority} is always adjusted to lie in the valid range @code{PRI_MIN} to @code{PRI_MAX}. @@ -176,14 +177,14 @@ using this formula: threads ready to run (see below). If @var{load_avg} is 1, indicating that a single thread, on average, is competing for the CPU, then the current value of @var{recent_cpu} decays to a weight of .1 in -@am{\log_{2/3}.1 \approx 6, ln(2/3)/ln(.1) = approx. 6} seconds; if +@am{\log_{2/3}.1 \approx 6, ln(.1)/ln(2/3) = approx. 6} seconds; if @var{load_avg} is 2, then decay to a weight of .1 takes @am{\log_{3/4}.1 -\approx 8, ln(3/4)/ln(.1) = approx. 8} seconds. The effect is that +\approx 8, ln(.1)/ln(3/4) = approx. 8} seconds. The effect is that @var{recent_cpu} estimates the amount of CPU time the thread has received ``recently,'' with the rate of decay inversely proportional to the number of threads competing for the CPU. -Assumptions made by some of the tests require that updates to +Assumptions made by some of the tests require that these recalculations of @var{recent_cpu} be made exactly when the system tick counter reaches a multiple of a second, that is, when @code{timer_ticks () % TIMER_FREQ == 0}, and not at any other time. @@ -299,8 +300,8 @@ Suppose that we are using a @m{p.q} fixed-point format, and let @am{f = 2^q, f = 2**q}. By the definition above, we can convert an integer or real number into @m{p.q} format by multiplying with @m{f}. For example, in 17.14 format the fraction 59/60 used in the calculation of -@var{load_avg}, above, is @am{(59/60)2^{14}, 59/60*(2**14)} = 16,111 -(rounded to nearest). To convert a fixed-point value back to an +@var{load_avg}, above, is @am{(59/60)2^{14}, 59/60*(2**14)} = 16,110. +To convert a fixed-point value back to an integer, divide by @m{f}. (The normal @samp{/} operator in C rounds toward zero, that is, it rounds positive numbers down and negative numbers up. To round to nearest, add @m{f / 2} to a positive number, or