Chapter 4: Threads – 7 Silberschatz, Galvin and Gagne ©2007

Chapter 4: Threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
Silberschatz, Galvin and Gagne ©2007
Chapter 4: Threads







Processes vs. Threads
User vs. Kernel Threads
Multithreading Models
Threading Issues
Pthreads
Linux Threads
Windows XP Threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.2
Silberschatz, Galvin and Gagne ©2007
Process Overheads

A full process includes numerous things:

an address space (defining all the code
and data pages)

OS resources and accounting information

a “thread of control”,

defines where the process is currently
executing

PC, registers, and stack
Creating a new process is costly

all of the structures (e.g., page tables) that
must be allocated
Communicating between processes is costly

most communication goes through the OS
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.3
Silberschatz, Galvin and Gagne ©2007
Threads and Processes




Most operating systems therefore support two entities:
 the process,
 which defines the address space and general process
attributes
 the thread,
 which defines a sequential execution stream within a process
A thread is bound to a single process.
 For each process, however, there may be many threads.
Threads are the unit of scheduling
Processes are containers in which threads execute
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.4
Silberschatz, Galvin and Gagne ©2007
Single and Multithreaded Processes
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.5
Silberschatz, Galvin and Gagne ©2007
Distinguishing Threads and Processes



Makes it easier to support multithreaded applications
 Different from multiprocessing, multiprogramming, multitasking
Concurrency (multithreading) is useful for:
 improving program structure
 Improving responsiveness
 handling concurrent events (e.g., web requests)
 building parallel programs
 sharing resources economically
 multiprocessor utilization
Is multithreading useful even on a single processor?
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.6
Silberschatz, Galvin and Gagne ©2007
Threads vs. Processes






A thread has no data segment or
heap
A thread cannot live on its own, it
must live within a process
There can be more than one
thread in a process, the first thread
calls main & has the process’s
stack
Inexpensive creation
Inexpensive context switching
If a thread dies, its stack is
reclaimed
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
•
A process has code/data/heap &
other segments
A process has at least one thread
Threads within a process share
code/data/heap, share I/O, but
each has its own stack & registers
Expensive creation
Expensive context switching
If a process dies, its resources are
reclaimed & all threads die
•
•
•
•
•
4.7
Silberschatz, Galvin and Gagne ©2007
User and Kernel Threads

User threads - Thread management done by
user-level threads library, with or without
knowledge of the kernel

