Carnegie Mellon 1 Exceptional Control Flow 15-213: Introduction to Computer Systems Recitation 9: Monday, October 21 st, 2013 Ian Hartwig Section E.

Slides:



Advertisements
Similar presentations
Recitation 8 (Nov. 1) Outline Process & job control Lab 5 Reminder Lab 5: Due Thursday Minglong Shao Office hours: Thursdays 5-6PM.
Advertisements

Recitation 8: 10/28/02 Outline Processes Signals –Racing Hazard –Reaping Children Annie Luo Office Hours: Thursday 6:00.
More on Processes Chapter 3. Process image _the physical representation of a process in the OS _an address space consisting of code, data and stack segments.
1 CS345 Operating Systems Φροντιστήριο Άσκησης 1.
Carnegie Mellon 1 Exceptional Control Flow: Exceptions and Processes /18-243: Introduction to Computer Systems 13 th Lecture, June 15, 2011 Instructors:
Exceptional Control Flow Processes Today. Control Flow Processors do only one thing: From startup to shutdown, a CPU simply reads and executes (interprets)
University of Washington Today Midterm grades posted  76. HW 3 due Lab 4 fun! 1.
15-213, Fall 06 Outline Shell Lab Processes Signals.
15-213/ Intro to Computer Systems by btan with reference to Spring 10’s slides.
Processes Topics Process context switches Creating and destroying processes CS 105 “Tour of the Black Holes of Computing!”
UNIX Process Control Bach 7 Operating Systems Course Hebrew University Spring 2007.
Processes CSCI 444/544 Operating Systems Fall 2008.
CS 311 – Lecture 14 Outline Process management system calls Introduction System calls  fork()  getpid()  getppid()  wait()  exit() Orphan process.
Home: Phones OFF Please Unix Kernel Parminder Singh Kang Home:
Advanced OS Chapter 3p2 Sections 3.4 / 3.5. Interrupts These enable software to respond to signals from hardware. The set of instructions to be executed.
Process in Unix, Linux and Windows CS-3013 C-term Processes in Unix, Linux, and Windows CS-3013 Operating Systems (Slides include materials from.
CSSE Operating Systems
Section A (March 14) Outline Exceptions Process Signals Non-local jumps Reminders Lab4: Due Next Thursday TA: Kun Gao Shamelessly Modified from Minglong.
Processes, Signals, I/O, Shell lab
Carnegie Mellon 1 Processes, Signals, I/O, Shell Lab : Introduction to Computer Systems Recitation 9: 10/21/2013 Tommy Klein Section B.
Process in Unix, Linux, and Windows CS-3013 A-term Processes in Unix, Linux, and Windows CS-3013 Operating Systems (Slides include materials from.
Today’s Topics Introducing process: the basic mechanism for concurrent programming –Process management related system calls Process creation Process termination.
Recitation 9: Section L (1:30pm - 2:20pm) Monday, October 22, 2012 Processes, Signals and Shell Lab Siddharth Dhulipalla.
Lecture 3 Process Concepts. What is a Process? A process is the dynamic execution context of an executing program. Several processes may run concurrently,
CSC 2405 Computer Systems II Exceptions Mini-Lecture Traps & Interrupts.
System calls for Process management
Unix Process Model Simple and powerful primitives for process creation and initialization. fork syscall creates a child process as (initially) a clone.
Processes CS 6560: Operating Systems Design. 2 Von Neuman Model Both text (program) and data reside in memory Execution cycle Fetch instruction Decode.
Exceptional Control Flow Topics Exceptions except1.ppt CS 105 “Tour of the Black Holes of Computing”
Process Models, Creation and Termination Reference –text: Tanenbaum ch. 2.1.
Operating Systems Process Creation
1 Signals (continued) CS 241 April 9, 2012 University of Illinois.
Carnegie Mellon 1 Processes, Signals, I/O, Shell Lab : Introduction to Computer Systems Recitation 9: Monday, Oct. 21, 2013 Marjorie Carlson Section.
University of Washington Exceptional Control Flow The Hardware/Software Interface CSE351 Winter 2013.
Exceptional Control Flow I March 12, 2002
System calls for Process management Process creation, termination, waiting.
1 Exceptional Control Flow Ⅱ. 2 Outline Kernel Mode and User Mode Process context switches Three States of Processes Context Switch System Calls and Error.
1 Lecture 19: Unix signals and Terminal management n what is a signal n signal handling u kernel u user n signal generation n signal example usage n terminal.
CS241 Systems Programming Discussion Section Week 2 Original slides by: Stephen Kloder.
CS241 Systems Programming Discussion Section Week 2 Original slides by: Stephen Kloder.
S ALVATORE DI G IROLAMO (TA) Networks and Operating Systems: Exercise Session 1.
University of Washington Roadmap 1 car *c = malloc(sizeof(car)); c->miles = 100; c->gals = 17; float mpg = get_mpg(c); free(c); Car c = new Car(); c.setMiles(100);
Exceptional Control Flow
Recitation 7 (Oct. 25) Outline Minglong Shao Office hours: Reminders
Exceptional Control Flow & Processes
Exceptional Control Flow
Exceptional Control Flow
Exceptional Control Flow
Overview of today’s lecture
Unix Process Management
Exceptional Control Flow
Exceptional Control Flow
Exceptional Control Flow: System Calls, Page Faults etc.
Exceptional Control Flow Part II
Lecture 5: Process Creation
Exceptional Control Flow
Process Models, Creation and Termination
Processes in Unix, Linux, and Windows
Exceptional Control Flow
Exceptions Control Flow
Processes Prof. Ikjun Yeom TA – Mugyo
Exceptional Control Flow
CS201 - Lecture 17 Exceptions
CS 105 “Tour of the Black Holes of Computing!”
Lecture 6: Multiprogramming and Context Switching
Exceptional Control Flow
Exceptional Control Flow & Processes October 2, 2008
Exceptional Control Flow
Exceptional Control Flow
Presentation transcript:

Carnegie Mellon 1 Exceptional Control Flow : Introduction to Computer Systems Recitation 9: Monday, October 21 st, 2013 Ian Hartwig Section E

Carnegie Mellon 2 Agenda Midterm Wrap-Up Exceptional Control Flow Processes Process Examples Signals Shell lab

Carnegie Mellon 3 Midterm Wrap-Up Midterms are viewable now; see your for details.

Carnegie Mellon 4 Exceptional Control Flow Up to now: two mechanisms for changing control flow:  Jumps and branches  Call and return Both react to changes in program state Insufficient for a useful system: Difficult to react to changes in system state  data arrives from a disk or a network adapter  instruction divides by zero  user hits Ctrl-C at the keyboard  System timer expires System needs mechanisms for “exceptional control flow”

Carnegie Mellon 5 Exceptional Control Flow What are the different types of ECF?  Exceptions  Process Context Switch  Signals  Nonlocal jumps

Carnegie Mellon 6 Exceptional Control Flow Exceptions are either synchronous or asynchronous: Asynchronous  I/O interrupts  Reset interrupts Synchronous  Traps  Faults  Aborts

Carnegie Mellon 7 Asynchronous Exceptions (Interrupts) Caused by events external to the processor  Indicated by setting the processor’s interrupt pin  Handler returns to “next” instruction Examples:  I/O interrupts  hitting Ctrl-C at the keyboard  arrival of a packet from a network  arrival of data from a disk  Hard reset interrupt  hitting the reset button  Soft reset interrupt  hitting Ctrl-Alt-Delete on a PC

Carnegie Mellon 8 Synchronous Exceptions Caused by events that occur as a result of executing an instruction:  Traps  Intentional  Examples: system calls, breakpoint traps, special instructions  Returns control to “next” instruction  Faults  Unintentional but possibly recoverable  Examples: page faults (recoverable), protection faults (unrecoverable), floating point exceptions  Either re-executes faulting (“current”) instruction or aborts  Aborts  unintentional and unrecoverable  Examples: parity error, machine check  Aborts current program

Carnegie Mellon 9 Agenda Exceptional Control Flow Processes and Signals Shell lab

Carnegie Mellon 10 Processes What is a program?  A bunch of data and instructions stored in an executable binary file  Written according to a specification that tells users what it is supposed to do  Stateless since binary file is static

Carnegie Mellon 11 Processes Definition: A process is an instance of a running program. Process provides each program with two key abstractions:  Logical control flow  Each program seems to have exclusive use of the CPU  Private virtual address space  Each program seems to have exclusive use of main memory  Gives the running program a state How are these Illusions maintained?  Process executions interleaved (multitasking) or run on separate cores  Address spaces managed by virtual memory system  Just know that this exists for now; we’ll talk about it soon

Carnegie Mellon 12 Processes Four basic States  Running  Executing instructions on the CPU  Number bounded by number of CPU cores  Runnable  Waiting to be running  Blocked  Waiting for an event, maybe input from STDIN  Not runnable  Zombie  Terminated, not yet reaped

Carnegie Mellon 13 Processes Four basic process control function families:  fork()  exec()  And other variants such as execve()  exit()  wait()  And variants like waitpid() Standard on all UNIX-based systems Don’t be confused: Fork(), Exit(), Wait() are all wrappers provided by CS:APP

Carnegie Mellon 14 Processes int fork(void)  creates a new process (child process) that is identical to the calling process (parent process)  OS creates an exact duplicate of parent’s state:  Virtual address space (memory), including heap and stack  Registers, except for the return value (%eax/%rax)  File descriptors but files are shared  Result  Equal but separate state  Fork is interesting (and often confusing) because it is called once but returns twice

Carnegie Mellon 15 Processes int fork(void)  returns 0 to the child process  returns child’s pid (process id) to the parent process  Usually used like: pid_t pid = fork(); if (pid == 0) { // pid is 0 so we can detect child printf("hello from child\n"); } else { // pid = child’s assigned pid printf("hello from parent\n"); }

Carnegie Mellon 16 Processes int exec()  Replaces the current process’s state and context  But keeps PID, open files, and signal context  Provides a way to load and run another program  Replaces the current running memory image with that of new program  Set up stack with arguments and environment variables  Start execution at the entry point  Never returns on successful execution  The newly loaded program’s perspective: as if the previous program has not been run before  More useful variant is int execve()  More information? man 3 exec

Carnegie Mellon 17 Processes void exit(int status)  Normally return with status 0 (other numbers indicate an error)  Terminates the current process  OS frees resources such as heap memory and open file descriptors and so on…  Reduce to a zombie state  Must wait to be reaped by the parent process (or the init process if the parent died)  Signal is sent to the parent process notifying of death  Reaper can inspect the exit status

Carnegie Mellon 18 Processes int wait(int *child_status)  suspends current process until one of its children terminates  return value is the pid of the child process that terminated  When wait returns a pid > 0, child process has been reaped  All child resources freed  if child_status != NULL, then the object it points to will be set to a status indicating why the child process terminated  More useful variant is int waitpid()  For details: man 2 wait

Carnegie Mellon 19 Process Examples What are the possible output (assuming fork succeeds) ?  Child! Parent!  Parent! Child! How to get the child to always print first? pid_t child_pid = fork(); if (child_pid == 0){ /* only child comes here */ printf(“Child!\n”); exit(0); } else{ printf(“Parent!\n”); }

Carnegie Mellon 20 int status; pid_t child_pid = fork(); if (child_pid == 0){ /* only child comes here */ printf(“Child!\n”); exit(0); } else{ waitpid(child_pid, &status, 0); printf(“Parent!\n”); } Process Examples Waits til the child has terminated. Parent can inspect exit status of child using ‘status’  WEXITSTATUS(status) Output always: Child! Parent!

Carnegie Mellon 21 Process Examples An example of something useful. Why is the first arg “/bin/ls”? Will child reach here? int status; pid_t child_pid = fork(); char* argv[] = {“/bin/ls”, “-l”, NULL}; char* env[] = {…, NULL}; if (child_pid == 0){ /* only child comes here */ execve(“/bin/ls”, argv, env); /* will child reach here? */ } else{ waitpid(child_pid, &status, 0); … parent continue execution… }

Carnegie Mellon 22 Process Examples Unix Process Hierarchy: Login shell Child Grandchild [0] Daemon e.g. httpd init [1]

Carnegie Mellon 23 Signals A signal is a small message that notifies a process that an event of some type has occurred in the system  akin to exceptions and interrupts (asynchronous)  sent from the kernel (sometimes at the request of another process) to a process  signal type is identified by small integer ID’s (1-30)  only information in a signal is its ID and the fact that it arrived IDNameDefault ActionCorresponding Event 2SIGINTTerminateInterrupt (e.g., ctl-c from keyboard) 9SIGKILLTerminateKill program (cannot override or ignore) 11SIGSEGVTerminate & DumpSegmentation violation 14SIGALRMTerminateTimer signal 17SIGCHLDIgnoreChild stopped or terminated

Carnegie Mellon 24 Signals Kernel sends (delivers) a signal to a destination process by updating some state in the context of the destination process Kernel sends a signal for one of the following reasons:  Kernel has detected a system event such as Ctrl-C (SIGINT), divide- by-zero (SIGFPE), or the termination of a child process (SIGCHLD)  Another program called the kill() function  The user used a kill utility

Carnegie Mellon 25 Signals A destination process receives a signal when it is forced by the kernel to react in some way to the delivery of the signal Receiving a signal is non-queuing  There is only one bit in the context per signal  Receiving 1 or 300 SIGINTs looks the same to the process Signals are received at a context switch Three possible ways to react:  Ignore the signal (do nothing)  Terminate the process (with optional core dump)  Catch the signal by executing a user-level function called signal handler  Akin to a hardware exception handler being called in response to an asynchronous interrupt

Carnegie Mellon 26 Signals A destination process receives a signal when it is forced by the kernel to react in some way to the delivery of the signal Blocking signals  Sometimes code needs to run through a section that can’t be interrupted  Implemented with sigprocmask() Waiting for signals  Sometimes, we want to pause execution until we get a specific signal  Implemented with sigsuspend() Can’t modify behavior of SIGKILL and SIGSTOP

Carnegie Mellon 27 Signals Signal handlers  Can be installed to run when a signal is received  The form is void handler(int signum){ … }  Separate flow of control in the same process  Resumes normal flow of control upon returning  Can be called anytime when the appropriate signal is fired

Carnegie Mellon 28 Signal Examples Signal delivered Signal received Process AProcess B user code (main) kernel code user code (main) kernel code user code (handler) context switch kernel code user code (main) I curr I next

Carnegie Mellon 29 Signal Examples Every process belongs to exactly one process group Process groups can be used to distribute signals easily A forked process becomes a member of the parent’s process group Fore- ground job Back- ground job #1 Back- ground job #2 Shell Child pid=10 pgid=10 Foreground process group 20 Background process group 32 Background process group 40 pid=20 pgid=20 pid=32 pgid=32 pid=40 pgid=40 pid=21 pgid=20 pid=22 pgid=20 getpgrp() Return process group of current process setpgid() Change process group of a process

Carnegie Mellon 30 // sigchld handler installed pid_t child_pid = fork(); if (child_pid == 0){ /* child comes here */ execve(……); } else{ add_job(child_pid); } Signal Examples Does add_job or remove_job() come first? Where can we block signals in this code to guarantee correct execution? void sigchld_handler(int signum) { int status; pid_t child_pid = waitpid(-1, &status, WNOHANG); if (WIFEXITED(status)) remove_job(child_pid); }

Carnegie Mellon 31 // sigchld handler installed pid_t child_pid = fork(); if (child_pid == 0){ /* child comes here */ execve(……); } else{ add_job(child_pid); } Signal Examples Does add_job or remove_job() come first? Where can we block signals in this code to guarantee correct execution? void sigchld_handler(int signum) { int status; pid_t child_pid = waitpid(-1, &status, WNOHANG); if (WIFEXITED(status)) remove_job(child_pid); } Block SIGCHLD Unblock SIGCHLD

Carnegie Mellon 32 Shell Lab Read the code we’ve given you  There’s a lot of stuff you don’t need to write yourself; we gave you quite a few helper functions  It’s a good example of the code we expect from you! Don’t be afraid to write your own helper functions; this is not a simple assignment

Carnegie Mellon 33 Shell Lab Read man pages. You may find the following functions helpful:  sigemptyset()  sigaddset()  sigprocmask()  sigsuspend()  waitpid()  open()  dup2()  setpgid()  kill() Please do not use sleep() to solve synchronization issues.

Carnegie Mellon 34 Shell lab Hazards  Race conditions  Hard to debug so start early (and think carefully)  Reaping zombies  Race conditions  Handling signals correctly  Waiting for foreground job  Think carefully about what the right way to do this is

Carnegie Mellon 35 Q & A For your listening enjoyment: