Comment idle thread more thoroughly.
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 20 Dec 2005 20:03:51 +0000 (20:03 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 20 Dec 2005 20:03:51 +0000 (20:03 +0000)
Thanks to "Kevin Hart" <kevin.hart@hp.com> for asking questions.

src/threads/thread.c

index 196ffafcf7276315f8d861244f0801cc45c31622..5229aef34d013b5bfd8bcd9c09a2983637018dc9 100644 (file)
@@ -329,10 +329,24 @@ thread_get_recent_cpu (void)
   return 0;
 }
 \f
-/* Idle thread.  Executes when no other thread is ready to run. */
+/* Idle thread.  Executes when no other thread is ready to run.
+
+   The idle thread is initially put on the ready list by
+   thread_start().  It will be scheduled once initially, at which
+   point it initializes idle_thread and immediately blocks.
+   After that, the idle thread never appears in the ready list.
+   It is returned by next_thread_to_run() as a special case when
+   the ready list is empty. */
 static void
 idle (void *aux UNUSED) 
 {
+  /* Initialize idle_thread.
+
+     Until we run for the first time, idle_thread remains a null
+     pointer.  That's okay because we know that, at that point,
+     the ready list has at least one element (the idle thread),
+     so next_thread_to_run() will not attempt to return the idle
+     thread. */
   idle_thread = thread_current ();
 
   for (;;)