Chapter4 Comp354
Chapter4 Comp354
Concurrency
Operating System Concepts – 10th Edition Silberschatz, Galvin and Gagne ©2018
Chapter 4: Threads
! Overview
! Multicore Programming
! Multithreading Models
! Thread Libraries
! Implicit Threading
! Threading Issues
! Operating System Examples
Operating System Concepts – 10th Edition 4.2 Silberschatz, Galvin and Gagne ©2018
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 – 10th Edition 4.3 Silberschatz, Galvin and Gagne ©2018
Motivation
Operating System Concepts – 10th Edition 4.4 Silberschatz, Galvin and Gagne ©2018
Multithreaded Server Architecture
Operating System Concepts – 10th Edition 4.5 Silberschatz, Galvin and Gagne ©2018
Benefits
Operating System Concepts – 10th Edition 4.6 Silberschatz, Galvin and Gagne ©2018
Multicore Programming
Operating System Concepts – 10th Edition 4.7 Silberschatz, Galvin and Gagne ©2018
Multicore Programming (Cont.)
! 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
Operating System Concepts – 10th Edition 4.8 Silberschatz, Galvin and Gagne ©2018
Concurrency vs. Parallelism
! Concurrent execution on single-core system:
single core T1 T2 T3 T4 T1 T2 T3 T4 T1 …
time
core 1 T1 T3 T1 T3 T1 …
core 2 T2 T4 T2 T4 T2 …
time
Operating System Concepts – 10th Edition 4.9 Silberschatz, Galvin and Gagne ©2018
Single and Multithreaded Processes
thread thread
Operating System Concepts – 10th Edition 4.10 Silberschatz, Galvin and Gagne ©2018
Multithreaded Processes (FireFox)
! Firefox a few years ago created 2 threads per tab
Operating System Concepts – 10th Edition 4.11 Silberschatz, Galvin and Gagne ©2018
Multithreaded Processes (FireFox)
! Firefox (v58, Jan 2018)
are using a thread pool.
! When a new page is
loaded the thread
count goes up for a
short time
! When the page is
done loading, the
thread count goes
down again
Operating System Concepts – 10th Edition 4.12 Silberschatz, Galvin and Gagne ©2018
Amdahl’s Law
! Identifies performance gains from adding additional cores to an
application that has both serial and parallel components
! S is serial portion
! N processing cores
! But does the law take into account contemporary multicore systems?
Operating System Concepts – 10th Edition 4.13 Silberschatz, Galvin and Gagne ©2018
User Threads and Kernel Threads
Operating System Concepts – 10th Edition 4.14 Silberschatz, Galvin and Gagne ©2018
Multithreading Models
! Many-to-One
! One-to-One
! Many-to-Many
Operating System Concepts – 10th Edition 4.15 Silberschatz, Galvin and Gagne ©2018
Many-to-One
k kernel thread
Operating System Concepts – 10th Edition 4.16 Silberschatz, Galvin and Gagne ©2018
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
user thread
! Windows
! Linux
! Solaris 9 and later
k k k k kernel thread
Operating System Concepts – 10th Edition 4.17 Silberschatz, Galvin and Gagne ©2018
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 user thread
package
k k k kernel thread
Operating System Concepts – 10th Edition 4.18 Silberschatz, Galvin and Gagne ©2018
Two-level Model
k k k k kernel thread
Operating System Concepts – 10th Edition 4.19 Silberschatz, Galvin and Gagne ©2018
Thread Libraries
Operating System Concepts – 10th Edition 4.20 Silberschatz, Galvin and Gagne ©2018
Pthreads
Operating System Concepts – 10th Edition 4.21 Silberschatz, Galvin and Gagne ©2018
Pthreads Example
Operating System Concepts – 10th Edition 4.22 Silberschatz, Galvin and Gagne ©2018
Pthreads Example (Cont.)
Operating System Concepts – 10th Edition 4.23 Silberschatz, Galvin and Gagne ©2018
Pthreads Code for Joining 10 Threads
Operating System Concepts – 10th Edition 4.24 Silberschatz, Galvin and Gagne ©2018
C++ (v11 and newer) Threads
! Threads added to C++ starting with the 0x11 version.
! Current specification version is v20
! See how the different compilers are compliant with the standard at:
http://en.cppreference.com/w/cpp/compiler_support
! may need to add the following arguments to GCC: -std=c++17 -pthread
! API specifies behavior of the thread library, implementation is up to
development of the library
! You include the <thread> library
if (upper > 0) {
A thread runner function for (int i = 1; i <= upper; ++i)
sum += i;
}
}
Operating System Concepts – 10th Edition 4.25 Silberschatz, Galvin and Gagne ©2018
#include <iostream>
#include <cstdlib>
#include <thread>
using namespace std;
// Main Function
int main(const int argc, char *argv[]) {
int max;
if (2 != argc) {
cerr << "\nUsage: a.out <integer value>\n";
return -1;
}
if ((max = atoi(((char*)argv[1]))) < 0) {
cerr << "\nArgument must be positive\n";
return -2;
} Start the thread
// Makes the main thread wait for the new thread to finish execution,
// therefore blocks its own execution.
t1.join(); Wait for thread
to finish
cout << "\nThe sum is: " << sum;
return 0;
}
Operating System Concepts – 10th Edition 4.26 Silberschatz, Galvin and Gagne ©2018
C++ (v11 and newer) Threads
! How to compile and run
! Can use an IDE like Visual Studio or Eclipse
4 The you will need to set the command line arguments
! Use a terminal
Operating System Concepts – 10th Edition 4.27 Silberschatz, Galvin and Gagne ©2018
Windows Multithreaded C Program
Operating System Concepts – 10th Edition 4.28 Silberschatz, Galvin and Gagne ©2018
Windows Multithreaded C Program (Cont.)
Operating System Concepts – 10th Edition 4.29 Silberschatz, Galvin and Gagne ©2018
Java Threads
Operating System Concepts – 10th Edition 4.30 Silberschatz, Galvin and Gagne ©2018
Java Multithreaded Program
Operating System Concepts – 10th Edition 4.31 Silberschatz, Galvin and Gagne ©2018
Java Multithreaded Program (Cont.)
Operating System Concepts – 10th Edition 4.32 Silberschatz, Galvin and Gagne ©2018
Implicit Threading
Operating System Concepts – 10th Edition 4.33 Silberschatz, Galvin and Gagne ©2018
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
! Separating task to be performed from mechanics of
creating task allows different strategies for running task
4 i.e.Tasks could be scheduled to run periodically
! Windows API supports thread pools:
Operating System Concepts – 10th Edition 4.34 Silberschatz, Galvin and Gagne ©2018
OpenMP
" Set of compiler directives and an
API for C, C++, FORTRAN
" Provides support for parallel
programming in shared-memory
environments
" Identifies parallel regions –
blocks of code that can run in
parallel
#pragma omp parallel
Create as many threads as there are
cores
#pragma omp parallel for
for(i=0;i<N;i++) {
c[i] = a[i] + b[i];
}
Run for loop in parallel
Operating System Concepts – 10th Edition 4.35 Silberschatz, Galvin and Gagne ©2018
Grand Central Dispatch
Operating System Concepts – 10th Edition 4.36 Silberschatz, Galvin and Gagne ©2018
Grand Central Dispatch
Operating System Concepts – 10th Edition 4.37 Silberschatz, Galvin and Gagne ©2018
Threading Issues
Operating System Concepts – 10th Edition 4.38 Silberschatz, Galvin and Gagne ©2018
Semantics of fork() and exec()
Operating System Concepts – 10th Edition 4.39 Silberschatz, Galvin and Gagne ©2018
Thread Cancellation
! Terminating a thread before it has finished
! Thread to be canceled is 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
! Pthread code to create and cancel a thread:
Operating System Concepts – 10th Edition 4.42 Silberschatz, Galvin and Gagne ©2018
Thread Cancellation (Cont.)
! Invoking thread cancellation requests cancellation, but actual
cancellation depends on thread state
Operating System Concepts – 10th Edition 4.43 Silberschatz, Galvin and Gagne ©2018
Thread-Local Storage
Operating System Concepts – 10th Edition 4.44 Silberschatz, Galvin and Gagne ©2018
Scheduler Activations
! Both M:M and Two-level models require
communication to maintain the appropriate
number of kernel threads allocated to the
application
! Typically use an intermediate data structure
between user and kernel threads – lightweight
process (LWP)
! Appears to be a virtual processor on which
process can schedule user thread to run
! Each LWP attached to kernel thread
! How many LWPs to create?
! Scheduler activations provide upcalls - a
communication mechanism from the kernel to
the upcall handler in the thread library
! This communication allows an application to
maintain the correct number kernel threads
Operating System Concepts – 10th Edition 4.45 Silberschatz, Galvin and Gagne ©2018
Operating System Examples
! Windows Threads
! Linux Threads
Operating System Concepts – 10th Edition 4.46 Silberschatz, Galvin and Gagne ©2018
Windows Threads
Operating System Concepts – 10th Edition 4.47 Silberschatz, Galvin and Gagne ©2018
Windows Threads (Cont.)
Operating System Concepts – 10th Edition 4.48 Silberschatz, Galvin and Gagne ©2018
Windows Threads Data Structures
ETHREAD
thread start
address
pointer to
parent process KTHREAD
scheduling
and
synchronization
• information
•
•
kernel TEB
stack
thread identifier
• user
• stack
•
thread-local
storage
•
•
•
Operating System Concepts – 10th Edition 4.49 Silberschatz, Galvin and Gagne ©2018
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
flag meaning
Operating System Concepts – 10th Edition 4.50 Silberschatz, Galvin and Gagne ©2018
End of Chapter 4
Operating System Concepts – 10th Edition Silberschatz, Galvin and Gagne ©2018