Chapter 4 Threads Concurrency Operating System Concepts 10

  • Slides: 63
Download presentation
Chapter 4: Threads & Concurrency Operating System Concepts – 10 th Edition Silberschatz, Galvin

Chapter 4: Threads & Concurrency Operating System Concepts – 10 th Edition Silberschatz, Galvin and Gagne © 2018

Chapter 4: Threads n Overview n Multicore Programming n Multithreading Models n Thread Libraries

Chapter 4: Threads n Overview n Multicore Programming n Multithreading Models n Thread Libraries n Implicit Threading n Threading Issues n Operating System Examples Operating System Concepts – 10 th Edition 4. 2 Silberschatz, Galvin and Gagne © 2018

Objectives n Identify the basic components of a thread, and contrast threads and processes

Objectives n Identify the basic components of a thread, and contrast threads and processes n Describe the benefits and challenges of designng multithreaded applications n Illustrate different approaches to implicit threading including thread pools, fork-join, and Grand Central Dispatch n Describe how the Windows and Linux operating systems represent threads n Design multithreaded applications using the Pthreads, Java, and Windows threading APIs Operating System Concepts – 10 th Edition 4. 3 Silberschatz, Galvin and Gagne © 2018

Motivation n Most modern applications are multithreaded n Threads run within application n Multiple

Motivation n Most modern applications are multithreaded n Threads run within application n Multiple tasks with the application can be implemented by separate threads l Update display l Fetch data l Spell checking l Answer a network request n Process creation is heavy-weight while thread creation is light- weight n Can simplify code, increase efficiency n Kernels are generally multithreaded Operating System Concepts – 10 th Edition 4. 4 Silberschatz, Galvin and Gagne © 2018

Single and Multithreaded Processes Operating System Concepts – 10 th Edition 4. 5 Silberschatz,

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

Multithreaded Server Architecture Operating System Concepts – 10 th Edition 4. 6 Silberschatz, Galvin

Multithreaded Server Architecture Operating System Concepts – 10 th Edition 4. 6 Silberschatz, Galvin and Gagne © 2018

Benefits n Responsiveness – may allow continued execution if part of process is blocked,

Benefits n Responsiveness – may allow continued execution if part of process is blocked, especially important for user interfaces n Resource Sharing – threads share resources of process, easier than shared memory or message passing n Economy – cheaper than process creation, thread switching lower overhead than context switching n Scalability – process can take advantage of multicore architectures Operating System Concepts – 10 th Edition 4. 7 Silberschatz, Galvin and Gagne © 2018

Multicore Programming n Multicore or multiprocessor systems putting pressure on programmers, challenges include: l

Multicore Programming n Multicore or multiprocessor systems putting pressure on programmers, challenges include: l Dividing activities l Balance l Data splitting l Data dependency l Testing and debugging n Parallelism implies a system can perform more than one task simultaneously n Concurrency supports more than one task making progress l Single processor / core, scheduler providing concurrency Operating System Concepts – 10 th Edition 4. 8 Silberschatz, Galvin and Gagne © 2018

Concurrency vs. Parallelism n Concurrent execution on single-core system: n Parallelism on a multi-core

Concurrency vs. Parallelism n Concurrent execution on single-core system: n Parallelism on a multi-core system: Operating System Concepts – 10 th Edition 4. 9 Silberschatz, Galvin and Gagne © 2018

Multicore Programming n Types of parallelism l Data parallelism – distributes subsets of the

Multicore Programming n Types of parallelism l Data parallelism – distributes subsets of the same data across multiple cores, same operation on each l Task parallelism – distributing threads across cores, each thread performing unique operation Operating System Concepts – 10 th Edition 4. 10 Silberschatz, Galvin and Gagne © 2018

Data and Task Parallelism Operating System Concepts – 10 th Edition 4. 11 Silberschatz,

Data and Task Parallelism Operating System Concepts – 10 th Edition 4. 11 Silberschatz, Galvin and Gagne © 2018

Amdahl’s Law n Identifies performance gains from adding additional cores to an application that

Amdahl’s Law n Identifies performance gains from adding additional cores to an application that has both serial and parallel components n S is serial portion n N processing cores n That is, if application is 75% parallel / 25% serial, moving from 1 to 2 cores results in speedup of 1. 6 times n As N approaches infinity, speedup approaches 1 / S Serial portion of an application has disproportionate effect on performance gained by adding additional cores n But does the law take into account contemporary multicore systems? Operating System Concepts – 10 th Edition 4. 12 Silberschatz, Galvin and Gagne © 2018

