CS Operating Systems: Threads (SGG 4)

Similar documents
CS 5523 Operating Systems: Thread and Implementation

Threads (SGG 4) Outline. Traditional Process: Single Activity. Example: A Text Editor with Multi-Activity. Instructor: Dr.

CS 5523 Operating Systems: Midterm II - reivew Instructor: Dr. Tongping Liu Department Computer Science The University of Texas at San Antonio

CS 3723 Operating Systems: Final Review

CS 5523: Operating Systems

POSIX threads CS 241. February 17, Copyright University of Illinois CS 241 Staff

CS3733: Operating Systems

CS333 Intro to Operating Systems. Jonathan Walpole

Synchronization: Basics

Today. Threads review Sharing Mutual exclusion Semaphores

CS 333 Introduction to Operating Systems. Class 3 Threads & Concurrency. Jonathan Walpole Computer Science Portland State University

CS510 Operating System Foundations. Jonathan Walpole

CS Lecture 3! Threads! George Mason University! Spring 2010!

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

CS 333 Introduction to Operating Systems. Class 3 Threads & Concurrency. Jonathan Walpole Computer Science Portland State University

CS 3723 Operating Systems: Midterm II - Review

Threads. What is a thread? Motivation. Single and Multithreaded Processes. Benefits

Agenda. Process vs Thread. ! POSIX Threads Programming. Picture source:

POSIX Threads. HUJI Spring 2011

Synchronization: Basics

Carnegie Mellon Concurrency and Synchronization

CS510 Operating System Foundations. Jonathan Walpole

CPSC 341 OS & Networks. Threads. Dr. Yingwu Zhu

Threads. Jinkyu Jeong Computer Systems Laboratory Sungkyunkwan University

Multithreaded Programming

Concurrency on x86-64; Threads Programming Tips

Thread. Disclaimer: some slides are adopted from the book authors slides with permission 1

DISTRIBUTED COMPUTER SYSTEMS

CS 475. Process = Address space + one thread of control Concurrent program = multiple threads of control

Computer Systems Laboratory Sungkyunkwan University

Concurrent Programming

CISC2200 Threads Spring 2015

CS-345 Operating Systems. Tutorial 2: Grocer-Client Threads, Shared Memory, Synchronization

pthreads Announcement Reminder: SMP1 due today Reminder: Please keep up with the reading assignments (see class webpage)

Total Score is updated. The score of PA4 will be changed! Please check it. Will be changed

CS 3305 Intro to Threads. Lecture 6

Concurrent Programming

Processes, Threads, SMP, and Microkernels

THREADS. Jo, Heeseung

Lecture 4 Threads. (chapter 4)

Carnegie Mellon. Synchroniza+on : Introduc+on to Computer Systems Recita+on 14: November 25, Pra+k Shah (pcshah) Sec+on C

CS533 Concepts of Operating Systems. Jonathan Walpole

Chapter 4: Threads. Operating System Concepts with Java 8 th Edition

I.-C. Lin, Assistant Professor. Textbook: Operating System Concepts 8ed CHAPTER 4: MULTITHREADED PROGRAMMING

The course that gives CMU its Zip! Concurrency I: Threads April 10, 2001

ECE 598 Advanced Operating Systems Lecture 23

Unix. Threads & Concurrency. Erick Fredj Computer Science The Jerusalem College of Technology

pthreads CS449 Fall 2017

EPL372 Lab Exercise 2: Threads and pthreads. Εργαστήριο 2. Πέτρος Παναγή

Threads. Jo, Heeseung

CSCI4430 Data Communication and Computer Networks. Pthread Programming. ZHANG, Mi Jan. 26, 2017

CS370 Operating Systems

COP 4610: Introduction to Operating Systems (Spring 2015) Chapter 4: Threads. Zhi Wang Florida State University

CS370 Operating Systems

ANSI/IEEE POSIX Standard Thread management

Computer Systems Laboratory Sungkyunkwan University

