0% found this document useful (0 votes)
19 views25 pages

Threads 4

The document discusses the concept of threads in operating systems, highlighting their importance in multithreaded applications and the benefits of using threads over processes. It covers various models of thread management, including user and kernel threads, and explains thread control blocks, cancellation, and signal handling in multithreaded environments. Additionally, it introduces the POSIX Pthreads API for thread creation and synchronization, along with examples of its implementation.

Uploaded by

f20220457
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views25 pages

Threads 4

The document discusses the concept of threads in operating systems, highlighting their importance in multithreaded applications and the benefits of using threads over processes. It covers various models of thread management, including user and kernel threads, and explains thread control blocks, cancellation, and signal handling in multithreaded environments. Additionally, it introduces the POSIX Pthreads API for thread creation and synchronization, along with examples of its implementation.

Uploaded by

f20220457
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 25

OPERATING SYSTEMS (CS F372)

Threads
Barsha Mitra
BITS Pilani CSIS Dept., BITS Pilani, Hyderabad Campus
Hyderabad Campus
Motivation
Most modern applications are multithreaded
Process creation is heavy-weight while thread creation is light-weight
Increases efficiency

BITS Pilani, Hyderabad Campus


Motivation

create new
process to
send request service request Child
Client Server
Server

wait for future


client requests

BITS Pilani, Hyderabad Campus


Motivation

create new
thread to service
send request request
Client Server Thread

wait for future


client requests

BITS Pilani, Hyderabad Campus


What is Thread?
Basic unit of CPU utilization
Comprises a thread ID, program
counter, registers and stack
Shares with other threads
belonging to the same program
code section
data section
OS resources like open files
global variables
heap

BITS Pilani, Hyderabad Campus


Benefits of Multithreading
 Responsiveness – may allow continued execution if part of process is blocked,
useful for user interfaces in interactive environments
 Resource Sharing – threads share memory and resources of process, easier than
shared memory or message passing
 Economy – cheaper than process creation, thread switching has lower overhead
than process context switching
 Scalability – multithreaded process can take advantage of multiprocessor
architectures

BITS Pilani, Hyderabad Campus


Concurrency vs Parallelism
 Parallelism implies a system can perform more than one task simultaneously
 Concurrency supports more than one task making progress
 Single processor / core system provides concurrency

BITS Pilani, Hyderabad Campus


Types of parallelism

 Data parallelism – distributes subsets of the same data across multiple cores,
same operation on each subset

 Task parallelism – distributes tasks/threads across cores, each thread


performing unique operation, threads may be operating on same or different
data

BITS Pilani, Hyderabad Campus


Thread Control Block
Thread Identifier: Unique id (tid) is assigned to every new thread

Stack pointer: Points to thread's stack in the process


 data structure in the
Program counter of the thread
kernel which
contains thread-
State of the thread (running, ready, waiting)
specific information
needed to manage it
Thread's register values

Pointer to the PCB of the process that created it

Pointer(s) to the other thread(s) that were created by this thread


BITS Pilani, Hyderabad Campus
User Threads
Management done by No kernel support,  Three primary thread
user-level threads kernel does not libraries:
library recognize these threads  POSIX Pthreads
 Windows threads
User Threads  Java threads
(User Mode)
Invoking a func. in the Each thread is
All codes & data API results in a local represented by a PC,
structures exist in user func. call in user space & register, stack and TCB
space not a system call

BITS Pilani, Hyderabad Campus


Kernel Threads
Threads recognized & System calls are  virtually all general
managed by kernel, provided to create & purpose OS support
kernel-level library manage threads by OS kernel threads:
 Windows
Kernel Threads  Solaris
(Kernel Mode)  Linux
 Mac OS X
All codes & data Invoking a func. in the
structures exist in kernel API results in a system
space call

BITS Pilani, Hyderabad Campus


Many-to-One Model

 Many user-level threads mapped to single


kernel thread
 Thread management done by thread library in
user space
 No restriction on the no. of user threads
USER SPACE
 One thread blocking causes the entire process
to block as only one kernel thread is
associated with the process
 Multiple threads do not run in parallel on
multicore system
 Few systems currently use this model KERNEL SPACE
 Example:
 Solaris Green Threads
BITS Pilani, Hyderabad Campus
One-to-One Model

 Each user-level thread maps to a kernel


thread
USER SPACE
 Creating a user-level thread creates a
kernel thread
 More concurrency than many-to-one
 Number of threads per process
sometimes restricted due to overhead
 Examples:
 Windows
 Linux KERNEL SPACE
 Solaris 9 and later

BITS Pilani, Hyderabad Campus


Many-to-Many Model
 Allows many user level threads to be mapped
to many (smaller or equal no.) kernel threads
 Allows OS to create a sufficient number of
kernel threads
 When a user thread performs a blocking system USER SPACE

