chapter 4: threads march 17 th, 2009 instructor: hung q. ngo kyung hee university

41
Chapter 4: Threads Chapter 4: Threads March 17 th , 2009 Instructor: Hung Q. Ngo Kyung Hee University

Upload: mark-davidson

Post on 13-Dec-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

Chapter 4: ThreadsChapter 4: Threads

March 17th, 2009

Instructor: Hung Q. Ngo

Kyung Hee University

Page 2: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.2 Hung Q. Ngo 09.03.17Operating System Concepts

Chapter 4: ThreadsChapter 4: Threads

Overview

Multithreading Models

Threading Issues

Pthreads

Windows XP Threads

Linux Threads

Java Threads

Page 3: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.3 Hung Q. Ngo 09.03.17Operating System Concepts

Objectives Objectives

To introduce the notion of a thread – a fundamental unit of CPU utilization that forms the basis of multithreaded computer systems

To discuss the APIs of Pthreads, Win32, and Java thread library

Note: Some slides and/or pictures in this class areadapted from slides ©2005 Silberschatz, Galvin, and Gagne, and from lecture notes of professor Kubiatowicz (UC Berkeley)

Page 4: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.4 Hung Q. Ngo 09.03.17Operating System Concepts

Recall: Process Address ProtectionRecall: Process Address Protection

Prog 1Virtual

AddressSpace 1

Prog 2Virtual

AddressSpace 2

Code

Data

Heap

Stack

Code

Data

Heap

Stack

Data 2

Stack 1

Heap 1

OS heap & Stacks

Code 1

Stack 2

Data 1

Heap 2

Code 2

OS code

OS dataTranslation Map 1 Translation Map 2

Physical Address Space

Providing Illusion of Separate Address Space? Load new Translation Map on Switch

Page 5: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.5 Hung Q. Ngo 09.03.17Operating System Concepts

Recall: Process Control Block (PCB)Recall: Process Control Block (PCB)

Need to save information associated with each process

Process state

Program counter

CPU registers

CPU scheduling information

Memory-management information

Accounting information

I/O status information

Quiz:

where to store PCB?

How many PCB active at a time?“context”

Page 6: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.6 Hung Q. Ngo 09.03.17Operating System Concepts

Motivation ExamplesMotivation Examples

Web browser

Retrieve data

Display texts or images

Word processor

Responding to keystrokes from user

Displaying graphics

Performing spelling and grammar checking in the background

Page 7: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.7 Hung Q. Ngo 09.03.17Operating System Concepts

““Lightweight” Process with ThreadsLightweight” Process with Threads

Thread: a sequential execution stream within process (Sometimes called a “Lightweight process”)

Process still contains a single Address Space

No protection between threads

Multithreading: a single program made up of a number of different concurrent activities

Sometimes called multitasking

Why separate the concept of a thread from that of a process?

Discuss the “thread” part of a process (concurrency)

Separate from the “address space” (Protection)

Heavyweight Process Process with one thread

Page 8: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.8 Hung Q. Ngo 09.03.17Operating System Concepts

Single and Multithreaded ProcessesSingle and Multithreaded Processes

Threads encapsulate concurrency: “Active” component

Address spaces encapsulate protection: “Passive” part

Keeps buggy program from trashing the system

Why have multiple threads per address space?

Page 9: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.9 Hung Q. Ngo 09.03.17Operating System Concepts

Address Space with ThreadsAddress Space with Threads

Page 10: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.10 Hung Q. Ngo 09.03.17Operating System Concepts

Examples of multithreaded programsExamples of multithreaded programs

Embedded systems

Elevators, Planes, Medical systems, Wristwatches

Single Program, concurrent operations

Most modern OS kernels

Internally concurrent because have to deal with concurrent requests by multiple users

But no protection needed within kernel

Database Servers

Access to shared data by many concurrent users

Also background utility processing must be done

Page 11: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.11 Hung Q. Ngo 09.03.17Operating System Concepts

Examples of multithreaded programsExamples of multithreaded programs

Network Servers

Concurrent requests from network

Again, single program, multiple concurrent operations

File server, Web server, and airline reservation systems

Parallel Programming (More than one physical CPU)

Split program into multiple threads for parallelism

This is called Multiprocessing

Page 12: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.12 Hung Q. Ngo 09.03.17Operating System Concepts