Amdahl’s Law Operating System Concepts – 10 th Edition 4. 13 Silberschatz, Galvin and

Amdahl’s Law Operating System Concepts – 10 th Edition 4. 13 Silberschatz, Galvin and Gagne © 2018

User Threads and Kernel Threads n User threads - management done by user-level threads

User Threads and Kernel Threads n User threads - management done by user-level threads library n Three primary thread libraries: l POSIX Pthreads l Windows threads l Java threads n Kernel threads - Supported by the Kernel n Examples – virtually all general purpose operating systems, including: l Windows l Linux l Mac OS X l i. OS l Android Operating System Concepts – 10 th Edition 4. 14 Silberschatz, Galvin and Gagne © 2018

User and Kernel Threads Operating System Concepts – 10 th Edition 4. 15 Silberschatz,

User and Kernel Threads Operating System Concepts – 10 th Edition 4. 15 Silberschatz, Galvin and Gagne © 2018

Multithreading Models n Many-to-One n One-to-One n Many-to-Many Operating System Concepts – 10 th

Multithreading Models n Many-to-One n One-to-One n Many-to-Many Operating System Concepts – 10 th Edition 4. 16 Silberschatz, Galvin and Gagne © 2018

Many-to-One n Many user-level threads mapped to single kernel thread n One thread blocking

Many-to-One n Many user-level threads mapped to single kernel thread n One thread blocking causes all to block n Multiple threads may not run in parallel on muticore system because only one may be in kernel at a time n Few systems currently use this model n Examples: l Solaris Green Threads l GNU Portable Threads Operating System Concepts – 10 th Edition 4. 17 Silberschatz, Galvin and Gagne © 2018

One-to-One n Each user-level thread maps to kernel thread n Creating a user-level thread

One-to-One n Each user-level thread maps to kernel thread n Creating a user-level thread creates a kernel thread n More concurrency than many-to-one n Number of threads per process sometimes restricted due to overhead n Examples l Windows l Linux Operating System Concepts – 10 th Edition 4. 18 Silberschatz, Galvin and Gagne © 2018

Many-to-Many Model n Allows many user level threads to be mapped to many kernel

Many-to-Many Model n Allows many user level threads to be mapped to many kernel threads n Allows the operating system to create a sufficient number of kernel threads n Windows with the Thread. Fiber package n Otherwise not very common Operating System Concepts – 10 th Edition 4. 19 Silberschatz, Galvin and Gagne © 2018

Two-level Model n Similar to M: M, except that it allows a user thread

Two-level Model n Similar to M: M, except that it allows a user thread to be bound to kernel thread Operating System Concepts – 10 th Edition 4. 20 Silberschatz, Galvin and Gagne © 2018

Thread Libraries n Thread library provides programmer with API for creating and managing threads

Thread Libraries n Thread library provides programmer with API for creating and managing threads n Two primary ways of implementing l Library entirely in user space l Kernel-level library supported by the OS Operating System Concepts – 10 th Edition 4. 21 Silberschatz, Galvin and Gagne © 2018

Pthreads n May be provided either as user-level or kernel-level n A POSIX standard

Pthreads n May be provided either as user-level or kernel-level n A POSIX standard (IEEE 1003. 1 c) API for thread creation and synchronization n Specification, not implementation n API specifies behavior of the thread library, implementation is up to development of the library n Common in UNIX operating systems (Linux & Mac OS X) Operating System Concepts – 10 th Edition 4. 22 Silberschatz, Galvin and Gagne © 2018

Pthreads Example Operating System Concepts – 10 th Edition 4. 23 Silberschatz, Galvin and

Pthreads Example Operating System Concepts – 10 th Edition 4. 23 Silberschatz, Galvin and Gagne © 2018

Pthreads Example (cont) Operating System Concepts – 10 th Edition 4. 24 Silberschatz, Galvin

Pthreads Example (cont) Operating System Concepts – 10 th Edition 4. 24 Silberschatz, Galvin and Gagne © 2018

Pthreads Code for Joining 10 Threads Operating System Concepts – 10 th Edition 4.

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

Windows Multithreaded C Program Operating System Concepts – 10 th Edition 4. 26 Silberschatz,

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

Windows Multithreaded C Program (Cont. ) Operating System Concepts – 10 th Edition 4.

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

Java Threads n Java threads are managed by the JVM n Typically implemented using