call, the kernel can schedule another thread for


execution
 No restriction on no. of user threads
 No. of kernel threads may be application or m/c
KERNEL SPACE
specific

BITS Pilani, Hyderabad Campus


Two-Level Model

 Similar to M:M, except that it allows a


user thread to be bound to kernel
thread
 Examples
 IRIX USER SPACE
 HP-UX
 Tru64 UNIX
 Solaris 8 and earlier

KERNEL SPACE

BITS Pilani, Hyderabad Campus


Pthreads
 A POSIX standard API for thread creation and synchronization
 Specification, not implementation
 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)

BITS Pilani, Hyderabad Campus


Pthreads
 pthread_t
 pthread_attr_t
 int pthread_attr_init (pthread_attr_t *attr);
 int pthread_create (pthread_t *tid, const pthread_attr_t *attr,
void * (*start_routine) (void *), void *arg);

BITS Pilani, Hyderabad Campus


Pthreads
 int pthread_equal (pthread_t tid1, pthread_t tid2);
 void pthread_exit (void *ptr);
 int pthread_join (pthread_t tid, void **retval);
 pthread_t pthread_self ( );

BITS Pilani, Hyderabad Campus


#include <pthread.h>
#include <stdio.h>
int sum; /* this data is shared by the threads */
Pthreads Example
void *runner(void *param); /* threads call this function */
int main(int argc, char *argv[])
{
/* The thread will begin control in this
pthread_t tid; /* the thread identifier */
function */
pthread_attr_t attr; /* set of thread attributes */ *runner(void *param)
void
if (argc < 2) { {
fprintf(stderr, “No argument\n"); int i, upper = atoi(param);
sum = 0;
return -1; }
for (i = 1; i <= upper; i++)
if (atoi(argv[1]) < 0) { sum += i;
fprintf(stderr,"%d must be >= pthread_exit(0);
0",atoi(argv[1])); }
return -1; }
pthread_attr_init(&attr); /* set the default synchronous
attributes */ threading
pthread_create(&tid, &attr, runner, argv[1]); /*
create the thread */
pthread_join(tid, NULL); /* main thread waits for
the thread to exit */ BITS Pilani, Hyderabad Campus
fork() and exec()
 If one thread in a program calls fork(), does the new process duplicate all threads, or is the
new process single-threaded?
 Two versions of fork(), one that duplicates all threads and another that duplicates only the
thread that invoked the fork() system call
 exec()
 if a thread invokes exec(), the program specified in the parameter to exec() will replace
the entire process—including all threads
 If exec() is called immediately after forking, then duplicating all threads is unnecessary, as
the program specified in the parameters to exec() will replace the process
 duplicating only the calling thread is appropriate
 If the separate process does not call exec() after forking, the separate process should
duplicate all threads

BITS Pilani, Hyderabad Campus


Signal Handling
Signals are used to notify a process that a particular event has occurred

Signal is delivered to a process

When delivered, signal handler (default/user-defined) is used to process signals

Synchronous signals
• illegal memory access, div. by 0
• delivered to the same process that performed the operation generating the signal

Asynchronous signals
• generated by an event external to a running process
• the running process receives the signal asynchronously
• Ctrl + C, timer expiration
BITS Pilani, Hyderabad Campus
Signal Handling
 For single-threaded process, signal is delivered to process
 Where should a signal be delivered for multi-threaded process?
 How to deliver a signal depends on the type of signal generated
 synchronous signals  thread causing the signal and not to other
threads in the process
 some asynchronous signals (<Ctrl + C>)  to all threads
 Most multithreaded versions of UNIX allow a thread to specify which
signals it will accept and which it will block
 Asynchronous signal may be delivered only to those threads that are
not blocking it

BITS Pilani, Hyderabad Campus


Thread Cancellation
Terminating a thread before it has finished
Thread to be canceled is target thread
Two approaches:
Asynchronous cancellation – one thread terminates the target thread immediately
Deferred cancellation allows the target thread to periodically check if it should be
cancelled, target thread can terminate itself in orderly fashion
What about freeing resources??
pthread_t tid;
/* create the thread */
pthread_create(&tid, &attr, worker, NULL);
...
/* cancel the thread */
pthread_cancel(tid);

BITS Pilani, Hyderabad Campus


Thread Cancellation
Invoking thread cancellation requests cancellation
Actual cancellation depends on how the target thread is set up to handle the request

default type

Deferred
Cancellation only occurs when thread reaches cancellation point
pthread_testcancel() creates a cancelation point within the calling
thread, so that a thread that is otherwise executing code that contains no
cancelation points will respond to a cancelation request
If cancellation request is pending, cleanup handler is invoked to release acquired
resources
BITS Pilani, Hyderabad Campus
Thank You

BITS Pilani, Hyderabad Campus

You might also like