BenefitsBenefits

Responsiveness

When part of the program is blocked or is performing a lengthy operation, e.g. web browser downloading

Resource Sharing

Same addr. space

Economy

In Solaris, creating a process is 30 times slower than creating a thread, and context switching is 5 times slower

Utilization of MP Architectures

Multithreading on a multi-CPU machine increases concurrency

Page 13: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.13 Hung Q. Ngo 09.03.17Operating System Concepts

Thread StateThread State

State shared by all threads in process/addr space

Contents of memory (global variables, heap)

I/O state (file system, network connections, etc)

State “private” to each thread

Kept in TCB Thread Control Block

CPU registers (including, program counter)

Execution stack – what is this?

Execution Stack

Parameters, Temporary variables

return PCs are kept while called procedures are executing

Page 14: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.14 Hung Q. Ngo 09.03.17Operating System Concepts

Execution Stack ExampleExecution Stack Example

Stack holds temporary results

Permits recursive execution

Crucial to modern languages

A(int tmp) {

if (tmp<2)

B();

printf(tmp);

}

B() {

C();

}

C() {

A(2);

}

A(1);

A: tmp=2 ret=C+1Stack

Pointer

Stack Growth

A: tmp=1 ret=exit

B: ret=A+2

C: ret=b+1

Page 15: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.15 Hung Q. Ngo 09.03.17Operating System Concepts

ClassificationClassification

Real operating systems have either One or many address spaces One or many threads per address space

Did Windows 95/98/ME have real memory protection? No: Users could overwrite process tables/System DLLs

Mach, OS/2, Linux

Windows 9x???

Win NT to XP, Solaris, HP-UX, OS X

Embedded systems (Geoworks, VxWorks,

JavaOS,etc)

JavaOS, Pilot(PC)

Traditional UNIXMS/DOS, early Macintosh

Many

One

# threads

Per AS:

ManyOne

# o

f ad

dr

spa

ces:

Page 16: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.16 Hung Q. Ngo 09.03.17Operating System Concepts

Single-Threaded ExampleSingle-Threaded Example

Imagine the following C program:

main() {

ComputePI(“pi.txt”);

PrintClassList(“clist.text”);

}

What is the behavior here?

Program would never print out class list

Why? ComputePI would never finish

Page 17: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.17 Hung Q. Ngo 09.03.17Operating System Concepts

Use of ThreadsUse of Threads Version of program with Threads:

main() { CreateThread(ComputePI(“pi.txt”)); CreateThread(PrintClassList(“clist.text”));}

What does “CreateThread” do? Start independent thread running given procedure

What is the behavior here? Now, you would actually see the class list This should behave as if there are two separate CPUs

CPU1 CPU2 CPU1 CPU2

Time

CPU1 CPU2

Page 18: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.18 Hung Q. Ngo 09.03.17Operating System Concepts

Memory Footprint of Previous ExampleMemory Footprint of Previous Example

If we stopped this program and examined it with a debugger, we would see

Two sets of CPU registers

Two sets of Stacks

Questions:

How do we position stacks relative to each other?

What maximum size should we choosefor the stacks?

What happens if threads violate this?

How might you catch violations?

Code

Global Data

Heap

Stack 1

Stack 2

Addre

ss Space

Page 19: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.19 Hung Q. Ngo 09.03.17Operating System Concepts

Per Thread StatePer Thread State

Each Thread has a Thread Control Block (TCB)

Execution State: CPU registers, program counter, pointer to stack

Scheduling info: State (more later), priority, CPU time

Accounting Info

Various Pointers (for implementing scheduling queues)

Pointer to enclosing process? (PCB)?

Etc (add stuff as you find a need)

OS Keeps track of TCBs in protected memory

In Array, or Linked List, or …

Page 20: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.20 Hung Q. Ngo 09.03.17Operating System Concepts

Lifecycle of a Thread (or Process)Lifecycle of a Thread (or Process)

As a thread executes, it changes state: new: The thread is being created ready: The thread is waiting to run running: Instructions are being executed waiting: Thread waiting for some event to occur terminated: The thread has finished execution

“Active” threads are represented by their TCBs TCBs organized into queues based on their state

Page 21: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.21 Hung Q. Ngo 09.03.17Operating System Concepts

Ready Queue And Various I/O Device QueuesReady Queue And Various I/O Device Queues

