queue. If the highest-priority queue contains multiple threads, then
they run in ``round robin'' order.
+Multiple facets of the scheduler require data to be updated after a
+certain number of timer ticks. In every case, these updates should
+occur before any ordinary kernel thread has a chance to run, so that
+there is no chance that a kernel thread could see a newly increased
+@func{timer_ticks} value but old scheduler data values.
+
@menu
* Thread Niceness::
* Calculating Priority::
The initial thread starts with a @var{nice} value of zero. Other
threads start with a @var{nice} value inherited from their parent
-thread. You
-must implement these functions, for which we have provided skeleton
-definitions in @file{threads/thread.c}.
+thread. You must implement the functions described below, which are for
+use by test programs. We have provided skeleton definitions for them in
+@file{threads/thread.c}. by test programs
@deftypefun int thread_get_nice (void)
Returns the current thread's @var{nice} value.
received ``recently,'' with the rate of decay inversely proportional to
the number of threads competing for the CPU.
-Because of assumptions made by some of the tests, @var{recent_cpu} must
-be updated 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.
+Assumptions made by some of the tests require that updates to
+@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.
-Take note that @var{recent_cpu} can be a negative quantity for a thread
-with a negative @var{nice} value. Negative values of @var{recent_cpu}
-are not changed to 0.
+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 must implement @func{thread_get_recent_cpu}, for which there is a
skeleton in @file{threads/thread.c}.
@tab @code{n * f}
@item Convert @code{x} to integer (rounding down):
-@tab @code{x * f}
+@tab @code{x / f}
@item Convert @code{x} to integer (rounding to nearest):
@tab @code{(x + f / 2) / f}