principles chapter 4 threads - github pages · user-level threads (ults) nall thread management is...

43
Chapter 4 Threads Ninth Edition By William Stallings Operating Systems: Internals and Design Principles © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Upload: others

Post on 12-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Chapter 4Threads

Ninth EditionBy William Stallings

Operating Systems:Internals

and Design Principles

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 2: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Processes and Threads

Resource Ownership

Process includes a virtual address space to hold the process imagen The OS performs a

protection function to prevent unwanted interference between processes with respect to resources

Scheduling/Execution

Follows an execution path that may be interleaved with other processesn A process has an execution

state (Running, Ready, etc.) and a dispatching priority, and is the entity that is scheduled and dispatched by the OS

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 3: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Processes and Threads

n The unit of dispatching is referred to as a thread or lightweight process

n The unit of resource ownership is referred to as a process or task

n Multithreading - The ability of an OS to support multiple, concurrent paths of execution within a single process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 4: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Single Threaded Approaches

n A single thread of execution per process, in which the concept of a thread is not recognized, is referred to as a single-threaded approach

n MS-DOS is an example Figure 4.1 Threads and Processes

one processone thread

one processmultiple threads

multiple processesone thread per process

= instruction trace

multiple processesmultiple threads per process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 5: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Multithreaded Approaches

n The right half of Figure 4.1 depicts multithreaded approaches

n A Java run-time environment is an example of a system of one process with multiple threads Figure 4.1 Threads and Processes

one processone thread

one processmultiple threads

multiple processesone thread per process

= instruction trace

multiple processesmultiple threads per process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 6: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Process§Defined in a multithreaded environment as “the unit

of resource allocation and a unit of protection”

§Associated with processes:§A virtual address space that holds the process image

§ Protected access to:§ Processors

§ Other processes (for interprocess communication)

§ Files

§ I/O resources (devices and channels)

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 7: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

One or More Threads in a Process

• An execution state (Running, Ready, etc.)• A saved thread context when not running• An execution stack• Some per-thread static storage for local

variables• Access to the memory and resources of its

processes, shared with all other threads in that process

Each thread has:

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 8: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Single-ThreadedProcess Model

ProcessControlBlock

UserAddressSpace

UserStack

KernelStack

MultithreadedProcess Model

ProcessControlBlock

UserAddressSpace

UserStack

KernelStack

UserStack

KernelStack

UserStack

KernelStack

ThreadControlBlock

Thread Thread Thread

Figure 4.2 Single Threaded and Multithreaded Process Models

ThreadControlBlock

ThreadControlBlock

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 9: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Key Benefits of Threads

Takes less time to

create a new thread than a

process

Less time to terminate a

thread than a process

Switching between two

threads takes less time than

switching between processes

Threads enhance efficiency in

communication between programs

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 10: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Thread Use in a Single-User System

nForeground and background work

nAsynchronous processing

nSpeed of execution

nModular program structure

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 11: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Most of the state information dealing with execution is maintained in thread-level data structures

n In an OS that supports threads, scheduling and dispatching is done on a thread basis

§Suspending a process involves suspending all threads of the process

§Termination of a process terminates all threads within the process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 12: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

The key states for a thread are:

n Runningn Readyn Blocked

Thread operations associated with a change in thread state are:

n Spawnn Blockn Unblockn Finish

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 13: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Figure 4.3 Remote Procedure Call (RPC) Using Threads

(a) RPC Using Single Thread

(b) RPC Using One Thread per Server (on a uniprocessor)

Time

Process 1

Blocked, waiting for response to RPC

Blocked, waiting for processor, which is in use by Thread B

Running

Thread A (Process 1)

Thread B (Process 1)

Server

Server

Server

Server

RPCRequest

RPCRequest

RPCRequest

RPCRequest

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 14: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Time

Blocked

I/Orequest

Thread A (Process 1)

Thread B (Process 1)

Thread C (Process 2)

Figure 4.4 Multithreading Example on a Uniprocessor

Ready Running

Requestcomplete

Time quantumexpires

Time quantumexpires

Processcreated

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 15: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Thread Synchronization

n It is necessary to synchronize the activities of the various threads

n All threads of a process share the same address space and other resources

n Any alteration of a resource by one thread affects the other threads in the same process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 16: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Types of Threads

User Level Thread (ULT)

Kernel level Thread (KLT)

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 17: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

User-Level Threads (ULTs)

n All thread management is done by the application

n The kernel is not aware of the existence of threads

Figure 4.5 User-Level and Kernel-Level Threads

P P

UserSpace

ThreadsLibrary

KernelSpace

P

P

UserSpace

KernelSpace

P

UserSpace

ThreadsLibrary

KernelSpace

(c) Combined(b) Pure kernel-level(a) Pure user-level

User-level thread Kernel-level thread Process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 18: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Ready Running

Blocked

Thread 1

Ready Running

Blocked

Thread 2

Ready Running

