Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Chapter 4 Threads Chapter 4: Threads Overview Multithreading Models Thread Libraries POSIX Threads Win32 Threads Java Threads Threading Issues Operating System Concepts – 7th edition, Jan 23, 2005 4.2 Silberschatz, Galvin and Gagne ©2005 4.1 Overview Threads A thread is a basic unit of CPU utilization A heavy-weight process has a single thread of execution A multi-threaded process has multiple threads of execution Each thread is sometimes called a light-weight process A thread consists of Thread ID Program counter Register set Stack It shares the following with other threads of the same process Code section Data section Open files Signals Operating System Concepts – 7th edition, Jan 23, 2005 4.4 Silberschatz, Galvin and Gagne ©2005 Single and Multithreaded Processes signals signals PC PC Operating System Concepts – 7th edition, Jan 23, 2005 4.5 PC PC Silberschatz, Galvin and Gagne ©2005 Benefits of Multi-threaded Programming Responsiveness Resource sharing May allow a program to continue running even if part of it is blocked or is performing a lengthy operation Allows an application to have several different threads of activity within the same address space Economy More economical to context-switch between threads than between processes In Solaris, it takes 30 times longer to create a new process and five times longer to context switch to a process as compared to threads Utilization of multiprocessor architectures May allow threads to run in parallel on different processors Operating System Concepts – 7th edition, Jan 23, 2005 4.6 Silberschatz, Galvin and Gagne ©2005 4.2 Multithreading Models User Threads and Kernel Threads Support for threads are provided either At the user level for user threads At the kernel level for kernel threads User threads are supported above the kernel and are managed without kernel support Kernel threads are supported and managed directly by the operating system Virtually all contemporary operating systems support kernel threads Multithreading models consist of Many-to-One One-to-One Many-to-Many Operating System Concepts – 7th edition, Jan 23, 2005 4.8 Silberschatz, Galvin and Gagne ©2005 Many-to-One Model Many user-level threads are mapped to a single kernel thread Examples: Solaris Green Threads GNU Portable Threads Operating System Concepts – 7th edition, Jan 23, 2005 4.9 Silberschatz, Galvin and Gagne ©2005 One-to-One Model Each user-level thread is mapped to a kernel thread Examples Windows NT/XP/2000 Linux Solaris 9 and later Operating System Concepts – 7th edition, Jan 23, 2005 4.10 Silberschatz, Galvin and Gagne ©2005 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 NT/2000 with the ThreadFiber package Operating System Concepts – 7th edition, Jan 23, 2005 4.11 Silberschatz, Galvin and Gagne ©2005 4.3 Thread Libraries Thread Libraries A thread library provides an API for creating and managing threads Two primary ways of implementing a thread library Provide a library entirely in user space with no kernel support Invoking a function in the library results in a local function call in user space Provide a kernel-level library supported directly by the operating system Invoking a function in the library results in a system call to the kernel Operating System Concepts – 7th edition, Jan 23, 2005 4.13 Silberschatz, Galvin and Gagne ©2005 Thread Library Implementations POSIX Pthreads May be provided as either a user- or kernel-level library Win32 API Provided as a kernel-level library Java API Threads are the fundamental model of program execution in a Java program Thread creation and management is a central part of the Java API In the Java Virtual Machine, a Java program starts out as a single thread created by the JVM Java threads are typically implemented using the thread library that is available on the host system (Win32 API on Windows; Pthreads on UNIX) Operating System Concepts – 7th edition, Jan 23, 2005 4.14 Silberschatz, Galvin and Gagne ©2005 POSIX Pthreads Example #include <pthread.h> #include <stdio.h> int sum; /* this data is shared by the thread(s) */ void *runner(void *parameters); /* the thread */ int main(int argc, char *argv[]) { pthread_t threadID; /* the thread identifier */ pthread_attr_t attributes; /* set of attributes for the thread */ /* get the default attributes */ pthread_attr_init(&attributes); /* create the thread */ pthread_create(&threadID, &attributes, runner, argv[1]); /* now wait for the thread to exit */ pthread_join(threadID, NULL); printf("sum = %d\n", sum); } // End main Operating System Concepts – 7th edition, Jan 23, 2005 4.15 Silberschatz, Galvin and Gagne ©2005 POSIX Pthreads Example (continued) // The thread will begin control in this function void *runner(void *parameters) { int i; int upper; upper = atoi(parameters); sum = 0; if (upper > 0) { for (i = 1; i <= upper; i++) sum = sum + i; } pthread_exit(0); } // End runner Operating System Concepts – 7th edition, Jan 23, 2005 4.16 Silberschatz, Galvin and Gagne ©2005 Win32 Threads Example #include <windows.h> #include <stdio.h> DWORD Sum; /* data that is shared by the thread(s) */ DWORD WINAPI Summation(LPVOID Parameters); int main(int argc, char *argv[]) { DWORD ThreadId; HANDLE ThreadHandle; int CommandParameters = atoi(argv[1]); // create the thread ThreadHandle = CreateThread(NULL, 0, Summation, &CommandParameters, 0, &ThreadId); if (ThreadHandle == NULL) return –1; WaitForSingleObject(ThreadHandle, INFINITE); CloseHandle(ThreadHandle); printf("sum = %d\n", Sum); } // End main Operating System Concepts – 7th edition, Jan 23, 2005 4.17 Silberschatz, Galvin and Gagne ©2005 Win32 Threads Example (continued) // The thread runs in this separate function DWORD WINAPI Summation(PVOID Parameters) { DWORD Upper = *(DWORD *)Parameters; for (DWORD i = 0; i <= Upper; i++) Sum = Sum + i; // Update of global variable return 0; } // End Summation Operating System Concepts – 7th edition, Jan 23, 2005 4.18 Silberschatz, Galvin and Gagne ©2005 Java Threads Example class Sum { private int sum; public int get() { return sum; } public void set(int sum) { this.sum = sum; } } // End class Operating System Concepts – 7th edition, Jan 23, 2005 4.19 Silberschatz, Galvin and Gagne ©2005 Java Threads Example (continued) class Summation implements Runnable { private int upper; private Sum sumValue; public Summation(int upper, Sum sumValue) { this.upper = upper; this.sumValue = sumValue; } public void run() // Mandatory method { int sum = 0; for (int i = 0; i <= upper; i++) sum = sum + i; sumValue.set(sum); } } // End class Operating System Concepts – 7th edition, Jan 23, 2005 4.20 Silberschatz, Galvin and Gagne ©2005 Java Threads Example (continued) public { public { Sum int class Driver static void main(String[] args) sumObject = new Sum(); upper = Integer.parseInt(args[0]); Thread worker = new Thread(new Summation(upper, sumObject)); worker.start(); try { worker.join(); } catch (InterruptedException ie) { } System.out.println("The sum of " + upper + " is " + sumObject.get()); } // End main } // End class Operating System Concepts – 7th edition, Jan 23, 2005 4.21 Silberschatz, Galvin and Gagne ©2005 4.4 Threading Issues Issues Concerning Multithreaded Programs Semantics of fork() and exec() system calls Thread cancellation Signal handling Thread pools Thread-specific data Operating System Concepts – 7th edition, Jan 23, 2005 4.23 Silberschatz, Galvin and Gagne ©2005 Semantics of fork() and exec() The semantics of the fork() and exec() system calls change in a multithreaded program If one thread in a program calls fork(), does the new process duplicate all threads, or is the new process single-threaded? Some UNIX systems have two versions of fork() to handle both situations The exec() family of system calls works the same way as described for a process When a thread invokes an exec()function, the program specified in the function call will replace the entire process – including all threads Operating System Concepts – 7th edition, Jan 23, 2005 4.24 Silberschatz, Galvin and Gagne ©2005 Thread Cancellation Thread cancellation means to terminate a target thread (from outside of the thread) before it has normally completed Example #1: Multiple threads are searching a database. One thread returns the result and the other threads are terminated Example #2: Multiple threads are loading information in a single web page. The browser stop button is pressed and all threads loading the page are cancelled Two general approaches to thread cancellation Asynchronous cancellation Deferred cancellation One thread immediately terminates the target thread The target thread periodically checks whether it should terminate, allowing it an opportunity to terminate itself in an orderly fashion Difficulties occur in situations where Resources have been allocated to a cancelled thread A thread is canceled while in the midst of updating data that it is sharing with other threads Operating System Concepts – 7th edition, Jan 23, 2005 4.25 Silberschatz, Galvin and Gagne ©2005 Signal Handling A signal is used in UNIX to notify a process that a particular event has occurred A signal may be received either synchronously or asynchronously Depends on the source of and reason for the event being signaled All signals follow the same pattern 1. A signal is generated by the occurrence of a particular event 2. A generated signal is delivered to a process 3. Once delivered, the signal must be handled Examples: illegal memory access, divide by zero, control-C, expired timer In a multithreaded program, which thread gets delivered the signal? 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 Operating System Concepts – 7th edition, Jan 23, 2005 4.26 Silberschatz, Galvin and Gagne ©2005 Thread Pools An unlimited number of concurrently active threads could exhaust system resources, such as CPU time or memory One solution to this issue is a thread pool Create a number of threads at process startup and place them in a pool, where they sit and wait for work When a server receives a request, it awakens a thread from this pool (if one is available) and passes it the request to service Once the thread completes its service, it returns to the pool and awaits more work If the pool contains no available thread, the server waits until one becomes free Benefits Servicing a request with an existing thread is usually faster than waiting to create a thread A thread pool will limit the number of threads that exist at any one point in time This is particularly important on systems that cannot support a large number of concurrent threads Operating System Concepts – 7th edition, Jan 23, 2005 4.27 Silberschatz, Galvin and Gagne ©2005 Thread-Specific Data Threads belonging to a process share the data of the process However, each thread might need its own copy of certain data, referred to as thread-specific data For example, each transaction in a transaction processing system may be handled by a separate thread This feature is supplied by the three major APIs Operating System Concepts – 7th edition, Jan 23, 2005 4.28 Silberschatz, Galvin and Gagne ©2005 End of Chapter 4