Notes on the scheduler in sched.c:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  'sched.c' provides an very simplistic multi-threading scheduler.
   See the example, function 'sched(...)', in the same file for its
   API usage.

   Until an exhaustive testing can be done, the implementation cannot
   qualify as that of production quality. It works with the example
   in 'sched.c', it may or may not work in other cases.


Limitations:
~~~~~~~~~~~~

  - There are NO primitives for thread synchronization (locking,
    notify etc).

  - Only the GPRs and FPRs context is saved during a thread context
    switch. Other registers on the PowerPC processor (60x, 7xx, 7xxx
    etc) are NOT saved.

  - The scheduler is NOT transparent to the user. The user
    applications must invoke thread_yield() to allow other threads to
    scheduler.

  - There are NO priorities, and the scheduling policy is round-robin
    based.

  - There are NO capabilities to collect thread CPU usage, scheduler
    stats, thread status etc.

  - The semantics are somewhat based on those of pthreads, but NOT
    the same.

  - Only seven threads are allowed. These can be easily increased by
    changing "#define MAX_THREADS" depending on the available memory.

  - The stack size of each thread is 8KBytes. This can be easily
    increased depending on the requirement and the available memory,
    by increasing "#define STK_SIZE".

  - Only one master/parent thread is allowed, and it cannot be
    stopped or deleted. Any given thread is NOT allowed to stop or
    delete itself.

  - There NOT enough safety checks as are probably in the other
    threads implementations.

  - There is no parent-child relationship between threads. Only one
    thread may thread_join, preferably the master/parent thread.

(C) 2003 Arun Dharankar <ADharankar@ATTBI.Com>