Java Threads n Java threads are managed by the JVM n Typically implemented using the threads model provided by underlying OS n Java threads may be created by: l Extending Thread class l Implementing the Runnable interface l Standard practice is to implement Runnable interface Operating System Concepts – 10 th Edition 4. 28 Silberschatz, Galvin and Gagne © 2018

Java Threads Implementing Runnable interface: Creating a thread: Waiting on a thread: Operating System

Java Threads Implementing Runnable interface: Creating a thread: Waiting on a thread: Operating System Concepts – 10 th Edition 4. 29 Silberschatz, Galvin and Gagne © 2018

Java Executor Framework n Rather than explicitly creating threads, Java also allows thread creation

Java Executor Framework n Rather than explicitly creating threads, Java also allows thread creation around the Executor interface: n The Executor is used as follows: Operating System Concepts – 10 th Edition 4. 30 Silberschatz, Galvin and Gagne © 2018

Java Executor Framework Operating System Concepts – 10 th Edition 4. 31 Silberschatz, Galvin

Java Executor Framework Operating System Concepts – 10 th Edition 4. 31 Silberschatz, Galvin and Gagne © 2018

Java Executor Framework (cont) Operating System Concepts – 10 th Edition 4. 32 Silberschatz,

Java Executor Framework (cont) Operating System Concepts – 10 th Edition 4. 32 Silberschatz, Galvin and Gagne © 2018

Implicit Threading n Growing in popularity as numbers of threads increase, program correctness more

Implicit Threading n Growing in popularity as numbers of threads increase, program correctness more difficult with explicit threads n Creation and management of threads done by compilers and run-time libraries rather than programmers n Five methods explored l Thread Pools l Fork-Join l Open. MP l Grand Central Dispatch l Intel Threading Building Blocks Operating System Concepts – 10 th Edition 4. 33 Silberschatz, Galvin and Gagne © 2018

Thread Pools n Create a number of threads in a pool where they await

Thread Pools n Create a number of threads in a pool where they await work n Advantages: l Usually slightly faster to service a request with an existing thread than create a new thread l Allows the number of threads in the application(s) to be bound to the size of the pool l 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 n Windows API supports thread pools: Operating System Concepts – 10 th Edition 4. 34 Silberschatz, Galvin and Gagne © 2018

Java Thread Pools n Three factory methods for creating thread pools in Executors class:

Java Thread Pools n Three factory methods for creating thread pools in Executors class: Operating System Concepts – 10 th Edition 4. 35 Silberschatz, Galvin and Gagne © 2018

Java Thread Pools (cont) Operating System Concepts – 10 th Edition 4. 36 Silberschatz,

Java Thread Pools (cont) Operating System Concepts – 10 th Edition 4. 36 Silberschatz, Galvin and Gagne © 2018

Fork-Join Parallelism n Multiple threads (tasks) are forked, and then joined. Operating System Concepts

Fork-Join Parallelism n Multiple threads (tasks) are forked, and then joined. Operating System Concepts – 10 th Edition 4. 37 Silberschatz, Galvin and Gagne © 2018

Fork-Join Parallelism n General algorithm fork-join strategy: Operating System Concepts – 10 th Edition

Fork-Join Parallelism n General algorithm fork-join strategy: Operating System Concepts – 10 th Edition 4. 38 Silberschatz, Galvin and Gagne © 2018

Fork-Join Parallelism Operating System Concepts – 10 th Edition 4. 39 Silberschatz, Galvin and

Fork-Join Parallelism Operating System Concepts – 10 th Edition 4. 39 Silberschatz, Galvin and Gagne © 2018

Fork-Join Parallelism in Java Operating System Concepts – 10 th Edition 4. 40 Silberschatz,

Fork-Join Parallelism in Java Operating System Concepts – 10 th Edition 4. 40 Silberschatz, Galvin and Gagne © 2018

Fork-Join Parallelism in Java Operating System Concepts – 10 th Edition 4. 41 Silberschatz,

Fork-Join Parallelism in Java Operating System Concepts – 10 th Edition 4. 41 Silberschatz, Galvin and Gagne © 2018

Fork-Join Parallelism in Java n The Fork. Join. Task is an abstract base class

Fork-Join Parallelism in Java n The Fork. Join. Task is an abstract base class n Recursive. Task and Recursive. Action classes extend Fork. Join. Task n Recursive. Task returns a result (via the return value from the compute() method) n Recursive. Action does not return a result Operating System Concepts – 10 th Edition 4. 42 Silberschatz, Galvin and Gagne © 2018