Thread not running TCB is in some scheduler queue Separate queue for each device/signal/condition Each queue can have a different scheduler policy

OtherStateTCB9

LinkRegisters

OtherStateTCB6

LinkRegisters

OtherStateTCB16

LinkRegisters

OtherStateTCB8

LinkRegisters

OtherStateTCB2

LinkRegisters

OtherStateTCB3

LinkRegisters

Head

Tail

Head

Tail

Head

Tail

Head

Tail

Head

Tail

ReadyQueue

TapeUnit 0

DiskUnit 0

DiskUnit 2

EtherNetwk 0

Page 22: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.22 Hung Q. Ngo 09.03.17Operating System Concepts

Dispatch LoopDispatch Loop

Conceptually, the dispatching loop of the operating system looks as follows:

Loop {

RunThread();

ChooseNextThread();

SaveStateOfCPU(curTCB);

LoadStateOfCPU(newTCB);

}

This is an infinite loop

One could argue that this is all that the OS does

Should we ever exit this loop???

When would that be?

Page 23: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.23 Hung Q. Ngo 09.03.17Operating System Concepts

Running a threadRunning a thread

Consider first portion: RunThread()

How do I run a thread?

Load its state (registers, PC, stack pointer) into CPU

Load environment (virtual memory space, etc)

Jump to the PC

How does the dispatcher get control back?

Internal events: thread returns control voluntarily

External events: thread gets preempted

Page 24: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.24 Hung Q. Ngo 09.03.17Operating System Concepts

Internal EventsInternal Events

Blocking on I/O

The act of requesting I/O implicitly yields the CPU

Waiting on a “signal” from other thread

Thread asks to wait and thus yields the CPU

Thread executes a yield()

Thread volunteers to give up CPU

computePI() {

while(TRUE) {

ComputeNextDigit();

yield();

}

}

Page 25: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.25 Hung Q. Ngo 09.03.17Operating System Concepts

Stack for Yielding ThreadStack for Yielding Thread

How do we run a new thread?

run_new_thread() { newThread = PickNewThread(); switch(curThread, newThread); ThreadHouseKeeping(); /* next Lecture */}

How does dispatcher switch to a new thread? Save anything next thread may trash: PC, regs, stack Maintain isolation for each thread

yield

ComputePI Sta

ck gro

wthrun_new_thread

kernel_yieldTrap to OS

switch

Page 26: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.26 Hung Q. Ngo 09.03.17Operating System Concepts

Saving/Restoring state (often called Saving/Restoring state (often called “Context Switch)“Context Switch)

Switch(tCur,tNew) {

/* Unload old thread */

TCB[tCur].regs.r7 = CPU.r7;

TCB[tCur].regs.r0 = CPU.r0;

TCB[tCur].regs.sp = CPU.sp;

TCB[tCur].regs.retpc = CPU.retpc; /*return addr*/

/* Load and execute new thread */

CPU.r7 = TCB[tNew].regs.r7;

CPU.r0 = TCB[tNew].regs.r0;

CPU.sp = TCB[tNew].regs.sp;

CPU.retpc = TCB[tNew].regs.retpc;

return; /* Return to CPU.retpc */

}

Page 27: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.27 Hung Q. Ngo 09.03.17Operating System Concepts

Switch DetailsSwitch Details

What if you make a mistake in implementing switch? Suppose you forget to save/restore register 4 Get intermittent failures depending on when context switch occurred and

whether new thread uses register 4 System will give wrong result without warning

Can you devise an exhaustive test to test switch code? No! Too many combinations and inter-leavings

Cautionary tail: For speed, Topaz kernel saved one instruction in switch() Carefully documented!

Only works As long as kernel size < 1MB What happened?

Time passed, People forgot Later, they added features to kernel (no one removes features!) Very weird behavior started happening

Moral of story: Design for simplicity

Page 28: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.28 Hung Q. Ngo 09.03.17Operating System Concepts

What happens when thread blocks on What happens when thread blocks on I/O?I/O?

What happens when a thread requests a block of data from the file system? User code invokes a system call Read operation is initiated Run new thread/switch

CopyFile

read

run_new_thread

kernel_readTrap to OS

switch

Sta

ck gro

wth

Page 29: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.29 Hung Q. Ngo 09.03.17Operating System Concepts

External EventsExternal Events

