| 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> |