The thread defines a sequential execution stream within a process.
The process defines the address space and general process attributes (everything but threads of execution)
OS-managed threads are called kernel-level threads or lightweight processes.
- Thread operations still require system calls
- Kernel-level threads have to be general to support the needs of all programmers, languages, runtimes, etc.
Kernel-level threads are managed by the OS, User-level threads are managed entirely by the run-time system (user-level library).
A thread is simply represented by a PC, registers, stack, and small thread control block (TCB). Creating a new thread, switching between threads, and synchronizing threads are done via procedure call.
- User-level threads are invisible to the OS
- As a result, the OS can make poor decisions