Lecture 4: Threads; weaving control flow

Similar documents
CSE 120 Principles of Operating Systems

CSE 120 Principles of Operating Systems

CSE 120 Principles of Operating Systems

CS 153 Design of Operating Systems Winter 2016

CSE 153 Design of Operating Systems Fall 2018

CS 318 Principles of Operating Systems

CS 318 Principles of Operating Systems

Lecture 5: Synchronization w/locks

CS 153 Design of Operating Systems Spring 18

CSE 153 Design of Operating Systems Fall 2018

Threads Implementation. Jo, Heeseung

CSE120 Principles of Operating Systems. Prof Yuanyuan (YY) Zhou Lecture 4: Threads

Processes & Threads. Process Management. Managing Concurrency in Computer Systems. The Process. What s in a Process?

Threads Implementation. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Threads. Raju Pandey Department of Computer Sciences University of California, Davis Spring 2011

Yi Shi Fall 2017 Xi an Jiaotong University

Threads. Computer Systems. 5/12/2009 cse threads Perkins, DW Johnson and University of Washington 1

Questions answered in this lecture: CS 537 Lecture 19 Threads and Cooperation. What s in a process? Organizing a Process

Notes. CS 537 Lecture 5 Threads and Cooperation. Questions answered in this lecture: What s in a process?

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

What s in a process?

Threads. CSE 410, Spring 2004 Computer Systems.

SE350: Operating Systems. Lecture 3: Concurrency

CSE 153 Design of Operating Systems

Today s Topics. u Thread implementation. l Non-preemptive versus preemptive threads. l Kernel vs. user threads

10/10/ Gribble, Lazowska, Levy, Zahorjan 2. 10/10/ Gribble, Lazowska, Levy, Zahorjan 4

CS 153 Design of Operating Systems Winter 2016

What s in a traditional process? Concurrency/Parallelism. What s needed? CSE 451: Operating Systems Autumn 2012

Today s Topics. u Thread implementation. l Non-preemptive versus preemptive threads. l Kernel vs. user threads

Computer Systems Laboratory Sungkyunkwan University

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

Lecture 5: Concurrency and Threads

Advanced Operating Systems (CS 202) Scheduling (1)

CS 31: Intro to Systems Threading & Parallel Applications. Kevin Webb Swarthmore College November 27, 2018

!! How is a thread different from a process? !! Why are threads useful? !! How can POSIX threads be useful?

Process Description and Control

Processes and Threads

Disciplina Sistemas de Computação

! How is a thread different from a process? ! Why are threads useful? ! How can POSIX threads be useful?

Page 1. Analogy: Problems: Operating Systems Lecture 7. Operating Systems Lecture 7

Chapter 4: Threads. Operating System Concepts 8 th Edition,

Agenda. Threads. Single and Multi-threaded Processes. What is Thread. CSCI 444/544 Operating Systems Fall 2008

Announcements/Reminders

THREADS. Jo, Heeseung

Processes and Non-Preemptive Scheduling. Otto J. Anshus

Operating Systems. Lecture 4. Nachos Appetizer

CSCE 313 Introduction to Computer Systems. Instructor: Dezhen Song

CSCE 313: Intro to Computer Systems

Chapter 5: Threads. Outline

Threads and Too Much Milk! CS439: Principles of Computer Systems February 6, 2019

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

System Call. Preview. System Call. System Call. System Call 9/7/2018

