Transcript ch04threads
Chapter 4: Threads
Typical Program
Processor utilization?
Operating System Concepts – 7th edition, Jan 23, 2005
4.2
Silberschatz, Galvin and Gagne ©2005
Without Kernel Support
Why discuss in an OS course
Without kernel support:
Threads
Responsibility on the process
Requires a thread manager
Thread Manager
compiled as part of each
multithreaded process
Appears single-threaded to OS
Responsibilities of thread
manager
Operating System
Primary control of the process
Determines
–
Which thread to execute
–
When to switch to another
thread
Operating System Concepts – 7th edition, Jan 23, 2005
4.6
Silberschatz, Galvin and Gagne ©2005
Many-to-One Model
Conceptually, no kernel support is many-to-one
Many user-level threads mapped to single kernel thread
Examples:
Solaris Green Threads
GNU Portable Threads
Known as
User Level
Threading
Operating System Concepts – 7th edition, Jan 23, 2005
4.7
Silberschatz, Galvin and Gagne ©2005
Drawback of User Level
When an application requests I/O it is put in the waiting queue
Even if thread manager suspends a thread just before an I/O
request once the TM allows a single I/O request the entire process
gets suspended
A single I/O request from any
thread causes the entire application
to be suspended
Operating System Concepts – 7th edition, Jan 23, 2005
4.8
Silberschatz, Galvin and Gagne ©2005
Kernel Support
Thread-aware kernel
Can avoid suspending a multi-threaded app on I/O
When I/O complete
Determines if process is running
Informs process of I/O completion
Thread aware kernel allows for more
efficient use of resources particularly for
high I/O applications
Operating System Concepts – 7th edition, Jan 23, 2005
4.9
Silberschatz, Galvin and Gagne ©2005
Kernel Threads
Idea of threads has even been extended to the OS, itself
Thread models
Many-to-One
One-to-One
Many-to-Many
OS’s that support kernel threads
Windows XP/2000
Solaris
Linux
Tru64 UNIX
Mac OS X
Operating System Concepts – 7th edition, Jan 23, 2005
4.10
Silberschatz, Galvin and Gagne ©2005
One-to-One
Each user-level thread maps to kernel thread
Examples
Windows NT/XP/2000
Linux
Solaris 9 and later
Drawback: must generate a kernel thread for every user thread
Operating System Concepts – 7th edition, Jan 23, 2005
4.11
Silberschatz, Galvin and Gagne ©2005
Many-to-Many Model
Can generate a kernel thread for each logical task
OS’s that support it
Solaris prior to version 9
Windows NT/2000 with the ThreadFiber package
Operating System Concepts – 7th edition, Jan 23, 2005
4.12
Silberschatz, Galvin and Gagne ©2005
Two-level Model
Similar to M:M, except that it allows a user thread to be
bound to kernel thread
Examples
IRIX
HP-UX
Tru64 UNIX
Solaris 8 and earlier
Operating System Concepts – 7th edition, Jan 23, 2005
4.13
Silberschatz, Galvin and Gagne ©2005
Thread Libraries
Three primary thread libraries:
POSIX Pthreads
Win32 threads
Available with and without kernel
Kernel support
Java threads
Kernel support depends upon host system
JVM written and compiled for each host
Operating System Concepts – 7th edition, Jan 23, 2005
4.14
Silberschatz, Galvin and Gagne ©2005
Example
Posix threads example
#include <pthread.h>
pthread_t
myThread;
pthread_create( &myThread, pointerToFunction);
pthread_join( myThread);
Operating System Concepts – 7th edition, Jan 23, 2005
4.15
Silberschatz, Galvin and Gagne ©2005
Parallel calculation example
Create an array of threads
Put jobs in a list
Create a thread for each job
Each thread watches a list of available servers
When a server becomes available, takes ownership of the server,
and sends the job to the server
When complete, thread puts job in completed list, and puts server
Operating System Concepts – 7th edition, Jan 23, 2005
Completed Jobs
Servers
Pending Jobs
in available server list
4.16
Silberschatz, Galvin and Gagne ©2005
End of Chapter 4