Operating Systems ECE344 Lecture 4: Threads Ding Yuan.

Slides:



Advertisements
Similar presentations
Chapter 5 Threads os5.
Advertisements

Day 10 Threads. Threads and Processes  Process is seen as two entities Unit of resource allocation (process or task) Unit of dispatch or scheduling (thread.
Chapter 4: Threads. Overview Multithreading Models Threading Issues Pthreads Windows XP Threads.
Course: Operating Systems Instructor: Umar Kalim NUST Institute of Information Technology, Pakistan Operating Systems.
Threads. Announcements Cooperating Processes Last time we discussed how processes can be independent or work cooperatively Cooperating processes can.
Processes CSCI 444/544 Operating Systems Fall 2008.
Silberschatz, Galvin and Gagne  Operating System Concepts Chapter 5: Threads Overview Multithreading Models Threading Issues Pthreads Solaris.
Chapter 4: Threads. 2 What’s in a process? A process consists of (at least): –an address space –the code for the running program –the data for the running.
Threads vs. Processes April 7, 2000 Instructor: Gary Kimura Slides courtesy of Hank Levy.
Threads 1 CS502 Spring 2006 Threads CS-502 Spring 2006.
Based on Silberschatz, Galvin and Gagne  2009 Threads Definition and motivation Multithreading Models Threading Issues Examples.
Threads CSCI 444/544 Operating Systems Fall 2008.
Threads. Announcements CSUGLab accounts are ready Fixed homework 1 submissions using CMS.
Operating System Concepts with Java – 7 th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007 Chapter 4: Threads.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Processes.
Threads. Processes and Threads  Two characteristics of “processes” as considered so far: Unit of resource allocation Unit of dispatch  Characteristics.
Process Concept An operating system executes a variety of programs
Threads CS 416: Operating Systems Design, Spring 2001 Department of Computer Science Rutgers University
CS 3013 & CS 502 Summer 2006 Threads1 CS-3013 & CS-502 Summer 2006.
1 Threads Chapter 4 Reading: 4.1,4.4, Process Characteristics l Unit of resource ownership - process is allocated: n a virtual address space to.
Chapter 51 Threads Chapter 5. 2 Process Characteristics  Concept of Process has two facets.  A Process is: A Unit of resource ownership:  a virtual.
14.1 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts with Java – 8 th Edition Chapter 4: Threads.
CSE 451: Operating Systems Autumn 2013 Module 6 Review of Processes, Kernel Threads, User-Level Threads Ed Lazowska 570 Allen.
Operating Systems CSE 411 CPU Management Sept Lecture 11 Instructor: Bhuvan Urgaonkar.
CS 153 Design of Operating Systems Spring 2015
Chapter 4: Threads. From Processes to Threads 4.3 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Threads.
Silberschatz, Galvin and Gagne  Operating System Concepts Chapter 5: Threads Overview Multithreading Models Threading Issues Pthreads Solaris.
Multithreading Allows application to split itself into multiple “threads” of execution (“threads of execution”). OS support for creating threads, terminating.
Silberschatz, Galvin and Gagne ©2011Operating System Concepts Essentials – 8 th Edition Chapter 4: Threads.
Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8 th Edition Chapter 4: Threads.
CSC 501 Lecture 2: Processes. Process Process is a running program a program in execution an “instantiation” of a program Program is a bunch of instructions.
Threads, Thread management & Resource Management.
Operating Systems ECE344 Ashvin Goel ECE University of Toronto Thread Scheduling.
Silberschatz, Galvin and Gagne  2002 Modified for CSCI 399, Royden, Operating System Concepts Operating Systems Lecture 13 Threads Read Ch 5.1.
Chapter 4: Threads. 2 Overview Multithreading Models Threading Issues Pthreads Windows XP Threads Linux Threads.
CS 153 Design of Operating Systems Spring 2015 Lecture 5: Processes and Threads.
Lecture 5: Threads process as a unit of scheduling and a unit of resource allocation processes vs. threads what to program with threads why use threads.
Chapter 4: Multithreaded Programming. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts What is Thread “Thread is a part of a program.
Chapter 4: Threads. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Chapter 4: Threads Overview Multithreading.
Operating Systems CSE 411 CPU Management Sept Lecture 10 Instructor: Bhuvan Urgaonkar.
Department of Computer Science and Software Engineering
Processes, Threads, and Process States. Programs and Processes  Program: an executable file (before/after compilation)  Process: an instance of a program.
© Janice Regan, CMPT 300, May CMPT 300 Introduction to Operating Systems Operating Systems Processes and Threads.
CSE 153 Design of Operating Systems Winter 2015 Lecture 4: Threads.
Lecturer 3: Processes multithreaded Operating System Concepts Process Concept Process Scheduling Operation on Processes Cooperating Processes Interprocess.
1 Chapter 5: Threads Overview Multithreading Models & Issues Read Chapter 5 pages
Threads prepared and instructed by Shmuel Wimer Eng. Faculty, Bar-Ilan University 1July 2016Processes.
Threads Overview Benefits, User and Kernel Threads.
CS 6560: Operating Systems Design
CSE 120 Principles of Operating
Chapter 2 Processes and Threads Today 2.1 Processes 2.2 Threads
Operating Systems ECE344 Lecture 4: Threads Ding Yuan.
Threads & multithreading
CSE 451: Operating Systems Autumn 2004 Module 5 Threads
CSE 153 Design of Operating Systems Winter 2018
Lecture Topics: 11/1 General Operating System Concepts Processes
CSE 451: Operating Systems Autumn 2003 Lecture 5 Threads
Threads Chapter 4.
CSE 451: Operating Systems Winter 2003 Lecture 5 Threads
Threads Chapter 5 2/17/2019 B.Ramamurthy.
Threads Chapter 5 2/23/2019 B.Ramamurthy.
Still Chapter 2 (Based on Silberchatz’s text and Nachos Roadmap.)
October 9, 2002 Gary Kimura Lecture #5 October 9, 2002
Threads vs. Processes Hank Levy 1.
CS510 Operating System Foundations
CSE 153 Design of Operating Systems Winter 2019
CS703 – Advanced Operating Systems
CSE451 Introduction to Operating Systems Spring 2007
CSE 451: Operating Systems Winter 2001 Lecture 5 Threads
Threads.
Presentation transcript:

Operating Systems ECE344 Lecture 4: Threads Ding Yuan

Processes Recall that a process includes many things An address space (defining all the code and data pages) OS resources (e.g., open files) and accounting information Execution state (PC, SP, regs, etc.) Creating a new process is costly because of all of the data structures that must be allocated and initialized Recall struct proc in Solaris …which does not even include page tables, perhaps TLB flushing, etc. Communicating between processes is costly because most communication goes through the OS Overhead of system calls and copying data Ding Yuan, ECE344 Operating System

Parallel Programs To execute these programs we need to Create several processes that execute in parallel Cause each to map to the same address space to share data They are all part of the same computation Have the OS schedule these processes in parallel This situation is very inefficient Space: PCB, page tables, etc. Time: create data structures, fork and copy addr space, etc. Solutions: possible to have more efficient, yet cooperative “processes”? Ding Yuan, ECE344 Operating System

Rethinking Processes What is similar in these cooperating processes? They all share the same code and data (address space) They all share the same privileges They all share the same resources (files, sockets, etc.) What don’t they share? Each has its own execution state: PC, SP, and registers Key idea: Why don’t we separate the concept of a process from its execution state? Process: address space, privileges, resources, etc. Execution state: PC, SP, registers Exec state also called thread of control, or thread Ding Yuan, ECE344 Operating System

Threads Modern OSes (Mac, Windows, modern Unix) separate the concepts of processes and threads The thread defines a sequential execution stream within a process (PC, SP, registers) The process defines the address space and general process attributes (everything but threads of execution) A thread is bound to a single process Processes, however, can have multiple threads Threads become the unit of scheduling Processes are now the containers in which threads execute Ding Yuan, ECE344 Operating System

Threads: lightweight processes execution environment (resource) (a) Three processes each with one thread (b) One process with three threads Ding Yuan, ECE344 Operating System

Analogy: Process: Thread: Hire 4 software engineers to work on 4 projects Thread: Have one engineer to work on 4 projects Ding Yuan, ECE344 Operating System

The thread model Shared information Private state Processor info: parent process, time, etc Memory: segments, page table, and stats, etc I/O and file: communication ports, directories and file descriptors, etc Private state Registers Program counter Execution stack State (ready, running and blocked) Why? Each thread execute separately Ding Yuan, ECE344 Operating System

Threads in a Process Stack (T1) Thread 1 Stack (T2) Thread 2 Heap Static Data PC (T3) PC (T2) Code PC (T1) Ding Yuan, ECE344 Operating System

Threads: Concurrent Servers Using fork() to create new processes to handle requests in parallel is overkill for such a simple task Recall our forking Web server: while (1) { int sock = accept(); if ((child_pid = fork()) == 0) { Handle client request Close socket and exit } else { Close socket } Ding Yuan, ECE344 Operating System

Threads: Concurrent Servers Instead, we can create a new thread for each request web_server() { while (1) { int sock = accept(); thread_create(handle_request, sock); } handle_request(int sock) { Process request close(sock); Ding Yuan, ECE344 Operating System

Thread usage: web server Ding Yuan, ECE344 Operating System

Thread usage: word processor A thread can wait for I/O, while the other threads can still running. What if it is single-threaded? Ding Yuan, ECE344 Operating System

Kernel-Level Threads We have taken the execution aspect of a process and separated it out into threads To make concurrency cheaper As such, the OS now manages threads and processes All thread operations are implemented in the kernel The OS schedules all of the threads in the system OS-managed threads are called kernel-level threads or lightweight processes Windows: threads Solaris: lightweight processes (LWP) POSIX Threads (pthreads): PTHREAD_SCOPE_SYSTEM Ding Yuan, ECE344 Operating System

Kernel-level Thread Limitations Kernel-level threads make concurrency much cheaper than processes Much less state to allocate and initialize However, for fine-grained concurrency, kernel-level threads still suffer from too much overhead Thread operations still require system calls Ideally, want thread operations to be as fast as a procedure call For such fine-grained concurrency, need even “cheaper” threads Ding Yuan, ECE344 Operating System

User-Level Threads To make threads cheap and fast, they need to be implemented at user level Kernel-level threads are managed by the OS User-level threads are managed entirely by the run-time system (user-level library) User-level threads are small and fast A thread is simply represented by a PC, registers, stack, and small thread control block (TCB) Creating a new thread, switching between threads, and synchronizing threads are done via procedure call No kernel involvement User-level thread operations 100x faster than kernel threads pthreads: PTHREAD_SCOPE_PROCESS Ding Yuan, ECE344 Operating System

User-level Thread Limitations But, user-level threads are not a perfect solution As with everything else, they are a tradeoff User-level threads are invisible to the OS They are not well integrated with the OS As a result, the OS can make poor decisions Scheduling a process with idle threads Blocking a process whose thread initiated an I/O, even though the process has other threads that can execute Solving this requires communication between the kernel and the user-level thread manager Ding Yuan, ECE344 Operating System

Kernel- vs. User-level Threads Kernel-level threads Integrated with OS (informed scheduling) Slow to create, manipulate, synchronize User-level threads Fast to create, manipulate, synchronize Not integrated with OS (uninformed scheduling) Understanding the differences between kernel- and user-level threads is important For programming (correctness, performance) For test-taking Ding Yuan, ECE344 Operating System

Kernel- and User-level Threads Or use both kernel- and user-level threads Can associate a user-level thread with a kernel-level thread Or, multiplex user-level threads on top of kernel-level threads Java Virtual Machine (JVM) Java threads are user-level threads On older Unix, only one “kernel thread” per process Multiplex all Java threads on this one kernel thread On Windows NT, modern Unix Can multiplex Java threads on multiple kernel threads Can have more Java threads than kernel threads Ding Yuan, ECE344 Operating System

Implementing Threads Implementing threads has a number of issues Interface Context switch Preemptive vs. Non-preemptive What do they mean? Scheduling Synchronization (next lecture) Focus on user-level threads Kernel-level threads are similar to original process management and implementation in the OS Ding Yuan, ECE344 Operating System

Sample Thread Interface thread_create(procedure_t, arg) Create a new thread of control Start executing procedure_t thread_yield() Voluntarily give up the processor thread_exit() Terminate the calling thread; also thread_destroy thread_join(target_thread) Suspend the execution of calling thread until target_thread terminates Ding Yuan, ECE344 Operating System

Thread Scheduling For user-level thread: scheduling occurs entirely in user-space The thread scheduler determines when a thread runs It uses queues to keep track of what threads are doing Just like the OS and processes But it is implemented at user-level in a library Run queue: Threads currently running (usually one) Ready queue: Threads ready to run Are there wait queues? Ding Yuan, ECE344 Operating System

Sample Thread Interface thread_create(procedure_t, arg) Create a new thread of control Start executing procedure_t thread_yield() Voluntarily give up the processor thread_exit() Terminate the calling thread; also thread_destroy thread_join(target_thread) Suspend the execution of calling thread until target_thread terminates Ding Yuan, ECE344 Operating System

Non-Preemptive Scheduling Threads voluntarily give up the CPU with thread_yield What is the output of running these two threads? Ping Thread Pong Thread while (1) { printf(“ping\n”); thread_yield(); } while (1) { printf(“pong\n”); thread_yield(); } Ding Yuan, ECE344 Operating System

thread_yield() Wait a second. How does thread_yield() work? The semantics of thread_yield are that it gives up the CPU to another thread In other words, it context switches to another thread So what does it mean for thread_yield to return? It means that another thread called thread_yield! Execution trace of ping/pong printf(“ping\n”); thread_yield(); printf(“pong\n”); … Ding Yuan, ECE344 Operating System

Implementing thread_yield() The magic step is invoking context_switch() Why do we need to call append_to_queue()? thread_yield() { thread_t old_thread = current_thread; current_thread = get_next_thread(); append_to_queue(ready_queue, old_thread); context_switch(old_thread, current_thread); return; } As old thread As new thread Ding Yuan, ECE344 Operating System

Thread Context Switch The context switch routine does all of the magic Saves context of the currently running thread (old_thread) Push all machine state onto its stack Restores context of the next thread Pop all machine state from the next thread’s stack The next thread becomes the current thread Return to caller as new thread This is all done in assembly language See arch/mips/mips/switch.S in OS161 (kernel thread implementation) Ding Yuan, ECE344 Operating System

Wait a minute Non-preemptive threads have to voluntarily give up CPU Only voluntary calls to thread_yield(), or thread_exit() causes a context switch What if one thread never release the CPU (never calls thread_yield())? We need preemptive user-level thread scheduling Ding Yuan, ECE344 Operating System

Preemptive Scheduling Preemptive scheduling causes an involuntary context switch Need to regain control of processor asynchronously How? Use timer interrupt Timer interrupt handler forces current thread to “call” thread_yield Ding Yuan, ECE344 Operating System

Process vs. threads Multithreading is only an option for “cooperative tasks” Trust and sharing Process Strong isolation but poor performance Thread Good performance but share too much Example: web browsers Safari: multithreading one webpage can crash entire Safari Google Chrome: each tab has its own process Ding Yuan, ECE344 Operating System

Threads Summary The operating system as a large multithreaded program Each process executes as a thread within the OS Multithreading is also very useful for applications Efficient multithreading requires fast primitives Processes are too heavyweight Solution is to separate threads from processes Kernel-level threads much better, but still significant overhead User-level threads even better, but not well integrated with OS Now, how do we get our threads to correctly cooperate with each other? Synchronization… Ding Yuan, ECE344 Operating System