Transcript threads
CMSC 421 Spring 2004 Section 0202
Part II: Process Management
Chapter 5
Threads
Contents
Overview
Multithreading Models
Threading Issues
Pthreads
Solaris 2 Threads
Windows 2000 Threads
Linux Threads
Java Threads
Operating System Concepts
5.2
Silberschatz, Galvin and Gagne 2002
Lightweight Process and Heavyweight
Process
Lightweight Process (LWP) or thread
Basic unit of CPU control
Typically has private
– Id, PC, register set, stacks, local storage
Shares OS resources with containing process
– Address space (Code section, data section), open
files, etc
Heavyweight Process (HWP)
Single thread
Operating System Concepts
5.3
Silberschatz, Galvin and Gagne 2002
Single and Multithreaded Processes
Operating System Concepts
5.4
Silberschatz, Galvin and Gagne 2002
Benefits
Responsiveness
Interactive program responds to user even when some
threads are blocked doing other activities
Resource Sharing
Shared address space, etc
Economy
Lower overhead in creating and context switching threads
than processes
context switch is 5 times faster
Thread creation is 30 times faster
Utilization of multi-processor architectures
Multiple threads can run on multiple processors
Operating System Concepts
5.5
Silberschatz, Galvin and Gagne 2002
User Threads
Thread management done by a user-level threads library
Kernel is unaware of user-level threads
User-level threads are faster to create and manage
However, if a thread is blocked on a system call, the
process is blocked too, and none of its other threads
continues to run
Examples
- POSIX Pthreads
- Mach C-threads
- Solaris 2 threads
Operating System Concepts
5.6
Silberschatz, Galvin and Gagne 2002
Kernel Threads
Thread management is supported by the Kernel
Slower than user threads
But kernel can schedule another thread when one thread
performs a blocking system call
Examples
- Windows 95/98/NT/2000
- Solaris
- Tru64 UNIX
- BeOS
- Linux
Operating System Concepts
5.7
Silberschatz, Galvin and Gagne 2002
Multithreading Models
Three models for implementing threads
Many-to-One
One-to-One
Many-to-Many
Operating System Concepts
5.8
Silberschatz, Galvin and Gagne 2002
Many-to-One Model
Operating System Concepts
5.9
Silberschatz, Galvin and Gagne 2002
Many-to-One
Many user-level threads are mapped to a single kernel
thread.
Multiple threads CANNOT run in parallel in a
multiprocessor system
A blocked thread blocks its process
Used on systems that do not support kernel threads.
Example
Solaris 2 Green Threads Library
Operating System Concepts
5.10
Silberschatz, Galvin and Gagne 2002
One-to-one Model
Operating System Concepts
5.11
Silberschatz, Galvin and Gagne 2002
One-to-One
Each user-level thread maps to kernel thread.
Can burden OS and slowdown application when many
threads are created (due to kernel overhead)
Examples
- Windows 95/98/NT/2000
- OS/2
Operating System Concepts
5.12
Silberschatz, Galvin and Gagne 2002
Many-to-Many Model
Operating System Concepts
5.13
Silberschatz, Galvin and Gagne 2002
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, and map user threads to them
Addresses the shortcomings of the many-to-one and oneto-one models
Examples
Solaris 2
Windows NT/2000 with the ThreadFiber package
Operating System Concepts
5.14
Silberschatz, Galvin and Gagne 2002
Threading Issues
Semantics of fork() and exec() system calls
Thread cancellation
Signal handling
Thread pools
Thread specific data
Operating System Concepts
5.15
Silberschatz, Galvin and Gagne 2002
fork() and exec() semantics
fork()
Does it duplicate ALL threads of the forking process?
Two flavors: one that duplicates and one that does not
Exec()
Replaces the whole process
Including all threads (LWPs)
Operating System Concepts
5.16
Silberschatz, Galvin and Gagne 2002
Thread Cancellation
Canceling a target thread
Asynchronous cancellation (immediate termination)
Deferred cancellation
Target thread periodically checks if it should terminate
Issues:
reclaiming resources of cancelled target thread
Shared resources with other threads
Cancellation points
Operating System Concepts
5.17
Silberschatz, Galvin and Gagne 2002
Signal Handling
Signal => Notify the process of the occurrence of a
certain event
Types of signals
Synchronous
Delivered to the same process that generated the signal
Illegal memory access, division by zero, overflow
Asynchronous
Generally, delivered to a different process than the one
generating the signal
<control><C>, timer expiry
Signals handled using
Default signal handler (run by the kernel)
User-defined signal handler
Operating System Concepts
5.18
Silberschatz, Galvin and Gagne 2002
Signal Handling (Cont.)
Options for delivering signals (depending on signal)
Only to the thread that generated the signal
To all threads of a process
To all threads not blocking the signal
To a specific/dedicated thread
Threads many choose to block certain signals
Operating System Concepts
5.19
Silberschatz, Galvin and Gagne 2002
Thread Pools and Thread-specific Data
Thread pools
Creating a large number of threads in a system can exhaust
system resources
Allocate a pool of thread’s
Allocate available threads from the thread pool to a new
“thread”
Reduces thread creation time when a request arrives
Thread-specific data
Need for supporting private storage for threads that need to
manage their own private data
Operating System Concepts
5.20
Silberschatz, Galvin and Gagne 2002
Pthreads
a POSIX standard (IEEE 1003.1c) API for thread creation,
synchronization, and management
API specifies behavior of the thread library,
implementation is up to development of the library.
Common in UNIX operating systems
Operating System Concepts
5.21
Silberschatz, Galvin and Gagne 2002
Solaris 2 Threads
Implements the Pthread API + support for user and kernel
threads
Uses LWP to multiplex user threads
Implements many-to-many model
LWP reside in kernel space
Allocates a kernel thread to each LWP
User threads can be bound to a LWP or can be unbound
Each user thread contains
Thread ID, register set (PC and stack pointer), stack, , and
priority
Each LWP contains
Register set for running user thread, stack, memory, and
accounting info
Operating System Concepts
5.22
Silberschatz, Galvin and Gagne 2002
Solaris 2 Threads
Operating System Concepts
5.23
Silberschatz, Galvin and Gagne 2002
Solaris Process
Operating System Concepts
5.24
Silberschatz, Galvin and Gagne 2002
Pthreads Example
#include <pthread.h>
#include <stdio.h>
int sum = 0; /* shared data of the threads */
void *runner(void *p);
int main(int argc, char *argv[]) {
pthread_attr_t attr;
pthread_t tid;
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, argv[1]); /* create a thread and exec runner*/
pthread_join(tid, NULL);
/* wait for thread to finish exec */
printf(“%d\n”, sum);
exit(0);
}
void *runner(void *param) {
int n = 0, i;
n = atoi(param);
sum = 0;
for(i=0; i;<n; i++) sum += i;
pthread_exit(0);
}
Operating System Concepts
5.25
Silberschatz, Galvin and Gagne 2002
Windows 2000 Threads
Implements the one-to-one mapping.
Each thread contains
- a thread id
- register set
- separate user and kernel stacks
- private data storage area
Operating System Concepts
5.26
Silberschatz, Galvin and Gagne 2002
Linux Threads
Thread creation is done through clone() system call
Linux’s trick
Store process information in separate structures and use
pointers to point to them instead of storing it directly in the
data structure for the process
Clone() allows a child task to share the address space of
the parent task (process)
Linux refers to them as tasks rather than threads.
Operating System Concepts
5.27
Silberschatz, Galvin and Gagne 2002
Java Threads
Java threads may be created by:
Extending Thread class
Implementing the Runnable interface
Java threads are managed by the JVM.
Java thread implementation depends on how the JVM is
implemented on the host OS
Can be one-to-one for JVMs on Windows 2000 etc systems
Can be many-tone on Solaris 2 green thread JVM systems
Operating System Concepts
5.28
Silberschatz, Galvin and Gagne 2002
Java Thread Example
class Summation extends Thread {
private int bound = 0;
public Summation(int n) {
bound = n;
}
public void run() {
int sum = 0;
for(int I=0; I<bound; I++)
sum += I;
System.out.println(“Sum = “ + sum);
}
}
public class Test {
public static void main(String[] args) {
Summation thr = new Summation(Integer.parseInt(args[0]);
thr.start();
}
}
Operating System Concepts
5.29
Silberschatz, Galvin and Gagne 2002
Java Thread States
Operating System Concepts
5.30
Silberschatz, Galvin and Gagne 2002