Chapter 4: Threads
Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013
Chapter 4: Threads
Overview
Multicore Programming
Multithreading Models
Thread Libraries
Implicit Threading
Threading Issues
Operating System Examples
Operating System Concepts – 9th Edition 4.2 Silberschatz, Galvin and Gagne ©2013
Objectives
To introduce the notion of a thread—a fundamental unit of CPU
utilization that forms the basis of multithreaded computer
systems
To discuss the APIs for the Pthreads, Windows, and Java
thread libraries
To explore several strategies that provide implicit threading
To examine issues related to multithreaded programming
To cover operating system support for threads in Windows and
Linux
Operating System Concepts – 9th Edition 4.3 Silberschatz, Galvin and Gagne ©2013
Thread
“Single sequential stream of instructions within a process”
“Lightweight process”
Operating System Concepts – 9th Edition 4.4 Silberschatz, Galvin and Gagne ©2013
Motivation
Most modern applications are multithreaded
Threads run within application
Multiple tasks with the application can be implemented by
separate threads
Update display
Fetch data
Spell checking
Answer a network request
Process creation is heavy-weight while thread creation is
light-weight
Can simplify code, increase efficiency
Kernels are generally multithreaded
Operating System Concepts – 9th Edition 4.5 Silberschatz, Galvin and Gagne ©2013
Multithreaded Server Architecture
Operating System Concepts – 9th Edition 4.6 Silberschatz, Galvin and Gagne ©2013
Benefits
Responsiveness – may allow continued execution if part of
process is blocked, especially important for user interfaces
Resource Sharing – threads share resources of process, easier
than shared memory or message passing
Economy – cheaper than process creation, thread switching
lower overhead than context switching
Scalability – process can take advantage of multiprocessor
architectures
Operating System Concepts – 9th Edition 4.7 Silberschatz, Galvin and Gagne ©2013
Single and Multithreaded Processes
Operating System Concepts – 9th Edition 4.8 Silberschatz, Galvin and Gagne ©2013
User Threads and Kernel Threads
User threads - management done by user-level with threads library
Three primary thread libraries:
POSIX Pthreads
Windows threads
Java threads
Kernel threads – Supported and managed directly by the Kernel
Examples – virtually all general purpose operating systems, including:
Windows
Solaris
Linux
Tru64 UNIX
Mac OS X
Operating System Concepts – 9th Edition 4.9 Silberschatz, Galvin and Gagne ©2013
User Threads and Kernel Threads
User Level Thread Kernel level thread
User level thread are managed by Kernel level threads are managed
user libraries by OS
Typically fast Typically slower
Context switching is fast Context switching is slow
Of one thread perform blocking If one kernel level thread blocked
entire process get block no effect on other
Operating System Concepts – 9th Edition 4.10 Silberschatz, Galvin and Gagne ©2013
Multithreading Models
Multithreading models are nothing but the type of relationship between
threads
Many-to-One
One-to-One
Many-to-Many
Operating System Concepts – 9th Edition 4.11 Silberschatz, Galvin and Gagne ©2013
Many-to-One
Many user-level threads mapped to
single kernel thread
Thread management done by the thread
library in the user space so it is efficient
Limitation
Entire process will block if one thread
make a block system call
Multiple threads may not run in parallel
on multicore system because only one
may be in kernel at a time
Few systems currently use this model
Examples:
Solaris Green Threads
GNU Portable Threads
Operating System Concepts – 9th Edition 4.12 Silberschatz, Galvin and Gagne ©2013
One-to-One
Each user-level thread maps to kernel thread
Creating a user-level thread creates a kernel thread
More concurrency than many-to-one
Limitation
Number of threads per process sometimes
restricted due to overhead
Examples
Windows
Linux
Solaris 9 and later
Operating System Concepts – 9th Edition 4.13 Silberschatz, Galvin and Gagne ©2013
Many-to-Many Model
Allows many user level threads to be
mapped to smaller or equal kernel
threads
Allows the operating system to create
a sufficient number of kernel threads
Solaris prior to version 9
Windows with the ThreadFiber
package
Operating System Concepts – 9th Edition 4.14 Silberschatz, Galvin and Gagne ©2013
Two-level Model
Similar to M:M, except that it allows a user thread to be
bound to kernel thread
Examples
IRIX
HP-UX
Tru64 UNIX
Solaris 8 and earlier
Operating System Concepts – 9th Edition 4.15 Silberschatz, Galvin and Gagne ©2013
Thread Libraries
Thread library provides programmer with API for creating
and managing threads
Two primary ways of implementing
Library entirely in user space
Kernel-level library supported by the OS
Three primary thread libraries:
POSIX Pthreads
Windows threads
Java threads
Operating System Concepts – 9th Edition 4.16 Silberschatz, Galvin and Gagne ©2013
Pthreads Example
Next two slides show a multithreaded C program that
calculates the summation of a non-negative integer in
a separate thread.
In a Pthreads program, separate threads begin
execution in a specified function. In the program, this
is the runner() function.
When this program starts, a single thread of control
begins in main(). After some initialization, main()
creates a second thread that begins control in the
runner() function. Both threads share the global data
sum.
Operating System Concepts – 9th Edition 4.17 Silberschatz, Galvin and Gagne ©2013
Pthreads Example
Operating System Concepts – 9th Edition 4.18 Silberschatz, Galvin and Gagne ©2013
Pthreads Example (Cont.)
Operating System Concepts – 9th Edition 4.19 Silberschatz, Galvin and Gagne ©2013
Pthreads Code for Joining Ten Threads
The summation program in the previous slides
creates a single thread.
With multicore systems, writing programs containing
several threads is common.
Example a Pthreads program, for joining the threads:
Operating System Concepts – 9th Edition 4.20 Silberschatz, Galvin and Gagne ©2013
Windows Multithreaded C Program
Operating System Concepts – 9th Edition 4.21 Silberschatz, Galvin and Gagne ©2013
Windows Multithreaded C Program (Cont.)
Operating System Concepts – 9th Edition 4.22 Silberschatz, Galvin and Gagne ©2013
Thread Cancellation
Terminating a thread before it has finished(database, web browser)
The thread to be canceled is referred to as target thread
Cancelation of a target thread may be handled using two general
approaches:
Asynchronous cancellation terminates the target thread
immediately
Deferred cancellation allows the target thread to periodically
check if it should be cancelled
The difficulty with cancellation occurs in situations where:
Resources have been allocated to a canceled thread.
A thread is canceled while in the midst of updating data it is
sharing with other threads.
Operating System Concepts – 9th Edition 4.23 Silberschatz, Galvin and Gagne ©2013
Thread Cancellation
The operating system usually will reclaim system resources from
a canceled thread but will not reclaim all resources.
Canceling a thread asynchronously does not necessarily free a
system-wide resource that is needed by others.
Deferred cancellation does not suffer from this problem:
One thread indicates that a target thread is to be canceled,
The cancellation occurs only after the target thread has
checked a flag to determine whether or not it should be
canceled.
The thread can perform this check at a point at which it can
be canceled safely.
Operating System Concepts – 9th Edition 4.24 Silberschatz, Galvin and Gagne ©2013
Pthread Cancellation
Phread cancellation is initiated using the function:
pthread\_cancel()
The identifier of the target Pthread is passed as a
parameter to the function.
Pthread code to create and cancel a thread:
Operating System Concepts – 9th Edition 4.25 Silberschatz, Galvin and Gagne ©2013
Operating System Examples
Windows Threads
Linux Threads
Operating System Concepts – 9th Edition 4.26 Silberschatz, Galvin and Gagne ©2013
Windows Threads
Windows implements the Windows API – primary API for Win
98, Win NT, Win 2000, Win XP, and Win 7
Implements the one-to-one mapping, kernel-level
Each thread contains
A thread id
Register set representing state of processor
Separate user and kernel stacks for when thread runs in
user mode or kernel mode
Private data storage area used by run-time libraries and
dynamic link libraries (DLLs)
The register set, stacks, and private storage area are known as
the context of the thread
Operating System Concepts – 9th Edition 4.27 Silberschatz, Galvin and Gagne ©2013
Windows Threads (Cont.)
The primary data structures of a thread include:
ETHREAD (executive thread block) – includes pointer to
process to which thread belongs and to KTHREAD, in
kernel space
KTHREAD (kernel thread block) – scheduling and
synchronization info, kernel-mode stack, pointer to TEB, in
kernel space
TEB (thread environment block) – thread id, user-mode
stack, thread-local storage, in user space
Operating System Concepts – 9th Edition 4.28 Silberschatz, Galvin and Gagne ©2013
Windows Threads Data Structures
Operating System Concepts – 9th Edition 4.29 Silberschatz, Galvin and Gagne ©2013
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)
Flags control behavior
Operating System Concepts – 9th Edition 4.30 Silberschatz, Galvin and Gagne ©2013
End of Chapter 4
Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013