CMET 331 Operating Systems
4. Threads
Outline • Overview • Multithreading Models • Threading Issues • Windows XP Threads • Linux Threads
Thread • A thread, sometimes called a lightweight
process (LWP), is a basic unit of CPU utilization; it comprises a thread ID, a program counter, a register set, and a stack. —There may be multiple threads in a single process.
Those threads share: • Code • Data • Other OS resources
Single and Multithreaded Processes
Motivation • A traditional (or heavyweight) process has a
single thread of control. • If the process has multiple threads of control, it
can do more than one task at a time. • Examples
—A web browser might have one thread display images or text while another thread retrieves data from the network
—A word processor may have a thread for displaying graphics, another thread for reading keystrokes from the user, and a third thread for performing spelling and grammar checking in the background.
Why Use Threads Other Than Processes? • In fact, this process-creation method was in
common use before threads became popular. • Process creation is very heavyweight • If the new process will perform the same tasks
as the existing process, why incur all that overhead?
• It is generally more efficient for one process that contains multiple threads to serve the same purpose.
Benefits • Takes less time to create a new thread than a
process • Less time to terminate a thread than a process • Less time to switch between two threads within
the same process • Since threads within the same process share
memory and files, they can communicate with each other without invoking the kernel
Some Features • Suspending a process involves suspending all
threads of the process since all threads share the same address space
• Termination of a process, terminates all threads within the process
User Threads • Thread management done by user-level threads
library
• Three primary thread libraries: — POSIX (Portable Operating System Interface)
Pthreads — Win32 threads — Java threads
Kernel Threads • Supported and managed directly by the
operating system
• Examples —Windows XP/2000 —Solaris —Linux —Tru64 UNIX —Mac OS X
Multithreading Models • Many-to-One
• One-to-One
• Many-to-Many
Many-to-One • Many user-level threads mapped to single kernel
thread —Thread management is done by the thread library in
user space, so it is efficient —The entire process will block if a thread makes a
blocking system call —Only one thread can access the kernel at a time,
multiple threads are unable to run in parallel on multiprocessors
• Examples: —Solaris Green Threads —GNU Portable Threads
Many-to-One Model
One-to-One • Each user-level thread maps to a kernel thread
— It provides more concurrency than the many-to-one model by allowing another thread to run when a thread makes a blocking system call
— Multiple threads are able to run in parallel on multiprocessors — The overhead of creating kernel threads can burden the
performance of an application, most implementations of this model restrict the number of threads supported by the system
• Examples — Windows NT/XP/2000 — Linux — Solaris 9 and later
One-to-one Model
Many-to-Many Model • Allows many user level threads to be mapped to
many kernel threads • Allows the operating system to create a
sufficient number of kernel threads —Developers can create as many user threads as
necessary, and the corresponding kernel threads can run in parallel on a multiprocessor
—When a thread performs a blocking system call, the kernel can schedule another thread for execution
• Solaris prior to version 9 • Windows NT/2000 with theThreadFiber package
Many-to-Many Model
Threading Issues • Semantics of fork() and exec() system calls • Thread cancellation • Signal handling • Thread pools • Thread specific data • Scheduler activations
Semantics of fork() and exec() • What happens when a multi-threaded process
calls fork()? —All threads could be duplicated.
OR
—Just the calling thread.
• How exec() works? —If a thread invokes the exec () system call, the
program specified in the parameter to exec () will replace the entire process-including all threads.
Thread Cancellation • Terminating a thread before it has finished • A thread that is to be canceled is often referred
to as the target thread • Two general approaches:
—Asynchronous cancellation terminates the target thread immediately
—Deferred cancellation allows the target thread to periodically check if it should be cancelled
Signal Handling • Signals are used in UNIX systems to notify a
process that a particular event has occurred • A signal handler is used to process signals
1. Signal is generated by particular event 2. A generated signal is delivered to a process 3. Once delivered, the signal must be handled
• Options for delivering a signal: 1. Deliver the signal to the thread to which the signal
applies 2. Deliver the signal to every thread in the process 3. Deliver the signal to certain threads in the process 4. Assign a specific thread to receive all signals for the
process
Thread Pools • Create a number of threads in a pool where
they await work • Advantages:
—Usually slightly faster to service a request with an existing thread than create a new thread
—Allows the number of threads in the application(s) to be bound to the size of the pool
Thread Specific Data • Threads belonging to a process share the data
of the process • However, in some circumstances, each thread
might need its own copy of certain data • Thread-specific data allows each thread to
have its own copy of data • Useful when you do not have control over the
thread creation process (i.e., when using a thread pool)
Scheduler Activations • One scheme for communication between the user-
thread library and the kernel is known as scheduler activation
• How it works? — The kernel provides an application with a set of virtual
processors (LWPs), and the application can schedule user threads onto an available virtual processor
— The kernel must inform an application about certain events — This procedure is known as an upcall
• Scheduler activations provide upcalls - a communication mechanism from the kernel to the thread library
• This communication allows an application to maintain the correct number kernel threads
Windows XP Threads • Implements the one-to-one mapping • Each thread contains
—A thread id —Register set —Separate user and kernel stacks —Private data storage area
• The register set, stacks, and private storage area are known as the context of the threads
• The primary data structures of a thread include: —ETHREAD (executive thread block) —KTHREAD (kernel thread block) —TEB (thread environment block)
Linux Threads • Linux refers to them as tasks rather than
threads • Thread creation is done through clone()
system call • clone() allows a child task to share the address
space of the parent task (process)