Why are user-level threads packages generally cooperatively scheduled?
Answer:
-User-level thread packages are co-operatively scheduled because generally they form part of a single kernel-level thread. Most often this means that the process runs on its own user-level scheduler, separate from the kernel scheduler. This means it does not have access to the strict timing-based preemptive scheduling that kernel level threads enjoy, so must use cooperative scheduling