CS240: Programming in C. Lecture 18: PThreads

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

Chapter 4: Multi-Threaded Programming

Programming with Shared Memory

Threads. studykorner.org

Concurrency, Thread. Dongkun Shin, SKKU

LSN 13 Linux Concurrency Mechanisms

Threads. Threads (continued)

Pthreads. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Introduction to PThreads and Basic Synchronization

Outline. CS4254 Computer Network Architecture and Programming. Introduction 2/4. Introduction 1/4. Dr. Ayman A. Abdel-Hamid.

Concurrent Programming

Lecture 4. Threads vs. Processes. fork() Threads. Pthreads. Threads in C. Thread Programming January 21, 2005

Preview. What are Pthreads? The Thread ID. The Thread ID. The thread Creation. The thread Creation 10/25/2017

Concurrent Programming

HPCSE - I. «Introduction to multithreading» Panos Hadjidoukas

Threads. CS-3013 Operating Systems Hugh C. Lauer. CS-3013, C-Term 2012 Threads 1

CS 261 Fall Mike Lam, Professor. Threads

Chapter 4: Threads. Chapter 4: Threads

Chapter 4 Concurrent Programming

Chapter 4 Threads. Images from Silberschatz 03/12/18. CS460 Pacific University 1

4.8 Summary. Practice Exercises

CS 153 Lab4 and 5. Kishore Kumar Pusukuri. Kishore Kumar Pusukuri CS 153 Lab4 and 5

Concurrent Programming

Last class: Today: Thread Background. Thread Systems

Threading Language and Support. CS528 Multithreading: Programming with Threads. Programming with Threads

Concurrent Programming is Hard! Concurrent Programming. Reminder: Iterative Echo Server. The human mind tends to be sequential

Chapter 4: Threads. Operating System Concepts. Silberschatz, Galvin and Gagne

Processes and Threads

OPERATING SYSTEM. Chapter 4: Threads

Concurrency. Johan Montelius KTH

Parallel Programming with Threads

POSIX Threads. Paolo Burgio

CSCE 313: Intro to Computer Systems

Thread and Synchronization

What is concurrency? Concurrency. What is parallelism? concurrency vs parallelism. Concurrency: (the illusion of) happening at the same time.

ECE 7650 Scalable and Secure Internet Services and Architecture ---- A Systems Perspective. Part I: Operating system overview: Processes and threads

CSE 306/506 Operating Systems Threads. YoungMin Kwon

Outline. Threads. Single and Multithreaded Processes. Benefits of Threads. Eike Ritter 1. Modified: October 16, 2012

Thread Concept. Thread. No. 3. Multiple single-threaded Process. One single-threaded Process. Process vs. Thread. One multi-threaded Process

POSIX PTHREADS PROGRAMMING

Threaded Programming. Lecture 9: Alternatives to OpenMP

Topics: Threads (SGG, Chapter 04) (USP, Chapter 12) CS 3733 Operating Systems

Parallel Computing: Programming Shared Address Space Platforms (Pthread) Jin, Hai

Transcription:

