CSE 451: Operating Systems Section 6 Project 2b. Midterm  Scores will be on Catalyst and midterms were handed back on Friday(?) in class  Talk to Ed,

Slides:



Advertisements
Similar presentations
Operating Systems ECE344 Midterm review Ding Yuan
Advertisements

Chapter 6: Process Synchronization
CSE 451: Operating Systems Section 6 Project 2b; Midterm Review.
CSE 451: Operating Systems
1 CS318 Project #3 Preemptive Kernel. 2 Continuing from Project 2 Project 2 involved: Context Switch Stack Manipulation Saving State Moving between threads,
5.6 Semaphores Semaphores –Software construct that can be used to enforce mutual exclusion –Contains a protected variable Can be accessed only via wait.
Precept 3 COS 461. Concurrency is Useful Multi Processor/Core Multiple Inputs Don’t wait on slow devices.
1 CSE451 – Section 5. 2 Reminders/Overview Rest of project 2 due Monday February 13 Turnin code + writeup Midterm Wednesday the 8th Today: Project 2 parts.
Operating Systems Course Hebrew University Spring 2007 Signals & User Thread.
Server Architecture Models Operating Systems Hebrew University Spring 2004.
Home: Phones OFF Please Unix Kernel Parminder Singh Kang Home:
CSE451 Section 6: Spring 2006 Web server & preemption.
CPS110: Implementing threads/locks on a uni-processor Landon Cox.
Race Conditions CS550 Operating Systems. Review So far, we have discussed Processes and Threads and talked about multithreading and MPI processes by example.
Threads CS 416: Operating Systems Design, Spring 2001 Department of Computer Science Rutgers University
Preemptive Scheduling Vivek Pai / Kai Li Princeton University.
Discussion Week 3 TA: Kyle Dewey. Overview Concurrency overview Synchronization primitives Semaphores Locks Conditions Project #1.
UNIX Signals Bach 7.2 Operating Systems Course The Hebrew University Spring 2010.
Chapter 4: Threads. 4.2CSCI 380 Operating Systems Chapter 4: Threads Overview Multithreading Models Threading Issues Pthreads Windows XP Threads Linux.
Nachos Phase 1 Code -Hints and Comments
Object Oriented Analysis & Design SDL Threads. Contents 2  Processes  Thread Concepts  Creating threads  Critical sections  Synchronizing threads.
Recitation 9: Section L (1:30pm - 2:20pm) Monday, October 22, 2012 Processes, Signals and Shell Lab Siddharth Dhulipalla.
REVIEW On Friday we explored Client-Server Applications with Sockets. Servers must create a ServerSocket object on a specific Port #. They then can wait.
Thread-Safe Programming Living With Linux. Thread-Safe Programming Tommy Reynolds Fedora Documentation Project Steering Committee
Proactor Pattern Venkita Subramonian & Christopher Gill
CSE 451: Operating Systems Section 7 Data races, thread pools, project 2b.
Copyright ©: University of Illinois CS 241 Staff1 Threads Systems Concepts.
CSE 451: Operating Systems Section 5 Midterm review.
UNIX Socket Programming CS 6378 Project Reference Book: Unix Network programming: Networking APIs: Sockets and XTI (2nd edition), Prentice Hall >> Threads.
1 Signals (continued) CS 241 April 9, 2012 University of Illinois.
Discussion Week 2 TA: Kyle Dewey. Overview Concurrency Process level Thread level MIPS - switch.s Project #1.
UNIX Signals * POSIX-Defined Signals * Signaling Processes * Signal Mask * sigaction * kill and sigaction * alarm * Interval Timers * POSIX.1b Timers *
Operating Systems CSE 411 CPU Management Sept Lecture 10 Instructor: Bhuvan Urgaonkar.
CS399 New Beginnings Jonathan Walpole. 2 Concurrent Programming & Synchronization Primitives.
Processes, Threads, and Process States. Programs and Processes  Program: an executable file (before/after compilation)  Process: an instance of a program.
CSE 153 Design of Operating Systems Winter 2015 Midterm Review.
Managing Processors Jeff Chase Duke University. The story so far: protected CPU mode user mode kernel mode kernel “top half” kernel “bottom half” (interrupt.
Operating Systems CMPSC 473 Signals, Introduction to mutual exclusion September 28, Lecture 9 Instructor: Bhuvan Urgaonkar.
Slides created by: Professor Ian G. Harris Operating Systems  Allow the processor to perform several tasks at virtually the same time Ex. Web Controlled.
CSE 451: Operating Systems Section 7: Project 2b; Virtual Memory.
Slides on threads borrowed by Chase Landon Cox. Thread states BlockedReady Running Thread is scheduled Thread is Pre-empted (or yields) Thread calls Lock.
Copyright ©: Nahrstedt, Angrave, Abdelzaher, Caccamo1 Signals.
Mutual Exclusion -- Addendum. Mutual Exclusion in Critical Sections.
CPS110: Implementing threads on a uni-processor Landon Cox January 29, 2008.
CSE 451: Operating Systems Section 4 Project 2 Intro; Threads.
Process Synchronization. Concurrency Definition: Two or more processes execute concurrently when they execute different activities on different devices.
CSE 451 Section #3. Questions from Lecture Kinds of threads When threads are used How threads are implemented Scheduling.
CSE 120 Principles of Operating
CS 6560: Operating Systems Design
COT 4600 Operating Systems Fall 2009
Preemption Set timer interrupts But now, must synchronize Two tools:
Winter 2k7 Kurtis Heimerl Aaron Kimball
Threading and Project 2 (Some slides taken from Sec. 3 Winter 2006)
Threads and Cooperation
Operating Systems Lecture 12.
CSE451 – Section 6.
CSE 451 Autumn 2003 Section 3 October 16.
Threads Chapter 5 2/17/2019 B.Ramamurthy.
CSE451 – Section 5.
Threads Chapter 5 2/23/2019 B.Ramamurthy.
Still Chapter 2 (Based on Silberchatz’s text and Nachos Roadmap.)
First slide Rest of project 2 due next Friday Today:
February 5, 2004 Adrienne Noble
Reminders Homework 4 due next Friday Rest of project 2 due next Friday
CS333 Intro to Operating Systems
Project 2, part 4 - web server
CSE 153 Design of Operating Systems Winter 2019
CS703 – Advanced Operating Systems
CSE 153 Design of Operating Systems Winter 2019
Threads CSE 2431: Introduction to Operating Systems
Presentation transcript:

CSE 451: Operating Systems Section 6 Project 2b

Midterm  Scores will be on Catalyst and midterms were handed back on Friday(?) in class  Talk to Ed, Sean, or Jeff about grading questions  Office hours are the best time for this 10/31/122

Project 2a learnings  What sort of interesting behavior have you seen in experimenting with test-burgers?  What has been the hardest part of the library to implement? 10/31/123

Project 2b  Parts 4, 5 and 6 of project 2  Due at 11:59pm, Sunday November 17 10/31/124

Part 4: web server  web/sioux.c – singlethreaded web server  Read in command line args, run the web server loop 510/31/12

Part 4: web server  web/sioux_run.c – the web server loop  Open a socket to listen for connections ( listen(2) )  Wait for a connection ( accept(2) )  Handle connection:  Parse the HTTP request  Find and read the requested file  Send the file back  Close the connection 610/31/12

Thread pools Image from More info: 710/31/12

What you need to do  Make the web server multithreaded  Create a thread pool  Suggestion: create separate thread_pool.h, thread_pool.c  Wait for a connection  Find an available thread to handle the request  Request waits (where?) if all threads busy  Once the request is handed to a thread, it uses the same processing code as before  See web_runloop() in sioux_run.c 810/31/12

Hints  Each connection is identified by a socket file descriptor returned by accept(2)  File descriptor (fd) is just an int  Threads should sleep while waiting for a new connection  Condition variables are perfect for this 910/31/12

Hints  Don’t forget to protect any global variables  Use mutexes and CVs from part 2  Develop and test with pthreads initially  Use only the sthread.h interface  Mostly modify sioux_run.c, and your own files 1010/31/12

Part 5: preemption  What we give you (see sthread_preempt.c ):  Timer interrupts  Function to turn interrupts on and off  Synchronization primitives atomic_test_and_set, atomic_clear  x86/amd64 architectures only 1110/31/12

Part 5: preemption  What you have to do:  Add code that will run every time a timer interrupt is generated  Add synchronization to your part 1 and part 2 implementations so that everything works with preemptive thread scheduling  Can be done independently of part /31/12

sthread_preempt.h /* Start preemption - func will be called * every period microseconds */ void sthread_preemption_init (sthread_ctx_start_func_t func, int period); /* Turns interrupts on (LOW) or off (HIGH) * Returns the last state of the * interrupts */ int splx(int splval); 1310/31/12

sthread_preempt.h /* atomic_test_and_set - using the native * compare and exchange on the Intel x86. * * Example usage: * lock_t lock; * while(atomic_test_and_set(&lock)) * {} // spin * _critical section_ * atomic_clear(&lock); */ int atomic_test_and_set(lock_t *l); void atomic_clear(lock_t *l); 1410/31/12

Signals  Used to notify processes of events asynchronously  Every process has a signal handler table  When a signal is sent to a process, OS interrupts that process and calls the handler registered for that signal 1510/31/12

Signal manipulation  A process can:  Override the default signal handlers using sigaction(2)  Block / unblock signals with sigprocmask(2)  Send a signal via kill(2)  Signals:  SIGINT (CTRL-C), SIGQUIT (CTRL-\), SIGKILL, SIGFPE, SIGALRM, SIGSEGV… 1610/31/12

What you need to do  Add a call to sthread_preemption_init() as the last line in your sthread_user_init() function  sthread_preemption_init() takes a pointer to a function that will be called on each timer interrupt  This function should cause thread scheduler to switch to a different thread! 1710/31/12

What you need to do  Add synchronization to critical sections in thread management routines  Think: what would happen if the code was interrupted at this point?  Would it resume later with no problems?  Could the interrupting code mess with any variables that this code is currently using?  Don’t have to worry about simplethreads code that you didn’t write (i.e. sthread_switch): already done for you 1810/31/12

What you need to do  Before doing a context switch, interrupts should be disabled to avoid preemption. How can they be reenabled after the switch?  Hint: Think of the possible execution paths 1910/31/12

Interrupt disabling Non-thread-safe /* returns next thread * on the ready queue */ sthread_t sthread_user_next() { sthread_t next; next = sthread_dequeue (ready_q); if (next == NULL) exit(0); return next; } Thread-safe sthread_t sthread_user_next() { sthread_t next; int old = splx (HIGH); next = sthread_dequeue (ready_q); splx (old); if (next == NULL) exit(0); return next; } 2010/31/12

Interrupt disabling Thread-safe sthread_t sthread_user_next() { sthread_t next; int old = splx (HIGH); next = sthread_dequeue (ready_q); splx (old); if (next == NULL) exit(0); return next; } 2110/31/12  Why do we call splx(old) after dequeuing instead of just splx(LOW) ?

Atomic locking  So what is atomic_test_and_set() for?  Primarily to implement higher-level synchronization primitives (mutexes, CVs)  One way to think about preemption-safe thread library:  Disable/enable interrupts in “library” context  Use atomic locking in “application” context 2210/31/12

Race conditions and testing  How can you test your preemption code?  How can you know that you’ve found all of the critical sections? 2310/31/12

Part 6: report  Covers all parts of project 2  Discuss your design decisions. In detail. PLEASE!  Performance evaluation:  Measure throughput and response time of your web server using web benchmarking tool  Vary the number of threads and number of “clients”  Present results in graphical form  Explain results: expected or not? 2410/31/12

Project 2 questions? 10/31/1225