Open. MP n Set of compiler directives and an API for C, C++, FORTRAN

Open. MP n Set of compiler directives and an API for C, C++, FORTRAN n Provides support for parallel programming in shared-memory environments n Identifies parallel regions – blocks of code that can run in parallel #pragma omp parallel Create as many threads as there are cores Operating System Concepts – 10 th Edition 4. 43 Silberschatz, Galvin and Gagne © 2018

n Run the for loop in parallel Operating System Concepts – 10 th Edition

n Run the for loop in parallel Operating System Concepts – 10 th Edition 4. 44 Silberschatz, Galvin and Gagne © 2018

Grand Central Dispatch n Apple technology for mac. OS and i. OS operating systems

Grand Central Dispatch n Apple technology for mac. OS and i. OS operating systems n Extensions to C, C++ and Objective-C languages, API, and run- time library n Allows identification of parallel sections n Manages most of the details of threading n Block is in “^{ }” : ˆ{ printf("I am a block"); } n Blocks placed in dispatch queue l Assigned to available thread in thread pool when removed from queue Operating System Concepts – 10 th Edition 4. 45 Silberschatz, Galvin and Gagne © 2018

Grand Central Dispatch n Two types of dispatch queues: l serial – blocks removed

Grand Central Dispatch n Two types of dispatch queues: l serial – blocks removed in FIFO order, queue is per process, called main queue 4 Programmers can create additional serial queues within program l concurrent – removed in FIFO order but several may be removed at a time 4 Four system wide queues divided by quality of service: o QOS_CLASS_USER_INTERACTIVE o QOS_CLASS_USER_INITIATED o QOS_CLASS_USER_UTILITY o QOS_CLASS_USER_BACKGROUND Operating System Concepts – 10 th Edition 4. 46 Silberschatz, Galvin and Gagne © 2018

Grand Central Dispatch n For the Swift language a task is defined as a

Grand Central Dispatch n For the Swift language a task is defined as a closure – similar to a block, minus the caret n Closures are submitted to the queue using the dispatch_async() function: Operating System Concepts – 10 th Edition 4. 47 Silberschatz, Galvin and Gagne © 2018

Intel Threading Building Blocks (TBB) n Template library for designing parallel C++ programs n

Intel Threading Building Blocks (TBB) n Template library for designing parallel C++ programs n A serial version of a simple for loop n The same for loop written using TBB with parallel_for statement: Operating System Concepts – 10 th Edition 4. 48 Silberschatz, Galvin and Gagne © 2018

Threading Issues n Semantics of fork() and exec() system calls n Signal handling l

Threading Issues n Semantics of fork() and exec() system calls n Signal handling l Synchronous and asynchronous n Thread cancellation of target thread l Asynchronous or deferred n Thread-local storage n Scheduler Activations Operating System Concepts – 10 th Edition 4. 49 Silberschatz, Galvin and Gagne © 2018

Semantics of fork() and exec() n Does fork()duplicate only the calling thread or all

Semantics of fork() and exec() n Does fork()duplicate only the calling thread or all threads? l Some UNIXes have two versions of fork n exec() usually works as normal – replace the running process including all threads Operating System Concepts – 10 th Edition 4. 50 Silberschatz, Galvin and Gagne © 2018

Signal Handling n Signals are used in UNIX systems to notify a process that

Signal Handling n Signals are used in UNIX systems to notify a process that a particular event has occurred. n A signal handler is used to process signals n 1. Signal is generated by particular event 2. Signal is delivered to a process 3. Signal is handled by one of two signal handlers: 1. default 2. user-defined Every signal has default handler that kernel runs when handling signal l User-defined signal handler can override default l For single-threaded, signal delivered to process Operating System Concepts – 10 th Edition 4. 51 Silberschatz, Galvin and Gagne © 2018

Signal Handling (Cont. ) n Where should a signal be delivered for multi-threaded? l

Signal Handling (Cont. ) n Where should a signal be delivered for multi-threaded? l Deliver the signal to the thread to which the signal applies l Deliver the signal to every thread in the process l Deliver the signal to certain threads in the process l Assign a specific thread to receive all signals for the process Operating System Concepts – 10 th Edition 4. 52 Silberschatz, Galvin and Gagne © 2018

Thread Cancellation n Terminating a thread before it has finished n Thread to be