When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them with another, and to assume among the powers of the earth, the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation. When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them with another, and to assume among the powers of the earth, the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation. We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness.--That to secure these rights, Governments are instituted among Men, deriving their just powers from the consent of the governed, --That whenever any Form of Government becomes We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness.--That to secure these rights, Governments are instituted among Men, deriving their just powers from the consent of the governed, --That whenever any Form of Government becomes destructive of these ends, it is the Right of the People to alter or to abolish it, and to institute new Government, laying its foundation on such principles and organizing its powers in such form, as to them shall seem most likely to effect their Safety and Happiness. Prudence, indeed, will dictate that Governments long established should not be changed for light and transient causes; and accordingly all destructive of these ends, it is the Right of the People to alter or to abolish it, and to institute new Government, laying its foundation on such principles and organizing its powers in such form, as to them shall seem most likely to effect their Safety and Happiness. Prudence, indeed, will dictate that Governments long established should not be changed for light and transient causes; and accordingly all CS 37333 Operating Systems: Threads (SGG 4) Instructor: Dr. Tongping Liu Thank Dr. Dakai Zhu, Dr. Palden Lama, and Dr. Tim Richards (UMASS) for providing their slides. Outline Motivation and thread basics Ø Resources requirements: thread vs. process Thread implementations Ø User threads: e.g., Pthreads and Java threads Ø Kernel threads: e.g., Linux tasks Ø Map user- and kernel-level threads Ø Lightweight process and scheduler activation Other issues with threads: process creation and signals etc. Threaded programs Ø Thread pool Ø Performance vs. number of threads vs. CPUs and I/Os 1 2 Traditional Process: Single Activity Example: A Text Editor with Multi-Activity Multi-programming Ø More processes share CPU One process: address space to hold process image Ø System resources, e.g., files, I/O devices Execution states Ø Processor registers (e.g., PC register) Ø Protection mode (user/kernel) Ø Priority Single activity à single thread Single-threaded process Process Control Block address space User Stack kernel Stack Process approach on data Ø P1: read from keyboard Ø P2: format document Ø P3: write to disk The processes will access the same set of data. How do the processes exchange data? Context Switch for Processes - costly Kernel" 3 4 Context Switches of Processes: Expensive Ideal Solution for the Example: Threads Context switch between processes Ø Save processor registers for current process Ø Load the new process s registers Switch address spaces expensive Ø Hardware cache Ø Memory pages (e.g., TLB content) Three activities within one process Ø Single address space Ø Same execution environment Ø Data shared easily Switch between activities Ø Only running context Ø No change in address space Kernel" 5 6 1

Thread vs. Process Resources: Thread vs. Process Responsiveness Ø Part of blocked Resource Sharing Ø Memory, open files, etc. Economy Ø Creation and switches Scalability Ø Increase parallelism Shared resources among threads (per process items) Ø Address space (e.g., codes) Ø Global variables/data Ø Open Files and other resources etc. Separated resources for each thread Ø Machine state: registers (e.g., PC) Ø Running s Ø Private data 7 8 Process: Traditional View Process: Alternative View Process = process context + code, data, and Process context Stack pointer () Kernel context: VM structures Descriptor table brk pointer Code, data, and brk PC shared libraries run-.me heap read/write data read-only code/data 0 Process = thread + code, data, and kernel context Thread Stack pointer () brk PC Code, data, and kernel context shared libraries run-.me heap read/write data read-only code/data 0 Kernel context: VM structures Descriptor table brk pointer Process with Two Threads Threads vs. Processes Thread 1 Stack pointer () Thread 2 Stack pointer () brk PC Code, data, and kernel context shared libraries run-.me heap read/write data read-only code/data 0 Kernel context: VM structures Descriptor table brk pointer Threads and processes: similarities Ø Each has its own logical control flow Ø Each can run concurrently with others Ø Each is context switched (scheduled) by the kernel Threads and processes: differences Ø Threads share code and data, processes (typically) do not Ø Threads are less expensive than processes ü Process control (creation and exit) is more expensive as thread control ü Context switches: processes are more expensive than for threads 2

Pros and Cons of Thread-Based Designs + Easy to share data structures between threads Ø e.g., logging information, file cache + Threads are more efficient than processes Unintentional sharing can introduce subtle and hard-toreproduce errors! Thread Implementations: Issues Process usually starts with a single thread Thread management: required operations Ø Creation: procedure/method for the new thread to run Ø Scheduling: runtime properties/attributes Ø Destruction: release resources Thread Synchronization Ø join, wait, etc. Who and where to manage threads Ø User space: managed by applications Ø Kernel space: managed by OS ü all modern OSes have kernel level support 14 Multithreading Models: Many-to-One Many-to-One Model Many user-level threads mapped to a single kernel thread Examples: Ø Solaris Green Threads Ø GNU Portable Threads Pros: Cheap synchronization and cheap thread creation Cons: Blocking-problem. A thread calling block system call will block the whole process No concurrency. Multithreading Models: One-to-One One-to-one Model Each user-level thread maps to kernel thread Examples Ø Windows NT/XP/2000 Ø Linux Ø Solaris 9 and later Pros: Scalable parallelism (concurrency) Thread will not block a whole process Cons: Expensive synchronization (system call is required if a lock can t be acquired) Expensive creation (3.5 slower) Kernel resource, e.g. and kernel structure 3

