Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 4: Concurrency and Threads CS 170 T Yang, 2015 Chapter 4 of AD textbook.

Similar presentations


Presentation on theme: "Lecture 4: Concurrency and Threads CS 170 T Yang, 2015 Chapter 4 of AD textbook."— Presentation transcript:

1 Lecture 4: Concurrency and Threads CS 170 T Yang, 2015 Chapter 4 of AD textbook

2 Chapter 4: Threads Overview  thread — a fundamental unit of CPU utilization that forms the basis of multithreaded computer systems Thread Libraries  Pthreads  Nachos threads

3 Logical View of Threads Threads associated with a process P1 sh foo T1 Process hierarchy A process T2 T4 T5 T3 shared code, data and kernel context

4 Benefits of multi-threading Responsiveness Resource Sharing  Shared memory Economy Scalability  Explore multi-core CPUs

5 Motivation for multi-threaded servers

6 Thread Abstraction Infinite number of processors Threads execute with variable speed  Programs must be designed to work with any schedule

7 Concurrent Thread Execution Two threads run concurrently (are concurrent) if their logical flows overlap in time Otherwise, they are sequential (we’ll see that processes have a similar rule) Examples:  Concurrent: A & B, A&C  Sequential: B & C Time Thread AThread BThread C

8 Execution Flow Concurrent execution on a single core system Parallel execution on a multi-core system

9 Programmer vs. Processor View

10 Difference between Single and Multithreaded Processes Shared memory access for code/data Separate control flow -> separate stack/registers

11 Threads vs. Processes How threads and processes are similar  Each has its own logical control flow  Each can run concurrently  Each is context switched How threads and processes are different  Threads share code and data, processes (typically) do not  Threads are somewhat cheaper than processes with less overhead

12 Thread Libraries Thread library provides programmer with API for creating and managing threads  Pthreads  Java threads  OS-specific threads –Nachos for class proj.

13 Pthreads provided either as user-level or kernel-level A POSIX standard (IEEE 1003.1c) API for thread creation and synchronization Common in UNIX OS (Linux, Mac OS X).  In CSIL, compile a c program with gcc -lpthread

14 Posix Threads (Pthreads) Interface Creating and reaping threads  pthread_create, pthread_join Determining your thread ID  pthread_self Terminating threads  pthread_cancel, pthread_exit  exit [terminates all threads], return [terminates current thread] Synchronizing access to shared variables  pthread_mutex_init, pthread_mutex_[un]lock  pthread_cond_init, pthread_cond_[timed]wait

15 Example of Pthreads #include void *PrintHello(void * id){ printf(“Thread%d: Hello World!\n", id); } void main (){ pthread_t thread0, thread1; pthread_create(&thread0, NULL, PrintHello, (void *) 0); pthread_create(&thread1, NULL, PrintHello, (void *) 1); }

16 Example of Pthreads with join #include void *PrintHello(void * id){ printf(“Thread%d: Hello World!\n", id); } void main (){ pthread_t thread0, thread1; pthread_create(&thread0, NULL, PrintHello, (void *) 0); pthread_create(&thread1, NULL, PrintHello, (void *) 1); pthread_join(thread0, NULL); pthread_join(thread1, NULL); }

17 Execution of Threaded “hello, world” main thread peer thread main thread waits for peer thread to terminate exit() terminates main thread and any peer threads call Pthread_create() call Pthread_join() Pthread_join() returns printf() (peer thread terminates)

18 Java Threads Java threads are managed by the JVM Java threads may be created by extending Thread class  Thread class –run, start methods –yield, join –sleep Synchronization  synchronized methods & objects  wait/notify/notifyAll  conditions

19 Java Threads: Example class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } public void run() { for (;;) { System.out.println(name + ": hello world"); } public class Main2 { public static void main(String [] args) { MyThread t1 = new MyThread("thread1"); MyThread t2 = new MyThread("thread2"); t1.start(); t2.start(); }

20 Java Threads: example outpout thread2: hello world thread1: hello world thread2: hello world thread1: hello world thread2: hello world thread1: hello world thread2: hello world

21 Nachos Threads class Thread{ public: Thread (char *name); ~Thread(); void Fork( void (*Func)( int), int arg); void Yield(); void Finish(); }

22 Nachos Threads for 170 OS Project C++ methods supported: Thread(char *Name). Create a thread. Fork(VoidFunctionPtr func, int arg). A thread starts to execute a function. Yield(). Suspend the calling thread and the system selects a new one for execution. Sleep(). Suspend the current thread, change its state to BLOCKED, and remove it from the ready list Finish()

23 main () { Thread *t1 =new Thread("thread1"); Thread *t2= new Thread("thread2"); t1->Fork(SimpleFunc, 1); t2->Fork(SimpleFunc, 2); SimpleFunc(3); } SimpleFunc(int i) { printf(“Hello %d\n”, i); currentThread->Yield(); } Example of Nacho Threads Start to fork and execute a function in each child thread. Function executed by threads Create 2 new thread data structure Parent executes the same function

24 Thread Lifecycle

25 Implementing threads Thread_fork(func, args)  Allocate thread control block  Allocate stack  Build stack frame for base of stack (stub)  Put func, args on stack  Put thread on ready list  Will run sometime later (maybe right away!) stub(func, args):  Call (*func)(args)  Call thread_exit() Thread switching during scheduling  Save registers on old stack  Switch to new stack, new thread  Restore registers from new stack

26 Shared vs. Per-Thread State

27 Types of Threads: Kernel vs user-level Kernel Threads Recognized and supported by the OS Kernel OS explicitly performs scheduling and context switching of kernel threads Linux, MacOS, Windows

28 User-level Threads Thread management done by user-level threads library  OS kernel does not know/recognize there are multiple threads running in a user program.  The user program (library) is responsible for scheduling and context switching of its threads. Examples:  Java threads

29 Summary: Process vs Thread 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 Various Textbooks talk 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 John Kubiatowicz (http://cs162.eecs.Berkeley.edu)


Download ppt "Lecture 4: Concurrency and Threads CS 170 T Yang, 2015 Chapter 4 of AD textbook."

Similar presentations


Ads by Google