What happens if thread never does any I/O, never waits, and never yields control?

Could the ComputePI program grab all resources and never release the processor?

What if it didn’t print to console?

Must find way that dispatcher can regain control!

Answer: Utilize External Events

Interrupts: signals from hardware or software that stop the running code and jump to kernel

Timer: like an alarm clock that goes off every some many milliseconds

If we make sure that external events occur frequently enough, can ensure dispatcher runs

Page 30: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.30 Hung Q. Ngo 09.03.17Operating System Concepts

add $r1,$r2,$r3subi $r4,$r1,#4slli $r4,$r4,#2 PC

sav

ed

Disabl

e All

Ints

Supe

rviso

r Mod

e

Restore PC

User Mode

Raise priorityReenable All IntsSave registersDispatch to Handler

Transfer Network Packet from hardwareto Kernel Buffers

Restore registersClear current IntDisable All IntsRestore priorityRTI

“In

terr

up

t H

an

dle

r”

Example: Network InterruptExample: Network Interrupt

An interrupt is a hardware-invoked context switch

No separate step to choose what to run next

Always run the interrupt handler immediately

lw $r2,0($r4)lw $r3,4($r4)add $r2,$r2,$r3sw 8($r4),$r2

Exte

rnal In

terr

upt

Pipeline Flush

Page 31: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.31 Hung Q. Ngo 09.03.17Operating System Concepts

Use of Timer Interrupt to Return ControlUse of Timer Interrupt to Return Control

Solution to our dispatcher problem

Use the timer interrupt to force scheduling decisions

Timer Interrupt routine:TimerInterrupt() { DoPeriodicHouseKeeping(); run_new_thread();}

I/O interrupt: same as timer interrupt except that DoHousekeeping() replaced by ServiceIO().

Some Routine

run_new_thread

TimerInterruptInterrupt

switch

Sta

ck gro

wth

Page 32: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.32 Hung Q. Ngo 09.03.17Operating System Concepts

Multithreading ModelsMultithreading Models

Page 33: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.33 Hung Q. Ngo 09.03.17Operating System Concepts

Thread LibrariesThread Libraries

User Threads: Thread management done by user-level threads library

Kernel Threads: supported & managed directly by OS

Three primary thread libraries:

POSIX Pthreads (both)

Win32 threads (kernel level)

Java threads (hybrid, API is implemented using thread lib available on host OS)

Page 34: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.34 Hung Q. Ngo 09.03.17Operating System Concepts

Page 35: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.35 Hung Q. Ngo 09.03.17Operating System Concepts

Page 36: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.36 Hung Q. Ngo 09.03.17Operating System Concepts

Many-to-One ModelMany-to-One Model

Many user-level threads mapped to single kernel thread

Examples:

Solaris Green Threads

GNU Portable Threads

+ Efficient: thread management is done by the thread library in user space

+ Entire process will block if a thread makes a blocking system call

+ Unable to run in parallel on multiprocessors

Page 37: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.37 Hung Q. Ngo 09.03.17Operating System Concepts

One-to-One ModelOne-to-One Model

Each user-level thread maps to kernel thread

Examples

Windows NT/XP/2000

Linux

Solaris 9 and later

+Better concurrency than Many-to-One

+Creating a user thread requires creating the corresponding kernel thread

Page 38: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.38 Hung Q. Ngo 09.03.17Operating System Concepts

Many-to-Many ModelMany-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

Page 39: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.39 Hung Q. Ngo 09.03.17Operating System Concepts

Two-level ModelTwo-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

Page 40: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

4.40 Hung Q. Ngo 09.03.17Operating System Concepts

SummarySummary Processes have two parts

Threads (Concurrency) Address Spaces (Protection)

Concurrency accomplished by multiplexing CPU Time: Unloading current thread (PC, registers) Loading new thread (PC, registers) Such context switching may be voluntary (yield(), I/O operations)

or involuntary (timer, other interrupts) Protection accomplished restricting access:

Memory mapping isolates processes from each other Dual-mode for isolating I/O, other resources

Book talks about processes When this concerns concurrency, really talking about thread portion

of a process When this concerns protection, talking about address space portion

of a process

Page 41: Chapter 4: Threads March 17 th, 2009 Instructor: Hung Q. Ngo Kyung Hee University

End of Chapter 4End of Chapter 4