Multithreading Models: Many-to-Many Model 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 Solaris prior to version 9 Windows NT/2000 with the ThreadFiber package Pros: Cheap Resource, not all user threads should create a kernel thread Synchronization mainly at user-level Context switch may not involve system calls Cons: Difficult cooperation between kernel scheduler and user scheduler How to decide the number of kernel threads? Thread Libraries Provide programmers with API for creating and managing threads Two primary ways of implementing Ø User-level library ü Entirely in user space ü Everything is done using function calls (not system calls) Ø Kernel-level library supported by the OS ü Code and data structures for threads are in kernel space ü Function calls result in system calls to kernel Examples: Ø POSIX Threads: Pthreads Ø Java threads (JVM uses host system threads) Pthreads: POSIX Thread POSIX Ø Portable Operating System Interface [for Unix] Ø Standardized programming interface Pthreads Ø Thread implementations adhering to POSIX standard Ø API specifies behavior of the thread library: defined as a set of C types and procedure calls Ø Common in UNIX OS (Solaris, Linux, Mac OS X) Support for thread creation and synchronization 21 22 Pthreads:Thread/Synchronization APIs Pthreads APIs: Four Groups Thread Call pthread_create pthread_exit pthread_join pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock pthread_cond_init pthread_cond_destroy pthread_cond_wait pthread_cond_signal Description Create a new thread in the caller s address space Terminate the calling thread Wait for a thread to terminate Create a new mutex Destroy a mutex Lock a mutex Unlock a mutex Create a condition variable Destroy a condition variable Wait on a condition variable Release one thread waiting on a condition variable Thread management Ø Routines for creating, detaching, joining, etc. Ø Routines for setting/querying thread attributes Mutexes: abbreviation for "mutual exclusion" Ø Routines for creating, destroying, locking/unlocking Ø Functions to set or modify attributes with mutexes. Conditional variables Ø Communications for threads that share a mutex Ø Functions to create, destroy, wait and signal based on specified variable values Ø Functions to set/query condition variable attributes Synchronization Ø Routines that manage read/write locks and barriers 23 24 4

Thread Creation An Example: testthread.c // testthread.c #define NUM_THREADS 3 int main(int argc, char *argv[]) pthread_t threads[num_threads]; int rc; long t; for(t=0;t<num_threads;t++) printf("in main: creating thread %ld\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc) printf("error; return code from pthread_create() is %d\n", rc); exit(-1); //to return value; use pthread_join() wait for other thread; and then return 25 26 pthread_t threadid; pthread_create (&threadid, *attr, methodname, *para); 1 st argument is the ID of the new thread 2 nd argument is a pointer to pthread_attr_t 3 rd argument is thread (function/method) name 4 th argument is a pointer to the arguments for the thread s method/function An Example (cont.) Thread joins and exits #include <pthread.h> #include <stdio.h> #include <stdlib.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) long tid; tid = (long)threadid; printf("hello World! It's me, thread #%ld!\n", tid); pthread_exit(null); int main(int argc, char *argv[]) Join with a non-detached thread by using pthread_join ( pthread_t thread, void **status) (All threads are created non-detached by default, so they are joinable by default) Exit from threads: Ø If threads use exit( ), process terminates. Ø A thread (main, or another thread ) can exit by calling pthread_exit( ), this does not terminate the whole process. More information about Pthread programming Ø https://computing.llnl.gov/tutorials/pthreads/ 27 28 void pthread_exit(void *retval); Not necessary for normal exits Some special cases: Ø Allows you to exit a thread from any depth in the call and return a value via retval Ø pthread_exit() can terminate your main function and thread in a controlled way, but not terminating other threads. (NOT recommended) Linux Threads Linux uses the term task (rather than process or thread) when referring to a flow of control Linux provides clone() system call to create threads Ø A set of flags, passed as arguments to the clone() system call determine how much sharing is involved (e.g. open files, memory space, etc.) Linux: 1-to-1 thread mapping Ø NPTL (Native POSIX Thread Library) 29 30 5

