X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2F44bsd.texi;h=f530824e8296f0514885479377f4d3804b1e1417;hb=d4067a3abb1ef4537030835952e32f22f0063529;hp=208dcd47cfccc100854419f58878eb33ffe42d41;hpb=620151bef89b4fa74f548ca21e716dc218bb3c70;p=pintos-anon diff --git a/doc/44bsd.texi b/doc/44bsd.texi index 208dcd4..f530824 100644 --- a/doc/44bsd.texi +++ b/doc/44bsd.texi @@ -1,4 +1,4 @@ -@node 4.4BSD Scheduler, Coding Standards, References, Top +@node 4.4BSD Scheduler @appendix 4.4@acronym{BSD} Scheduler @iftex @@ -44,7 +44,7 @@ vary over time. A well-designed scheduler can often accommodate threads with all these requirements simultaneously. For project 1, you must implement the scheduler described in this -appendix. Our scheduler resembles the one described in @bibref{4.4BSD}, +appendix. Our scheduler resembles the one described in @bibref{McKusick}, which is one example of a @dfn{multilevel feedback queue} scheduler. This type of scheduler maintains several queues of ready-to-run threads, where each queue holds threads with a different priority. At any given @@ -86,7 +86,7 @@ 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 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 +@file{threads/thread.c}. @deftypefun int thread_get_nice (void) Returns the current thread's @var{nice} value. @@ -104,13 +104,13 @@ highest priority, yields. Our scheduler has 64 priorities and thus 64 ready queues, numbered 0 (@code{PRI_MIN}) through 63 (@code{PRI_MAX}). Lower numbers correspond -to @emph{higher} priorities, so that priority 0 is the highest priority -and priority 63 is the lowest. Thread priority is calculated initially +to lower priorities, so that priority 0 is the lowest priority +and priority 63 is the highest. Thread priority is calculated initially at thread initialization. It is also recalculated once every fourth clock tick, for every thread. In either case, it is determined by the formula -@center @t{@var{priority} = (@var{recent_cpu} / 4) + (@var{nice} * 2)}, +@center @t{@var{priority} = @code{PRI_MAX} - (@var{recent_cpu} / 4) - (@var{nice} * 2)}, @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 @@ -243,9 +243,9 @@ scheduler. It is 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 (@code{PRI_MIN}) through 63 (@code{PRI_MAX}), which is recalculated -using the following formula whenever the value of either term changes: +using the following formula every fourth tick: -@center @t{@var{priority} = (@var{recent_cpu} / 4) + (@var{nice} * 2)}. +@center @t{@var{priority} = @code{PRI_MAX} - (@var{recent_cpu} / 4) - (@var{nice} * 2)}. @var{recent_cpu} measures the amount of CPU time a thread has received ``recently.'' On each timer tick, the running thread's @var{recent_cpu}