X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fthreads.texi;h=eeb17eeac26298c6728c1349abbb5bc3a12f1222;hb=ea69fc9dbb8d947fbec0e78fe266c6402c112731;hp=d0d34e407bc7de0120f73ff9edd702add0e9cd3d;hpb=f415a37905c57f61b444806bf84f5405184452aa;p=pintos-anon diff --git a/doc/threads.texi b/doc/threads.texi index d0d34e4..eeb17ee 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -609,13 +609,13 @@ to cause many of the tests to fail. You are probably looking at a backtrace that looks something like this: @example -0xc0108810: debug_panic (../../lib/kernel/debug.c:32) -0xc010a99f: pass (../../tests/threads/tests.c:93) -0xc010bdd3: test_mlfqs_load_1 (../../tests/threads/mlfqs-load-1.c:33) -0xc010a8cf: run_test (../../tests/threads/tests.c:51) -0xc0100452: run_task (../../threads/init.c:283) -0xc0100536: run_actions (../../threads/init.c:333) -0xc01000bb: main (../../threads/init.c:137) +0xc0108810: debug_panic (lib/kernel/debug.c:32) +0xc010a99f: pass (tests/threads/tests.c:93) +0xc010bdd3: test_mlfqs_load_1 (...threads/mlfqs-load-1.c:33) +0xc010a8cf: run_test (tests/threads/tests.c:51) +0xc0100452: run_task (threads/init.c:283) +0xc0100536: run_actions (threads/init.c:333) +0xc01000bb: main (threads/init.c:137) @end example This is just confusing output from the @command{backtrace} program. It @@ -697,6 +697,13 @@ priority to @var{L}. @var{L} releases the lock and thus loses the CPU and is moved to the ready queue. Now @var{L}'s old priority is restored while it is in the ready queue. +@item Can a thread's priority change while it is blocked? + +Yes. While a thread that has acquired lock @var{L} is blocked for any +reason, its priority can increase by priority donation if a +higher-priority thread attempts to acquire @var{L}. This case is +checked by the @code{priority-donate-sema} test. + @item Can a thread added to the ready list preempt the processor? Yes. If a thread added to the ready list has higher priority than the @@ -707,9 +714,11 @@ preempting whatever thread is currently running. @item How does @func{thread_set_priority} affect a thread receiving donations? -It should do something sensible, but no particular behavior is -required. None of the test cases call @func{thread_set_priority} from a -thread while it is receiving a priority donation. +It sets the thread's base priority. The thread's effective priority +becomes the higher of the newly set priority or the highest donated +priority. When the donations are released, the thread's priority +becomes the one set through the function call. This behavior is checked +by the @code{priority-donate-lower} test. @item Calling @func{printf} in @func{sema_up} or @func{sema_down} reboots!