Blocked

Process B

(a)

Ready Running

Blocked

Thread 1

Ready Running

Blocked

Thread 2

Ready Running

Blocked

Process B

(b)

Ready Running

Blocked

Thread 1

Ready Running

Blocked

Thread 2

Ready

Figure 4.6 Examples of the Relationships Between User-Level Thread States and Process States

Running

Colored stateis current state

Blocked

Process B

(c)

Ready Running

Blocked

Thread 1

Ready Running

Blocked

Thread 2

Ready Running

Blocked

Process B

(d)

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 19: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Thread switching does not require kernel mode privileges

Scheduling can be application specific

ULTs can run on any OS

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 20: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Disadvantages of ULTs

n In a typical OS many system calls are blocking § As a result, when a ULT executes a system call, not

only is that thread blocked, but all of the threads within the process are blocked as well

n In a pure ULT strategy, a multithreaded application cannot take advantage of multiprocessing§ A kernel assigns one process to only one processor at a

time, therefore, only a single thread within a process can execute at a time

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 21: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Overcoming ULT Disadvantages

Jacketing• Purpose is to convert a blocking

system call into a non-blocking system call

Writing an application as multiple processes rather than multiple threads• However, this approach eliminates

the main advantage of threads

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 22: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Kernel-Level Threads (KLTs)§ Thread management is

done by the kernel§ There is no thread

management code in the application level, simply an application programming interface (API) to the kernel thread facility

§ Windows is an example of this approach

Figure 4.5 User-Level and Kernel-Level Threads

P P

UserSpace

ThreadsLibrary

KernelSpace

P

P

UserSpace

KernelSpace

P

UserSpace

ThreadsLibrary

KernelSpace

(c) Combined(b) Pure kernel-level(a) Pure user-level

User-level thread Kernel-level thread Process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 23: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Advantages of KLTs

n The kernel can simultaneously schedule multiple threads from the same process on multiple processors

n If one thread in a process is blocked, the kernel can schedule another thread of the same process

n Kernel routines themselves can be multithreaded

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 24: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Disadvantage of KLTs✽The transfer of control from one thread to another

within the same process requires a mode switch to the kernel

Operation User-Level Threads Kernel-Level

Threads Processes

Null Fork 34 948 11,300 Signal Wait 37 441 1,840

Table 4.1 Thread and Process Operation Latencies (µs)

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 25: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Combined Approachesn Thread creation is done

completely in the user space, as is the bulk of the scheduling and synchronization of threads within an application

n Solaris is a good example

Figure 4.5 User-Level and Kernel-Level Threads

P P

UserSpace

ThreadsLibrary

KernelSpace

P

P

UserSpace

KernelSpace

P

UserSpace

ThreadsLibrary

KernelSpace

(c) Combined(b) Pure kernel-level(a) Pure user-level

User-level thread Kernel-level thread Process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 26: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Threads:Processes Description Example Systems 1:1 Each thread of execution is a

unique process with its own address space and resources.

Traditional UNIX implementations

M:1 A process defines an address space and dynamic resource ownership. Multiple threads may be created and executed within that process.

Windows NT, Solaris, Linux, OS/2, OS/390, MACH

1:M A thread may migrate from one process environment to another. This allows a thread to be easily moved among distinct systems.

Ra (Clouds), Emerald

M:N Combines attributes of M:1 and 1:M cases.

TRIX

Table 4.2 Relationship between Threads and Processes

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 27: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Figure 4.7 Performance Effect of Multiple Cores

rela

tive

spee

dup

rela

tive

spee

dup

0

2

4

6

8

21number of processors

(a) Speedup with 0%, 2%, 5%, and 10% sequential portions

3 4 5 6

0%

2%

5%

10%

10%5%

15%20%

7 8

0

0.5

1.0

1.5

2.0

2.5

21number of processors

(b) Speedup with overheads

3 4 5 6 7 8

Figure 4.7 Performance Effect of Multiple Cores

rela

tive

spee

dup

rela

tive

spee

dup

0

2

4

6

8

21number of processors

(a) Speedup with 0%, 2%, 5%, and 10% sequential portions

3 4 5 6

0%

2%

5%

10%

10%5%

15%20%

7 8

0

0.5

1.0

1.5

2.0

2.5

21number of processors

(b) Speedup with overheads

3 4 5 6 7 8

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 28: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Figure 4.8 Scaling of Database Workloads on Multiple-Processor Hardware

00

16

32

48

64

16 32number of CPUs

scal

ing

48 64

perfect

scali

ng

Oracle DSS 4-way joinTMC data miningDB2 DSS scan & aggsOracle ad hoc insurance OLTP

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 29: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Applications That Benefit

§ Multithreaded native applications§ Characterized by having a small number of highly threaded

processes

§ Multiprocess applications§ Characterized by the presence of many single-threaded

processes

§ Java applications§ All applications that use a Java 2 Platform, Enterprise

