Download presentation
Presentation is loading. Please wait.
1
Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007 Chapter 4: Threads
2
4.2 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Chapter 4: Threads Processes vs. Threads User vs. Kernel Threads Multithreading Models Threading Issues Pthreads Linux Threads Windows XP Threads
3
4.3 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
4
4.4 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
5
4.5 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Single and Multithreaded Processes
6
4.6 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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?
7
4.7 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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 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
8
4.8 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
9
4.9 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 (a) A user-level threads package. (b) A threads package managed by the kernel. User vs. Kernel Threads Example from Tanenbaum, Modern Operating Systems 3 e, (c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
10
4.10 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
11
4.11 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
12
4.12 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
13
4.13 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
14
4.14 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
15
4.15 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Multithreading Models Mapping user threads to kernel threads: Many-to-One One-to-One Many-to-Many
16
4.16 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
17
4.17 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
18
4.18 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
19
4.19 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
20
4.20 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Multithreading Issues Semantics of fork() and exec() system calls Does fork() duplicate only the calling thread or all threads? Thread cancellation Asynchronous vs. Deferred Cancellation Signal handling Which thread to deliver it to? Thread pools Creating new threads, unlimited number of threads Scheduler activations Maintaining the correct number of scheduler threads
21
4.21 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
22
4.22 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
23
4.23 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
24
4.24 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
25
4.25 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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)
26
4.26 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Some of the Pthreads function calls. Example: POSIX Threads (1) Example from Tanenbaum, Modern Operating Systems 3 e, (c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
27
4.27 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 An example program using threads. POSIX Threads (2)... Example from Tanenbaum, Modern Operating Systems 3 e, (c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
28
4.28 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Figure 2-15. An example program using threads. POSIX Threads (3)... Example from Tanenbaum, Modern Operating Systems 3 e, (c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639
29
4.29 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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)
30
4.30 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
31
Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007 End of Chapter 4
32
Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007 Backup Foils
33
4.33 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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); }
34
4.34 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
35
4.35 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
36
4.36 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Key Data Structures your process address space your program: for i (1, 10, I++) thread_fork(I); …. user-level thread code: proc thread_fork()… proc thread_block()… proc thread_exit()... queue of thread control blocks per-thread stacks your data (shared by all your threads):
37
4.37 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Creation of a new thread when a message arrives. (a) Before the message arrives. (b) After the message arrives. Pop-Up Threads
38
4.38 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Windows XP Threads
39
4.39 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Threads Java threads are managed by the JVM Java threads may be created by: Implementing the Runnable interface
40
4.40 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Threads - Example Program
41
4.41 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Threads - Example Program
42
4.42 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Thread States
43
4.43 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Threads - Producer-Consumer
44
4.44 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Threads - Producer-Consumer
45
4.45 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Java Threads - Producer-Consumer
46
4.46 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Thread Cancellation Deferred cancellation in Java Interrupting a thread
47
4.47 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Thread Cancellation Deferred cancellation in Java Checking interruption status
48
4.48 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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)
49
4.49 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Thread Specific Data Thread-specific data in Java.
50
4.50 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Solaris 2 Threads
51
4.51 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Solaris Process
52
4.52 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 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
53
4.53 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Thread Pools A task to be serviced in a thread pool
54
4.54 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Thread Pools Creating a thread pool in Java
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.