Kernel threads - Threads directly supported by
the kernel:
 Windows XP/2000
 Solaris
 Linux
 Tru64 UNIX
 Mac OS X
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.8
Silberschatz, Galvin and Gagne ©2007
User vs. Kernel Threads
(a) A user-level threads package. (b) A threads package
managed by the kernel.
Example from Tanenbaum, Modern Operating Systems 3 e,
(c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.9
Silberschatz, Galvin and Gagne ©2007
Kernel Threads



Also called Lightweight Processes (LWP)
Kernel threads still suffer from performance problems
Operations on kernel threads are slow because:
 a thread operation still requires a system call
 kernel threads may be overly general
 to support needs of different users, languages, etc.
 the kernel doesn’t trust the user
 there must be lots of checking on kernel calls
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.10
Silberschatz, Galvin and Gagne ©2007
User-Level Threads




For speed, implement threads at the user level
A user-level thread is managed by the run-time system
 user-level code that is linked with your program
Each thread is represented simply by:
 PC
 Registers
 Stack
 Small control block
All thread operations are at the user-level:
 Creating a new thread
 switching between threads
 synchronizing between threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.11
Silberschatz, Galvin and Gagne ©2007
User-Level Threads

User-level threads
 the thread scheduler is part of a library, outside the kernel
 thread context switching and scheduling is done by the library
 Can either use cooperative or pre-emptive threads
 cooperative threads are implemented by:


CreateThread(), DestroyThread(), Yield(), Suspend(), etc.
pre-emptive threads are implemented with a timer (signal)
 where the timer handler decides which thread to run next
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.12
Silberschatz, Galvin and Gagne ©2007
User-Level vs. Kernel Threads
User-Level





Managed by application
Kernel not aware of thread
Context switching cheap
Can create many more
Must be used with care
Kernel-Level





Managed by kernel
Consumes kernel resources
Context switching expensive
Number limited by kernel
resources
Simpler to use
Key issue: kernel threads provide virtual processors to user-level threads,
but if all of kernel threads block, then all user-level threads will
block even if the program logic allows them to proceed
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.13
Silberschatz, Galvin and Gagne ©2007
Multiplexing User-Level Threads



The user-level thread package sees a “virtual” processor(s)
 it schedules user-level threads on these virtual processors
 each “virtual” processor is implemented by a kernel thread
The big picture:
 Create as many kernel threads as there are processors
 Create as many user-level threads as the application needs
 Multiplex user-level threads on top of the kernel-level threads
Why not just create as many kernel-level threads as app needs?
 Context switching
 Resources
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.14
Silberschatz, Galvin and Gagne ©2007
Multithreading Models
Mapping user threads to kernel threads:

Many-to-One

One-to-One

Many-to-Many
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.15
Silberschatz, Galvin and Gagne ©2007
Many-to-One


Many user-level threads
mapped to single kernel
thread
 Fast - no system calls
required
 Few system
dependencies; portable
 No parallel execution of
threads - can’t exploit
multiple CPUs
 All threads block when
one uses synchronous
I/O
Examples:
 Solaris Green Threads
 GNU Portable Threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.16
Silberschatz, Galvin and Gagne ©2007
One-to-One


Each user-level thread maps to kernel thread
 More concurrency
 Better multiprocessor performance
 Each user thread requires creation of kernel thread
 Each thread requires kernel resources; limits number of
total threads
Examples
 Windows NT/XP/2000
 Linux
 Solaris 9 and later
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.17
Silberschatz, Galvin and Gagne ©2007
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
 If U < L, no benefits of
multithreading
 If U > L, some threads
may have to wait for an
LWP to run
Examples:
 Solaris prior to version 9
 Windows NT/2000 with
the ThreadFiber package
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.18
Silberschatz, Galvin and Gagne ©2007
Two-level Model


Similar to M:M,
except that a user
thread may be
bound to kernel
thread
Examples
 IRIX
 HP-UX
 Tru64 UNIX
 Solaris 8 and
earlier
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.19
Silberschatz, Galvin and Gagne ©2007
Multithreading Issues

Semantics of fork() and exec() system calls


Thread cancellation


Which thread to deliver it to?
Thread pools


Asynchronous vs. Deferred Cancellation
Signal handling


Does fork() duplicate only the calling thread or all threads?
Creating new threads, unlimited number of threads
Scheduler activations

Maintaining the correct number of scheduler threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.20
Silberschatz, Galvin and Gagne ©2007
Thread Cancellation


Terminating a thread before it has finished
Two general approaches:
 Asynchronous cancellation terminates
the target thread immediately
 Deferred cancellation allows the target
thread to periodically check if it should be
cancelled
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.21
Silberschatz, Galvin and Gagne ©2007
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. Signal is delivered to a process
3. Signal is handled
Options:
 Deliver the signal to the thread to which the signal
applies
 Deliver the signal to every thread in the process
 Deliver the signal to certain threads in the process
 Assign a specific threa to receive all signals for the
process
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.22
Silberschatz, Galvin and Gagne ©2007
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
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.23
Silberschatz, Galvin and Gagne ©2007
Scheduler Activations



Both M:M and Two-level models require
communication to maintain the appropriate number of
kernel threads allocated to the application
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
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.24
Silberschatz, Galvin and Gagne ©2007
Pthreads (POSIX Threads)



A POSIX standard (IEEE 1003.1c) API for
thread creation and synchronization
API specifies behavior of the thread library,
implementation is up to development of the
library
Common in UNIX operating systems (Solaris,
Linux, Mac OS X)
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.25
Silberschatz, Galvin and Gagne ©2007
Example: POSIX Threads (1)
Some of the Pthreads function calls.
Example from Tanenbaum, Modern Operating Systems 3 e,
(c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.26
Silberschatz, Galvin and Gagne ©2007
POSIX Threads (2)
An example program using threads.
...
Example from Tanenbaum, Modern Operating Systems 3 e,
(c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.27
Silberschatz, Galvin and Gagne ©2007
POSIX Threads (3)
...
Figure 2-15. An example program using threads.
Example from Tanenbaum, Modern Operating Systems 3 e,
(c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.28
Silberschatz, Galvin and Gagne ©2007
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)
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.29
Silberschatz, Galvin and Gagne ©2007
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
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.30
Silberschatz, Galvin and Gagne ©2007
End of Chapter 4
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
Silberschatz, Galvin and Gagne ©2007
Backup Foils
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
Silberschatz, Galvin and Gagne ©2007
Cooperative Threads
A cooperative thread runs until it decides to give up the CPU
main()
{
tid t1 = CreateThread(fn, arg);
…
Yield(t1);
}
fn(int arg)
{
…
Yield(any);
}
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.33
Silberschatz, Galvin and Gagne ©2007
Cooperative Threads

Cooperative threads use non pre-emptive scheduling

Advantages:
 Simple
 Scientific apps
Disadvantages:
 For badly written code
Scheduler gets invoked only when Yield is called
A thread could yield the processor when it blocks for I/O



Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.34
Silberschatz, Galvin and Gagne ©2007
Non-Cooperative Threads





No explicit control passing among threads
Rely on a scheduler to decide which thread to run
A thread can be pre-empted at any point
Often called pre-emptive threads
Most modern thread packages use this approach
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.35
Silberschatz, Galvin and Gagne ©2007
Key Data Structures
your process address space
your program:
your data (shared by
all your threads):
for i (1, 10, I++)
thread_fork(I);
….
queue of thread control blocks
user-level thread code:
proc thread_fork()…
proc thread_block()…
proc thread_exit()...
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
per-thread stacks
4.36
Silberschatz, Galvin and Gagne ©2007
Pop-Up Threads
Creation of a new thread when a message arrives.
(a) Before the message arrives.
(b) After the message arrives.
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.37
Silberschatz, Galvin and Gagne ©2007
Windows XP Threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.38
Silberschatz, Galvin and Gagne ©2007
Java Threads

Java threads are managed by the JVM

Java threads may be created by:
 Implementing the Runnable interface
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.39
Silberschatz, Galvin and Gagne ©2007
Java Threads - Example Program
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.40
Silberschatz, Galvin and Gagne ©2007
Java Threads - Example Program
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.41
Silberschatz, Galvin and Gagne ©2007
Java Thread States
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.42
Silberschatz, Galvin and Gagne ©2007
Java Threads - Producer-Consumer
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.43
Silberschatz, Galvin and Gagne ©2007
Java Threads - Producer-Consumer
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.44
Silberschatz, Galvin and Gagne ©2007
Java Threads - Producer-Consumer
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.45
Silberschatz, Galvin and Gagne ©2007
Thread Cancellation
Deferred cancellation in Java
Interrupting a thread
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.46
Silberschatz, Galvin and Gagne ©2007
Thread Cancellation
Deferred cancellation in Java
Checking interruption status
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.47
Silberschatz, Galvin and Gagne ©2007
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)
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.48
Silberschatz, Galvin and Gagne ©2007
Thread Specific Data
Thread-specific data in Java.
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.49
Silberschatz, Galvin and Gagne ©2007
Solaris 2 Threads
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.50
Silberschatz, Galvin and Gagne ©2007
Solaris Process
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.51
Silberschatz, Galvin and Gagne ©2007
Thread Pools

Java provides 3 thread pool architectures:
1. Single thread executor - pool of size 1.
2. Fixed thread executor - pool of fixed size.
3. Cached thread pool - pool of unbounded size
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.52
Silberschatz, Galvin and Gagne ©2007
Thread Pools
A task to be serviced in a thread pool
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.53
Silberschatz, Galvin and Gagne ©2007
Thread Pools
Creating a thread pool in Java
Operating System Concepts with Java – 7th Edition, Nov 15, 2006
4.54
Silberschatz, Galvin and Gagne ©2007