Other Issues: Process Creation in Thread What will happen if one thread in a process call fork( ) to create a new process? Ø How many threads in the new process? Duplicate only the invoking thread Ø exec(): will load another program Ø Everything will be replaced anyway Duplicate all threads Ø What about threads performed blocking system call?! Using Pthread Library In the program: Ø #include <pthread.h> To compile, link with the pthread library Linux Ø gcc lpthread // C Ø g++ -lpthread // C++ gcc testthread.c -o test lpthread 31 32 Shared Variables in Threaded C Programs Question: Which variables in a threaded C program are shared? Ø The answer is not as simple as global variables are shared and variables are private Requires answers to the following questions: Ø What is the memory model for threads? Ø How are variables mapped to memory? Ø How many threads might reference each variable? A variable x is shared if and only if multiple threads reference some instance of x Threads Memory Model Conceptual model: Ø Multiple threads run in the same context of a process Ø Each thread has its own separate thread context ü Thread ID,, pointer, PC, and GP registers Ø All threads share the remaining process context ü Code, data, heap, and shared library segments ü Open files and installed handlers Operationally, this model is not strictly enforced: Ø Register values are truly separate and protected, but Ø Any thread can read and write the of any other thread Process with Two Threads Thread 1 Stack pointer () Thread 2 Stack pointer () brk PC Code, data, and kernel context shared libraries 0 run-.me heap read/write data read-only code/data Kernel context: VM structures Descriptor table brk pointer Example Program to Illustrate Sharing char **ptr; /* global */ int main() int i; pthread_t tid; char *msgs[2] = "Hello from foo", "Hello from bar" ; ptr = msgs; for (i = 0; i < 2; i++) Pthread_create(&tid, NULL, thread, (void *)i); Pthread_exit(NULL); /* thread routine */ void *thread(void *vargp) int myid = (int) vargp; static int cnt = 0; printf("[%d]: %s (svar=%d)\n", myid, ptr[myid], ++cnt); Peer threads reference main thread s indirectly through global ptr variable 6