Edition application server can immediately benefit from multicore technology

§ Multi-instance applications§ Multiple instances of the application in parallel

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 30: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Multithreading

Achieves concurrency without the overhead of using multiple processes

Threads within the same process can exchange

information through their common address space and

have access to the shared resources of the process

Threads in different processes can exchange

information through shared memory that has been set

up between the two processes

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 31: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Figure 4.11 Windows Thread States

Transition

Ready

Waiting

Runnable

Not Runnable

StandbyPick toRun Switch

Preempted

Block/Suspend

Unblock/ResumeResource Available

ResourceAvailable

UnblockResource Not Available

Terminate

Terminated

Running

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 32: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Solaris Process

• Includes the user’s address space, stack, and process control blockProcess

• A user-created unit of execution within a processUser-level Threads

• A mapping between ULTs and kernel threadsLightweight

Processes (LWP)

• Fundamental entities that can be scheduled and dispatched to run on one of the system processorsKernel Threads

§Makes use of four thread-related concepts:

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 33: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Hardware

Figure 4.12 Processes and Threads in Solaris

KernelSystem calls

syscall()syscall()

Process

Kernelthread

Kernelthread

Lightweightprocess (LWP)

Lightweightprocess (LWP)

userthread

userthread

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 34: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Process ID

UNIX Process Structure

User IDs

Signal Dispatch Table

File Descriptors

Memory Map

PrioritySignal Mask

RegistersSTACK

PriorityLWP ID

Signal MaskRegistersSTACK

Processor State

Process ID

Solaris Process Structure

User IDs

Signal Dispatch Table

File Descriptors

LWP 1

PriorityLWP ID

Signal MaskRegistersSTACK

LWP 2

Memory Map

Figure 4.13 Process Structure in Traditional UNIX and Solaris [LEWI96]© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 35: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

A Lightweight Process (LWP) Data Structure Includes:

n An LWP identifier

n The priority of this LWP and hence the kernel thread that supports it

n A signal mask that tells the kernel which signals will be accepted

n Saved values of user-level registers

n The kernel stack for this LWP, which includes system call arguments, results, and error codes for each call level

n Resource usage and profiling data

n Pointer to the corresponding kernel thread

n Pointer to the process structure© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 36: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

IDLE

thread_create() intr()

swtch()syscall()

wakeup()

prun() pstop() exit() reap()

preempt()RUN

PINNED

ONPROC SLEEP

STOP ZOMBIE FREE

Figure 4.14 Solaris Thread States© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 37: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Interrupts as Threads

§ Most operating systems contain two fundamental forms of concurrent activity:

Processes (threads)

Cooperate with each other and manage the use of shared data structures by primitives that enforce mutual exclusion and synchronize their execution

Interrupts Synchronized by preventing their handling for a period of time

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

§ Solaris unifies these two concepts into a single model, namely kernel threads, and the mechanisms for scheduling and executing kernel threads

§ To do this, interrupts are converted to kernel threads

Page 38: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Solaris Solution

§Solaris employs a set of kernel threads to handle interrupts

n An interrupt thread has its own identifier, priority, context, and stack

n The kernel controls access to data structures and synchronizes among interrupt threads using mutual exclusion primitives

n Interrupt threads are assigned higher priorities than all other types of kernel threads

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 39: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Linux Tasks

A process, or task, in Linux is represented by a task_struct data

structure

This structure contains information

in a number of categories

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 40: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Stopped

Ready

RunningState

Uninterruptible

Interruptible

Executing Zombie

Figure 4.15 Linux Process/Thread Model

creationscheduling

termination

signalsignal

eventsignal

orevent

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 41: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Linux Threads

Linux does not

recognize a distinction between

threads and processes

User-level threads are

mapped into kernel-

level processes

A new process is created by

copying the attributes of the current

process

The new process can be cloned so

that it shares

resources

The clone() call creates

separate stack spaces

for each process

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 42: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Linux Namespacesn A namespace enables a process to have a different

view of the system than other processes that have other associated namespaces

n There are currently six namespaces in Linuxn mntn pidn netn ipcn utsn user

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.

Page 43: Principles Chapter 4 Threads - GitHub Pages · User-Level Threads (ULTs) nAll thread management is done by the application nThe kernel is not aware of the existence of threads Figure

Summaryn Processes and threads

n Multithreadingn Thread functionality

n Types of threadsn User level and kernel level threads

n Multicore and multithreadingn Performance of Software on Multicore

n Windows process and thread managementn Management of background tasks and

application lifecycles

n Windows processn Process and thread objects

n Multithreadingn Thread states

n Support for OS subsystems

n Solaris thread and SMP managementn Multithreaded architecturen Motivation

n Process structuren Thread execution

n Interrupts as threads

n Linux process and thread managementn Tasks/threads/namespaces

n Android process and thread managementn Android applicationsn Activities

n Processes and threads

n Mac OS X grand central dispatch

© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.