Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads CS 170 T Yang, Sept 2012
4.2 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads Overview thread — a fundamental unit of CPU utilization that forms the basis of multithreaded computer systems Multithreading Models Thread Libraries/Operating System Examples
4.3 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Benefits of multi-threading Responsiveness Resource Sharing Shared memory Economy Scalability
4.4 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Motivation for multi-threaded servers
4.5 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Thread Model for Multicore Programming Multicore systems putting pressure on programmers, challenges include: Dividing activities Balance Data splitting Data dependency Testing and debugging
4.6 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Execution Flow Concurrent execution on a single core system Parallel execution on a multi-core system
4.7 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Difference between Single and Multithreaded Processes Shared memory access for code/data Separate control flow -> separate stack/registers
4.8 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Thread Libraries Thread library provides programmer with API for creating and managing threads Pthreads Java threads OS-specific threads Two primary ways of implementing Library entirely in user space Kernel-level library supported by the OS
4.9 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Pthreads May be provided either as user-level or kernel-level A POSIX standard (IEEE c) API for thread creation and synchronization Common in UNIX OS (Solaris, Linux, Mac OS X). In CSIL, compile a c program with gcc -lpthread
4.10 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Example of PThreads #include void *PrintHello(void * id) { printf(“Thread%d: Hello World!\n", id); pthread_exit(NULL); } void main () { pthread_t thread0, thread1; pthread_create(&thread0, NULL, PrintHello, (void *) 0); pthread_create(&thread1, NULL, PrintHello, (void *) 1); }
4.11 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Java Threads Java threads are managed by the JVM Java threads may be created by extending Thread class Thread class run, start methods yield, join sleep Synchronization synchronized methods & objects wait/notify/notifyAll conditions
4.12 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Java Threads: Example class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } public void run() { for (;;) { System.out.println(name + ": hello world"); } public class Main2 { public static void main(String [] args) { MyThread t1 = new MyThread("thread1"); MyThread t2 = new MyThread("thread2"); t1.start(); t2.start(); }
4.13 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Java Threads: example outpout thread2: hello world thread1: hello world thread2: hello world thread1: hello world thread2: hello world thread1: hello world thread2: hello world
4.14 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Kernel thread vs. user-level thread Type of threads Kernel-level threads User-level threads
4.15 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Kernel Threads Recognized and supported by the OS Kernel OS explicitly performs scheduling and context switching of kernel threads Examples Windows XP/2000 Solaris Linux Tru64 UNIX Mac OS X
4.16 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition User Threads Thread management done by user-level threads library OS kernel does not know/recognize there are multiple threads running in a user program. The user program (library) is responsible for scheduling and context switching of its threads. Three primary thread libraries: POSIX Pthreads Win32 threads Java threads
4.17 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition User- vs. Kernel-level Threads From W. Stallings, Operating Systems, 6 th Edition
4.18 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Multithreading Models When both kernel threads/user threads are available, how to map between them? Many-to-One One-to-One (e.g. Linux, Windows) Many-to-Many (e.g. Win 2K)
4.19 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Threading Issues Semantics when fork() and exec() system calls are involved. Thread cancellation (termination) Asynchronous: cancellation terminates the target thread at any time Deferred: cancellation occurs at defined points Signal handling Thread pools Thread-specific data
4.20 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition 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 Signal is generated by particular event Signal is delivered to a process 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 thread to receive all signals for the process
4.21 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition 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
4.22 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Thread Specific Data Allows each thread to have its own copy of data E.g. pthread