X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2F44bsd.texi;h=f1638f80d31daae0739a263d7e5ddaa02583a2b7;hb=3edcfedb8e62970f3293fa676b6691f8658c3c11;hp=f530824e8296f0514885479377f4d3804b1e1417;hpb=5ae9e9b8e9240f8605cd4ed7ddf9c1207370dd35;p=pintos-anon diff --git a/doc/44bsd.texi b/doc/44bsd.texi index f530824..f1638f8 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. @@ -237,8 +238,8 @@ nearest integer. @node 4.4BSD Scheduler Summary @section Summary -This section summarizes the calculations required to implement the -scheduler. It is not a complete description of scheduler requirements. +The following formulas summarize the calculations required to implement the +scheduler. They are not a complete description of scheduler requirements. Every thread has a @var{nice} value between -20 and 20 directly under its control. Each thread also has a priority, between 0