Mapping Variable Instances to Memory Global variables Ø Def: Variable declared outside of a function Ø Virtual memory contains exactly one instance of any global variable Local variables Ø Def: Variable declared inside function without static attribute Ø Each thread contains one instance of each local variable Local static variables Ø Def: Variable declared inside function with the static attribute Ø Virtual memory contains exactly one instance of any local static variable. Mapping Variable Instances to Memory Global var: 1 instance (ptr [data]) char **ptr; /* global */ int main() int i; pthread_t tid[2]; char *msgs[2] = "Hello from foo", "Hello from bar" ; ptr = msgs; for (i = 0; i < 2; i++) Pthread_create(&tid[i], NULL, thread, (void *)i);. Local vars: 1 instance (i.m, msgs.m) Local var: 2 instances ( myid.p0 [peer thread 0 s ], myid.p1 [peer thread 1 s ] ) /* thread routine */ void *thread(void *vargp) int myid = (int)vargp; static int cnt = 0; sharing.c! printf("[%d]: %s (svar=%d)\n", myid, ptr[myid], ++cnt); Local sta9c var: 1 instance (cnt [data]) Mapping Variable Instances to Memory Global var: 1 instance (ptr [data]) char **ptr; /* global */ int main() int i; pthread_t tid; char *msgs[2] = "Hello from foo", "Hello from bar" ptr ; ptr = msgs; Local vars: 1 instance (i.m, msgs.m) Local var: 2 instances ( myid.p0 [peer thread 0 s ], myid.p1 [peer thread 1 s ] ) /* thread routine */ Variable Referenced by Referenced by void Referenced *thread(void by *vargp) instance main thread? peer thread 0? peer thread 1? int myid = (int)vargp; static int cnt = 0; cnt yes yes yes no yes printf("[%d]: yes %s (svar=%d)\n", i.m for (i = 0; 2; i++) i yes < no myid, no ptr[myid], ++cnt); Pthread_create(&tid, yes yes yes msgs.m NULL, no yes no myid.p0 thread, no no (void *)i); Local sta9c yes var: 1 instance (cnt [data]) myid.p1. sharing.c! Shared Variable Analysis Which variables are shared? Variable Referenced by Referenced by Referenced by instance main thread? peer thread 0? peer thread 1? ptr cnt i.m msgs.m myid.p0 myid.p1 yes yes yes no yes yes yes no no yes yes yes no yes no no no yes Answer: A variable x is shared iff multiple threads reference at least one instance of x. Thus: n ptr, cnt, and msgs are shared n i and myid are not shared Multithreaded Programs Thread Pool Use multiple threads to improve performance Thread 1 reads requests T1 Client Thread 2 makes requests to server Receipt & queuing Requests How should the server handle the incoming requests? N threads Server Input-output Pool of threads Ø Threads in a pool where they wait for work Advantages: Ø Usually slightly faster to service a request with an existing thread than create a new thread Ø Allows the number of threads in the application(s) to be bound to the size of the pool Adjust thread number in pool Ø According to usage pattern and system load 41 42 7

Thread Pool Example: Web server Thread Pool Implementation Dispatcher thread" Network connection" Kernel" Worker thread" Web page cache" while(true) getnextrequest(&buf); handoffwork(&buf); while(true) waitforwork(&buf); lookforpageincache(&buf,&page); if(pagenotincache(&page)) readpagefromdisk(&buf,&page); returnpage(&page); Work queue Ø Fixed number of threads Other possible problems Ø Deadlock Ø Resource thrashing Ø Thread leakage Ø Overload 43 44 Performance of Threaded Programs Suppose that the processing of each request Ø Takes X seconds for computation; and Ø Takes Y seconds for reading data from I/O disk For single-thread program/process Ø A single CPU & single disk system Ø What is the maximum throughput (i.e., the number of requests can be processed per second)? Example: suppose that each request takes 2ms for computation 8ms to read data from disk 1000/10ms = 100 Performance of Threaded Programs (cont) Multi-thread performance improvement Ø Single CPU & single disk system Ø How many threads should be used? Ø What is the maximum throughput (i.e., the number of requests can be processed per second)? Example: suppose that each request takes 2ms for computation 8ms to read data from disk Assuming that we have 8 cores and 1 disk 1000/8ms = 125 45 46 Performance of Threaded Programs (cont) Summary What about m-cpu and n-disk system Ø Maximum throughput and # of threads? (X: computation, Y: IO for each task) Ø Throughput à 1 / max(x/m, Y/n) IO is the bottleneck Ø if (X/m < Y/n), # = n + m where m = mink X/k <= Y/n, 1<=k<=m; CPU is the bottleneck Ø Similarly, if (X/m > Y/n), # = m + n where n = mink X/m>= Y/k, 1<=k<=n; Other issues: Ø When I/O disk is bottleneck, adding more CPUs will NOT help improve the throughput Ø What about heterogeneous disks and CPUs?! 47 Thread basics Ø Resources requirements: thread vs. process Thread implementations Ø User threads: e.g., Pthreads and Java threads Ø Kernel threads: e.g., Linux tasks Ø Map user- and kernel-level threads Ø Lightweight process and scheduler activation Other issues with threads Ø process creation and signals etc. Threaded programs Ø Thread pool Ø Performance vs. number of threads vs. CPUs and I/Os 48 8