Chapter 4
Chapter 4
Chapter 4
• Overview
• Multicore Programming
• Multithreading Models
• Thread Libraries
• Implicit Threading
• Threading Issues
• Operating System Examples
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
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
Multithreaded Server Architecture
Benefits
• Types of parallelism
• Data parallelism – distributes subsets of the same
data across multiple cores, same operation on
each
• Task parallelism – distributing threads across
cores, each thread performing unique operation
• As # of threads grows, so does architectural
support for threading
• CPUs have cores as well as hardware threads
• Consider Oracle SPARC T4 with 8 cores, and 8
hardware threads per core
Concurrency vs. Parallelism
Concurrent execution on single-core system:
• That is, if application is 75% parallel / 25% serial, moving from 1 to 2 cores
results in speedup of 1.6 times
• As N approaches infinity, speedup approaches 1 / S
• But does the law take into account contemporary multicore systems?
User Threads and Kernel Threads
• Many-to-One
• One-to-One
• Many-to-Many
Many-to-One
• Many user-level threads mapped
to single kernel thread
• One thread blocking causes all to
block
• Multiple threads may not run in
parallel on muticore system
because only one may be in kernel
at a time
• Few systems currently use this
model
• Examples:
• Solaris Green Threads
• GNU Portable Threads
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
• Number of threads per process
sometimes restricted due to overhead
• Examples
• Windows
• Linux
• Solaris 9 and later
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
• Solaris prior to version 9
• Windows with the
ThreadFiber package
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
Thread Libraries
• Windows Threads
• Linux Threads
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
Windows Threads (Cont.)
Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013