Thread Cancellation n Terminating a thread before it has finished n Thread to be canceled is target thread n Two general approaches: l Asynchronous cancellation terminates the target thread immediately l Deferred cancellation allows the target thread to periodically check if it should be cancelled n Pthread code to create and cancel a thread: Operating System Concepts – 10 th Edition 4. 53 Silberschatz, Galvin and Gagne © 2018

Thread Cancellation (Cont. ) n Invoking thread cancellation requests cancellation, but actual cancellation depends

Thread Cancellation (Cont. ) n Invoking thread cancellation requests cancellation, but actual cancellation depends on thread state n If thread has cancellation disabled, cancellation remains pending until thread enables it n Default type is deferred l Cancellation only occurs when thread reaches cancellation point 4 I. e. pthread_testcancel() 4 Then cleanup handler is invoked n On Linux systems, thread cancellation is handled through signals Operating System Concepts – 10 th Edition 4. 54 Silberschatz, Galvin and Gagne © 2018

Thread Cancellation in Java n Deferred cancellation uses the interrupt() method, which sets the

Thread Cancellation in Java n Deferred cancellation uses the interrupt() method, which sets the interrupted status of a thread. n A thread can then check to see if it has been interrupted: Operating System Concepts – 10 th Edition 4. 55 Silberschatz, Galvin and Gagne © 2018

Thread-Local Storage n Thread-local storage (TLS) allows each thread to have its own copy

Thread-Local Storage n Thread-local storage (TLS) allows each thread to have its own copy of data n Useful when you do not have control over the thread creation process (i. e. , when using a thread pool) n Different from local variables l Local variables visible only during single function invocation l TLS visible across function invocations n Similar to static data l TLS is unique to each thread Operating System Concepts – 10 th Edition 4. 56 Silberschatz, Galvin and Gagne © 2018

Scheduler Activations n Both M: M and Two-level models require communication to maintain the

Scheduler Activations n Both M: M and Two-level models require communication to maintain the appropriate number of kernel threads allocated to the application n Typically use an intermediate data structure between user and kernel threads – lightweight process (LWP) l Appears to be a virtual processor on which process can schedule user thread to run l Each LWP attached to kernel thread l How many LWPs to create? n Scheduler activations provide upcalls - a communication mechanism from the kernel to the upcall handler in the thread library n This communication allows an application to maintain the correct number kernel threads Operating System Concepts – 10 th Edition 4. 57 Silberschatz, Galvin and Gagne © 2018

Operating System Examples n Windows Threads n Linux Threads Operating System Concepts – 10

Operating System Examples n Windows Threads n Linux Threads Operating System Concepts – 10 th Edition 4. 58 Silberschatz, Galvin and Gagne © 2018

Windows Threads n Windows API – primary API for Windows applications n Implements the

Windows Threads n Windows API – primary API for Windows applications n Implements the one-to-one mapping, kernel-level n Each thread contains l A thread id l Register set representing state of processor l Separate user and kernel stacks for when thread runs in user mode or kernel mode l Private data storage area used by run-time libraries and dynamic link libraries (DLLs) n The register set, stacks, and private storage area are known as the context of the thread Operating System Concepts – 10 th Edition 4. 59 Silberschatz, Galvin and Gagne © 2018

Windows Threads (Cont. ) n The primary data structures of a thread include: l

Windows Threads (Cont. ) n The primary data structures of a thread include: l ETHREAD (executive thread block) – includes pointer to process to which thread belongs and to KTHREAD, in kernel space l KTHREAD (kernel thread block) – scheduling and synchronization info, kernel-mode stack, pointer to TEB, in kernel space l TEB (thread environment block) – thread id, user-mode stack, thread-local storage, in user space Operating System Concepts – 10 th Edition 4. 60 Silberschatz, Galvin and Gagne © 2018

Windows Threads Data Structures Operating System Concepts – 10 th Edition 4. 61 Silberschatz,

Windows Threads Data Structures Operating System Concepts – 10 th Edition 4. 61 Silberschatz, Galvin and Gagne © 2018

Linux Threads n Linux refers to them as tasks rather than threads n Thread

Linux Threads n Linux refers to them as tasks rather than threads n Thread creation is done through clone() system call n clone() allows a child task to share the address space of the parent task (process) l Flags control behavior n struct task_struct points to process data structures (shared or unique) Operating System Concepts – 10 th Edition 4. 62 Silberschatz, Galvin and Gagne © 2018

End of Chapter 4 Operating System Concepts – 10 th Edition Silberschatz, Galvin and

End of Chapter 4 Operating System Concepts – 10 th Edition Silberschatz, Galvin and Gagne © 2018