Lecture Topics. Announcements. Today: Threads (Stallings, chapter , 4.6) Next: Concurrency (Stallings, chapter , 5.

Last time: introduction. Networks and Operating Systems ( ) Chapter 2: Processes. This time. General OS structure. The kernel is a program!

Processes and Threads

Chapter 3 Process Description and Control

Arvind Krishnamurthy Spring Threads, synchronization, scheduling Virtual memory File systems Networking

Chapter 4: Multithreaded Programming

Threads and Too Much Milk! CS439: Principles of Computer Systems January 31, 2018

Processes and Threads. Processes and Threads. Processes (2) Processes (1)

OPERATING SYSTEM. Chapter 4: Threads

Chapter 4: Multithreaded

Lecture 2: Processes. CSE 120: Principles of Opera9ng Systems. UC San Diego: Summer Session I, 2009 Frank Uyeda

Motivation. Threads. Multithreaded Server Architecture. Thread of execution. Chapter 4

OS lpr. www. nfsd gcc emacs ls 1/27/09. Process Management. CS 537 Lecture 3: Processes. Example OS in operation. Why Processes? Simplicity + Speed

Processes. 4: Threads. Problem needs > 1 independent sequential process? Example: Web Server. Last Modified: 9/17/2002 2:27:59 PM

CSC369 Lecture 2. Larry Zhang

Chapter 4: Threads. Chapter 4: Threads. Overview Multicore Programming Multithreading Models Thread Libraries Implicit Threading Threading Issues

Operating Systems 2 nd semester 2016/2017. Chapter 4: Threads

CS 326: Operating Systems. Process Execution. Lecture 5

Processes. CS3026 Operating Systems Lecture 05

Threads. Still Chapter 2 (Based on Silberchatz s text and Nachos Roadmap.) 3/9/2003 B.Ramamurthy 1

Operating System. Chapter 4. Threads. Lynn Choi School of Electrical Engineering

Administrivia. Nachos guide and Lab #1 are on the web.

EI 338: Computer Systems Engineering (Operating Systems & Computer Architecture)

W4118 Operating Systems. Junfeng Yang

Lecture 17: Threads and Scheduling. Thursday, 05 Nov 2009

Lecture 4: Process Management

CS5460: Operating Systems

Exercise (could be a quiz) Solution. Concurrent Programming. Roadmap. Tevfik Koşar. CSE 421/521 - Operating Systems Fall Lecture - IV Threads

CS153: Process 2. Chengyu Song. Slides modified from Harsha Madhyvasta, Nael Abu-Ghazaleh, and Zhiyun Qian

Threads and Concurrency

Processes and Threads

Lecture 2 Process Management

CSC369 Lecture 2. Larry Zhang, September 21, 2015

Last Class: CPU Scheduling. Pre-emptive versus non-preemptive schedulers Goals for Scheduling: CS377: Operating Systems.

ELEC 377 Operating Systems. Week 1 Class 2

Learning Outcomes. Processes and Threads. Major Requirements of an Operating System. Processes and Threads

Chapter 4: Threads. Overview Multithreading Models Thread Libraries Threading Issues Operating System Examples Windows XP Threads Linux Threads

Lecture 9: Midterm Review

Chapter 4: Multi-Threaded Programming

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

Distributed Systems Operation System Support

Threads. CS3026 Operating Systems Lecture 06

CSE325 Principles of Operating Systems. Processes. David P. Duggan February 1, 2011

Chapter 4: Threads. Chapter 4: Threads

Chapter 4: Multithreaded Programming. Operating System Concepts 8 th Edition,

Last Class: OS and Computer Architecture. Last Class: OS and Computer Architecture

Process a program in execution; process execution must progress in sequential fashion. Operating Systems

CS5460: Operating Systems

Transcription:

Lecture 4: Threads; weaving control flow CSE 120: Principles of Operating Systems Alex C. Snoeren HW 1 Due NOW

Announcements Homework #1 due now Project 0 due tonight Project groups Please send project group info to Jose Project 1 will start on Thursday CSE 120 Lecture 4: Threads 2

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, etc. Communicating between processes is costly because most communication goes through the OS Overhead of system calls and copying data CSE 120 Lecture 4: Threads 3

Parallel Programs Also recall our Web server example that forks off copies of itself to handle multiple simultaneous requests Or any parallel program that executes on a multiprocessor 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 (logically or physically) This situation is very inefficient Space: PCB, page tables, etc. Time: create data structures, fork and copy addr space, etc. CSE 120 Lecture 4: Threads 4

The Soul of a Process 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 CSE 120 Lecture 4: Threads 5

Threads Modern OSes (Solaris, NT, 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 Each process has at least one thread Threads become the unit of scheduling Processes are now the containers in which threads execute Processes become static, threads are the dynamic entities Each CPU runs one thread at a time CSE 120 Lecture 4: Threads 6

Threads in a Process Stack (T1) Thread 1 Thread 2 Stack (T2) Stack (T3) Thread 3 PC (T2) Heap Static Data Code PC (T3) PC (T1) CSE 120 Lecture 4: Threads 7

Thread Design Space Address Space One Thread per Process One Address Space (MSDOS) One Thread per Process Many Address Spaces (Early Unix) Thread Many Threads per Process Many Threads per Process One Address Space Many Address Spaces (Java VM) (Solaris, Linux, NT, MacOS) CSE 120 Lecture 4: Threads 8

Why Use Threads? Separating threads and processes makes it easier to support parallel applications Creating concurrency does not require creating new processes Low-overhead sharing between threads in same process Concurrency (multithreading) can be very useful Improving program structure Handling concurrent events (e.g., Web requests) Taking advantage of multiple CPUs Overlapping I/O with computation But, brings a whole new meaning to Spaghetti Code Forcing OS students to learn about synchronization CSE 120 Lecture 4: Threads 9

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 } CSE 120 Lecture 4: Threads 10

Threads: Concurrent Servers Instead, we can create a new thread for each request web_server() { while (1) { int sock = accept(); thread_fork(handle_request, sock); } } handle_request(int sock) { Process request close(sock); } CSE 120 Lecture 4: Threads 11

Scheduling Threads No longer just scheduling processes, but threads Kernel scheduler used to pick among PCBs Now what? We have basically two options Kernel explicitly selects among threads in a process Hide threads from the kernel, and have a user-level scheduler inside each multi-threaded process Why do we care? Think about the overhead of switching between threads Who decides which thread in a process should go first? What about blocking system calls? CSE 120 Lecture 4: Threads 12

Kernel-Level Threads 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 NT: threads Solaris: lightweight processes (LWP) Scheduler deals in threads PCBs are no longer scheduled If a thread blocks, another thread in the same process can run Kernel ready queue CSE 120 Lecture 4: Threads 13

Kernel 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 Kernel-level threads have to be general to support the needs of all programmers, languages, runtimes, etc. For such fine-grained concurrency, need even cheaper threads CSE 120 Lecture 4: Threads 14

User-Level Threads To make threads cheap and fast, they need to be implemented at user level User-level threads are managed entirely by a run-time system (a.k.a. user-level thread library) Invisible to kernel A thread represented inside process by a PC, registers, stack, and small thread control block (TCB) Creating a new thread, switching, and synchronizing threads are done via user-level procedure call User-level thread operations 100x faster than kernel threads Thread library Kernel ready queue CSE 120 Lecture 4: Threads 15

User 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 Unscheduling a process with a thread holding a lock Solving this requires communication between the kernel and the user-level thread manager CSE 120 Lecture 4: Threads 16

Kernel vs. User 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 CSE 120 Lecture 4: Threads 17

Kernel and User Threads Another possibility is to 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 NT, modern Unix» Can multiplex Java threads on multiple kernel threads» Can have more Java threads than kernel threads» Why? CSE 120 Lecture 4: Threads 18

Multiplexing Threads Multiplexing user-level threads on a single kernel thread for each process Multiplexing user-level threads on multiple kernel threads for each process CSE 120 Lecture 4: Threads 19

Implementing Threads Implementing threads has a number of issues Interface Context switch Preemptive vs. non-preemptive Scheduling Synchronization (next lecture) Focus on user-level threads Kernel-level threads are similar to original process management and implementation in the OS What you will be dealing with in Nachos Not only will you be using threads in Nachos, you will be implementing more thread functionality CSE 120 Lecture 4: Threads 20

Thread Interface thread_fork(procedure_t) Create a new thread of control Also thread_create(), thread_setstate() thread_stop() Stop the calling thread; also thread_block thread_start(thread_t) Start the given thread thread_yield() Voluntarily give up the processor thread_exit() Terminate the calling thread; also thread_destroy CSE 120 Lecture 4: Threads 21

Thread Scheduling 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? How would you implement thread_sleep(time)? CSE 120 Lecture 4: Threads 22

Non-Preemptive Scheduling Threads voluntarily give up the CPU with thread_yield Ping Thread while (1) { printf( ping\n ); thread_yield(); } Pong Thread while (1) { printf( pong\n ); thread_yield(); } What is the output of running these two threads? CSE 120 Lecture 4: Threads 23

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 ); thread_yield(); CSE 120 Lecture 4: Threads 24

Implementing thread_yield() 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 The magic step is invoking context_switch() Why do we need to call append_to_queue()? CSE 120 Lecture 4: Threads 25

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 (not its TCB) 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 It works at the level of the procedure calling convention, so it cannot be implemented using procedure calls See code/threads/switch.s in Nachos CSE 120 Lecture 4: Threads 26

Preemptive Scheduling Non-preemptive threads have to voluntarily give up CPU A long-running thread will take over the machine Only voluntary calls to thread_yield(), thread_stop(), or thread_exit() causes a context switch Preemptive scheduling causes an involuntary context switch Need to regain control of processor asynchronously Use timer interrupt Timer interrupt handler forces current thread to call thread_yield» How do you do this? Nachos is preemptive» See use of thread->yieldonreturn in code/machine/interrupt.cc CSE 120 Lecture 4: Threads 27

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 CSE 120 Lecture 4: Threads 28

Next time Read Chapter 6.1 6.6 CSE 120 Lecture 4: Threads 29

Announcements UCSD CSE Programming Contest Saturday (10/8) Why should you go? To be like John: http://www-cse.ucsd.edu/users/calder/ucsdprogramcontest/ CSE 120 Lecture 4: Threads 30