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