0% found this document useful (0 votes)
18 views35 pages

Lec04 2-Threads

The document discusses threads and concurrency in operating systems. It covers topics like multithreading models, thread libraries, implicit threading, and issues with multithreaded programming. It also provides examples of thread implementation in Windows and Linux.

Uploaded by

aman28
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views35 pages

Lec04 2-Threads

The document discusses threads and concurrency in operating systems. It covers topics like multithreading models, thread libraries, implicit threading, and issues with multithreaded programming. It also provides examples of thread implementation in Windows and Linux.

Uploaded by

aman28
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 35

Chapter 4: Threads &

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

 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 – 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

 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 – 10th Edition 4.6 Silberschatz, Galvin and Gagne ©2018
Multicore Programming

 Multicore or multiprocessor systems putting pressure on


programmers, challenges include:
 Dividing activities
 Balance
 Data splitting
 Data dependency
 Testing and debugging
 Parallelism implies a system can perform more than one
task simultaneously
 Concurrency supports more than one task making
progress
 Single processor / core, scheduler providing
concurrency

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:

 Parallelism on a multi-core system:

Operating System Concepts – 10th Edition 4.9 Silberschatz, Galvin and Gagne ©2018
Single and Multithreaded Processes

Operating System Concepts – 10th Edition 4.10 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

 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

Serial portion of an application has disproportionate


effect on performance gained by adding additional cores

 But does the law take into account contemporary


multicore systems?
Operating System Concepts – 10th Edition 4.11 Silberschatz, Galvin and Gagne ©2018
User Threads and Kernel Threads

 User threads - management done by user-level threads library


 Three primary thread libraries:
 POSIX Pthreads
 Windows threads
 Java threads
 Kernel threads - Supported by the Kernel
 Examples – virtually all general purpose operating systems, including:
 Windows
 Solaris
 Linux
 Tru64 UNIX
 Mac OS X

Operating System Concepts – 10th Edition 4.12 Silberschatz, Galvin and Gagne ©2018
Multithreading Models

 Many-to-One

 One-to-One

 Many-to-Many

Operating System Concepts – 10th Edition 4.13 Silberschatz, Galvin and Gagne ©2018
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

Operating System Concepts – 10th Edition 4.14 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
 Windows
 Linux
 Solaris 9 and later

Operating System Concepts – 10th Edition 4.15 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
package

Operating System Concepts – 10th Edition 4.16 Silberschatz, Galvin and Gagne ©2018
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 – 10th Edition 4.17 Silberschatz, Galvin and Gagne ©2018
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

Operating System Concepts – 10th Edition 4.18 Silberschatz, Galvin and Gagne ©2018
Pthreads

 May be provided either as user-level or kernel-level


 A POSIX standard (IEEE 1003.1c) API for thread
creation and synchronization
 Specification, not implementation
 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 – 10th Edition 4.19 Silberschatz, Galvin and Gagne ©2018
Pthreads Example

Operating System Concepts – 10th Edition 4.20 Silberschatz, Galvin and Gagne ©2018
Pthreads
Pthreads Example
Example (Cont.)(Cont.)

Operating System Concepts – 10th Edition 4.21 Silberschatz, Galvin and Gagne ©2018
Pthreads Code for Joining 10 Threads

Operating System Concepts – 9 th Edition 4. 21 Silberschatz, Galvin and Gagne ©2013

Operating System Concepts – 10th Edition 4.22 Silberschatz, Galvin and Gagne ©2018
Windows Multithreaded C Program

Operating System Concepts – 10th Edition 4.23 Silberschatz, Galvin and Gagne ©2018
Windows Multithreaded C Program (Cont.)

Operating System Concepts – 10th Edition 4.24 Silberschatz, Galvin and Gagne ©2018
Java Threads

 Java threads are managed by the JVM


 Typically implemented using the threads model
provided by underlying OS
 Java threads may be created by:

 Extending Thread class


 Implementing the Runnable interface

class Task implements Runnable


{
public void run() {
System.out.println("I am a thread.");
}
}
Thread worker = new Thread(new Task());
worker.start();
Operating System Concepts – 10th Edition 4.25 Silberschatz, Galvin and Gagne ©2018
Java Threads
 Lambda Expressions in Java
 Similar to functional programming languages
 Java versions 1.8 onwards
 Cleaner syntax without defining a separate class that
implements runnable

Runnable task = () -> {


System.out.println("I am a thread.");
};

Thread worker = new Thread(task);


worker.start();
 Invoking the start() method for the new Thread object
does two things:
 1. It allocates memory and initializes a new thread in
the JVM.
 2. It calls the run() method, making the thread eligible
to be run by the JVM.
Operating System Concepts – 10th Edition 4.26 Silberschatz, Galvin and Gagne ©2018
Java Multithreaded Program

Operating System Concepts – 10th Edition 4.27 Silberschatz, Galvin and Gagne ©2018
Java Multithreaded Program (Cont.)

Operating System Concepts – 10th Edition 4.28 Silberschatz, Galvin and Gagne ©2018
Implicit Threading

 Growing in popularity as numbers of threads increase, program


correctness more difficult with explicit threads
 Creation and management of threads done by compilers and
run-time libraries rather than programmers
 Application developers identify tasks—not threads—that can run
in parallel
 A task is written as a function, the run-time library maps to a
separate thread, typically using the many-to-many model
 Developers only need to identify parallel tasks, and the libraries
determine the specific details of thread creation and
management.
 Four methods explored
 Thread Pools
 Fork join
 OpenMP
 Grand Central Dispatch
 Other methods include Microsoft Threading Building Blocks
Operating System Concepts – 10th Edition 4.29 Silberschatz, Galvin and Gagne ©2018
Thread Pools
 Create a number of threads at start-up and place 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
 i.e. Tasks could be scheduled to execute after a time
delay or to run periodically
 Windows API supports thread pools, a function that is to run as
a separate thread is defined

Operating System Concepts – 10th Edition 4.30 Silberschatz, Galvin and Gagne ©2018
Fork Join
 The main parent thread creates (forks) one or more child threads
and then waits for the children to terminate and join with it
 This thread creation technique is an excellent candidate for
implicit threading
 A library manages the number of threads that are created and is
also responsible for assigning tasks to threads.
 In some ways, this fork-join model is a synchronous version of
thread pools in which a library determines the actual number of
threads to create

Operating System Concepts – 10th Edition 4.31 Silberschatz, Galvin and Gagne ©2018
Fork Join in Java
 Java introduced a fork-join library in Version 1.7 of the API that is
designed to be used with recursive divide-and-conquer
algorithms such as Quicksort and Mergesort.
 Separate tasks are forked during the divide step and assigned
smaller subsets of the original problem
 The general recursive algorithm behind Java's fork-join model:

Task(problem)
if problem is small enough
solve the problem directly
else
subtask1 = fork(new Task(subset of problem)
subtask2 = fork(new Task(subset of problem)

result1 = join(subtask1)
result2 = join(subtask2)

return combined results

Operating System Concepts – 10th Edition 4.32 Silberschatz, Galvin and Gagne ©2018
Fork Join in Java
 Example: a divide-and-conquer algorithm that sums all elements
in an array of integers.
 In Version 1.7 of the API Java introduced a new thread pool—the
ForkJoinPool—that can be assigned tasks that inherit the abstract
base class ForkJoinTask (which for now we will assume is the
SumTask class).
 The following creates a ForkJoinPool object and submits the initial
task via its invoke() method:
ForkJoinPool pool = new ForkJoinPool();
// array contains the integers to be summed
int[] array = new int[SIZE];

SumTask task = new SumTask(0, SIZE - 1, array);


int sum = pool.invoke(task);

 Upon completion, the initial call to invoke() returns the


summation of array

Operating System Concepts – 10th Edition 4.33 Silberschatz, Galvin and Gagne ©2018
Fork Join in Java
import java.util.concurrent.*;

public class SumTask extends RecursiveTask<Integer>
{
static final int THRESHOLD = 1000;

private int begin;


private int end;
private int[] array;

public SumTask(int begin, int end, int[] array) {


this.begin = begin;
this.end = end;
this.array = array;
}
protected Integer compute() {
if (end - begin < THRESHOLD) {
int sum = 0;
for (int i = begin; i <= end; i++)
sum += array[i];

return sum;
}
else {
int mid = (begin + end) / 2;

SumTask leftTask = new SumTask(begin, mid, array);


SumTask rightTask = new SumTask(mid + 1, end, array);

leftTask.fork();
rightTask.fork();

return rightTask.join() + leftTask.join();


}
}
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

You might also like