Processes, Signals, I/O, Shell Lab : Introduc>on to Computer Systems Recita>on 9: Monday, Oct. 21, 2013 Marjorie Carlson Sec>on A

Similar documents
Processes, Signals, I/O, Shell Lab and Midterm Review

Signals. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Multitasking. Programmer s model of multitasking. fork() spawns new process. exit() terminates own process

Programming Assignments will be.. All the PAs are continuous 3 major factors that you should consider

CS213. Exceptional Control Flow Part II. Topics Process Hierarchy Signals

Processes & Signals. System Runs Many Processes Concurrently. State consists of memory image + register values + program counter

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2018 Lecture 20

Recitation 8 Processes, Signals, Tshlab

CS 4410, Fall 2017 Project 1: My First Shell Assigned: August 27, 2017 Due: Monday, September 11:59PM

CSCI0330 Intro Computer Systems Doeppner. Project Shell 2. Due: November 8, 2017 at 11:59pm. 1 Introduction 2

CSC374, Spring 2010 Lab Assignment 1: Writing Your Own Unix Shell

CSCI Computer Systems Fundamentals Shell Lab: Writing Your Own Unix Shell

Recitation Processes, Signals,UNIX error handling

PROCESS CONTROL BLOCK TWO-STATE MODEL (CONT D)

Computer Science 330 Operating Systems Siena College Spring Lab 5: Unix Systems Programming Due: 4:00 PM, Wednesday, February 29, 2012

Exceptions, Processes and Signals

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 19

Lecture 24: Multitasking and Signals

CS 213, Fall 2002 Lab Assignment L5: Writing Your Own Unix Shell Assigned: Oct. 24, Due: Thu., Oct. 31, 11:59PM

IC221: Systems Programming 12-Week Written Exam [SOLUTIONS]

Operating System Structure

Getting to know you. Anatomy of a Process. Processes. Of Programs and Processes

Process Control. Philipp Koehn. 23 April 2018

University of Washington What is a process?

Shell and Signals. Computer Organization 3/17/2015. CSC252 - Spring The World of Multiprogramming or Multitasking. Unix Process Hierarchy

CSci 4061 Introduction to Operating Systems. (Advanced Control Signals)

Exceptional Control Flow Exists at All Levels of a System. Systemprogrammering 2007 Föreläsning 3 Exceptional Control Flow Part II

Chapter 5. TCP Client-Server

ECF Exists at All Levels of a System

CSC209H Lecture 8. Dan Zingaro. March 4, 2015

CS 110 Summer 2018 Midterm Review Session

CS 224 Spring 2015 Lab Assignment Shell Lab: Writing Your Own Unix Shell

ECF Exists at All Levels of a System Exceptional Control Flow Part II Oct. 22, 2002 Topics! Process Hierarchy! Shells! Signals!

Process management. What s in a process? What is a process? The OS s process namespace. A process s address space (idealized)

Exceptional Control Flow Part II

Lesson 3. The func procedure allows a user to choose the action upon receipt of a signal.

CSE 451: Operating Systems Winter Module 4 Processes. Mark Zbikowski Allen Center 476

CS 213, Fall 2001 Lab Assignment L5: Writing Your Own Unix Shell Assigned: Oct. 25, Due: Fri., Nov. 2, 11:59PM

Killing Zombies, Working, Sleeping, and Spawning Children

Kernel and processes

Princeton University. Computer Science 217: Introduction to Programming Systems. Process Management

Exceptional Control Flow: Signals

Giving credit where credit is due

Signals. Goals of this Lecture. Help you learn about: Sending signals Handling signals

Each terminal window has a process group associated with it this defines the current foreground process group. Keyboard-generated signals are sent to

Princeton University Computer Science 217: Introduction to Programming Systems. Process Management

Processes. Processes (cont d)

Processes. CS439: Principles of Computer Systems January 30, 2019

Processes. Dr. Yingwu Zhu

Princeton University Computer Science 217: Introduction to Programming Systems. Process Management

Processes. CS439: Principles of Computer Systems January 24, 2018

UNIX. Session 2. UNIX processes and forking fork system call exec system call death of process kill fork and I/O using it UNIX.

Concurrent Processes. CS 475, Spring 2018 Concurrent & Distributed Systems

CSE 410: Computer Systems Spring Processes. John Zahorjan Allen Center 534

HW 1: Shell. Contents CS 162. Due: September 18, Getting started 2. 2 Add support for cd and pwd 2. 3 Program execution 2. 4 Path resolution 3

CS 31: Intro to Systems Processes. Kevin Webb Swarthmore College March 31, 2016

W4118 Operating Systems. Junfeng Yang

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

Process Management 1

CSC209 Review. Yeah! We made it!

Process Management! Goals of this Lecture!

Processes & Threads. (Chapter 3) CS 4410 Operating Systems. [R. Agarwal, L. Alvisi, A. Bracy, M. George, E. Sirer, R. Van Renesse]

System Programming. Signals I

Excep&onal Control Flow: Signals and Nonlocal Jumps

Networks and Opera/ng Systems Chapter 14: Synchroniza/on

What is an Operating System? Signals, Processes, & Threads. Resource Sharing. Resource Abstraction ... Operating Systems 10/20/2010

Signals. CSC209: Software Tools and Systems Programming. Furkan Alaca & Paul Vrbik

Assignment 1. Teaching Assistant: Michalis Pachilakis (

CS 33. Signals Part 1. CS33 Intro to Computer Systems XXII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

CS240: Programming in C

Linux Signals and Daemons

fork System-Level Function

CSC209: Software tools. Unix files and directories permissions utilities/commands Shell programming quoting wild cards files

CSC209: Software tools. Unix files and directories permissions utilities/commands Shell programming quoting wild cards files. Compiler vs.

Preview. The pause() System Call. The pause() System Call. The signal() System Call 10/18/2017

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

Parents and Children

CS 355 Operating Systems. Keeping Track of Processes. When are processes created? Process States 1/26/18. Processes, Unix Processes and System Calls

Process. Signal #8. Signals are software interrupts from unexpected events. a power failure. an alarm clock. the death of a child process

Operating Systemss and Multicore Programming (1DT089)

CSci 4061 Introduction to Operating Systems. Processes in C/Unix

Last Class. System Calls, Kernel Mode, and Process Implementation. Processes. Today. Operating Systems 9/11/2018 CSC 256/456 1

Signals! Goals of this Lecture! Help you learn about:" Sending signals" Handling signals"

Process Management 1

Process Management forks, bombs, zombies, and daemons! Lecture 5, Hands-On Unix System Administration DeCal

Unix System Programming - Chapter 8

CSC 252: Computer Organization Spring 2018: Lecture 19

Lesson 2. process id = 1000 text data i = 5 pid = 1200

Systems Programming/ C and UNIX

Process Management. Outline

Processes COMPSCI 386

Lab 4. Out: Friday, February 25th, 2005

Exceptional Control Flow: Signals and Nonlocal Jumps

System Calls and Signals: Communication with the OS. System Call. strace./hello. Kernel. Context Switch

Overview. Administrative. * HW 1 grades. * HW 2 Due. Topics. * 5.1 What is a Signal? * Dealing with Signals - masks, handlers

Design Overview of the FreeBSD Kernel CIS 657

CSCE Operating Systems Interrupts, Exceptions, and Signals. Qiang Zeng, Ph.D. Fall 2018

Design Overview of the FreeBSD Kernel. Organization of the Kernel. What Code is Machine Independent?

Preview. Process Termination. wait and waitpid() System Call. wait and waitpid() System Call. waitpid() System Call 10/23/2018

OS Structure, Processes & Process Management. Don Porter Portions courtesy Emmett Witchel

Transcription:

Processes, Signals, I/O, Shell Lab 15-213: Introduc>on to Computer Systems Recita>on 9: Monday, Oct. 21, 2013 Marjorie Carlson Sec>on A 1

Agenda News Shell Lab Overview Processes Overview Important func2ons Concurrency Signals Overview Important func2ons Race condi2ons I/O Intro 2

News Midterm grades were good! Go you! The exams will be viewable soon if they re. not already. E- mail us with concerns. Cachelab grades are out. I ve annotated your code while grading for style. Autolab Cache Lab View handin history Click on your most recent submission, then View Source View as Syntax Highlighted Source Style maders! hdp://www.cs.cmu.edu/~213/codestyle.html Shell lab out, due Tuesday Oct. 29 11:59 p.m. 3

Agenda News Shell Lab Overview Processes Overview Important func2ons Concurrency Signals Overview Important func2ons Race condi2ons I/O Intro 4

Processes An instance of an execu>ng program An abstrac>on provided by the opera>ng system Proper>es: Private memory. No two processes share memory, registers, etc. Some shared state, such as the open file table A process ID (pid) and a process group ID (pgid) Become zombies when finished running 5

Birth of a Process: fork pid_t fork() Clones the current process. The new process is an exact duplicate of the parent s state. It has its own stack, own registers, etc. It has its own file descriptors (but the files themselves are shared). Called once, returns twice (once in the parent, once in the child). Return value in child is 0, child s pid in parent. (This is how the parent can keep track of who its child is.) Returns - 1 in case of failure. AWer the fork, we do not know which process will run first, the parent or the child. 6

Birth of a Process: a digression int setpgid(pid_t pid, pit_t pgid) Sets the process group ID of the process specified by pid. (Returns 0 on success, - 1 on failure.) If pid = 0, setpgid is applied to the calling process. If pgid= 0, setpgid sets the pgid of the specified process to the pid of the calling process. By default, children inherit the pgid of their parents. (When won t you want children to inherit the parent s pgid? Hmm ) 7

Birth of a Process: a digression pid=5 pgid=8 pid=20 pgid=8 pid=213 pgid=8 Process 5 can reap processes 20 and 213, but not 500. Only process 213 can reap process 500. pid=500 pgid=8 8

Life of a Process: exec int execve(const char *filename, char** argv, char** envp) Replaces the current process with a new one. This is how we run a new program. Called once; does not return (or returns - 1 on failure). argc, argv are like the command- line arguments to main for the new process envp is the environment variable Contains informa2on that affects how various processes work On Shark machines, can get its value by declaring extern char** environ; 9

Death of a Process: exit void exit(int status) Immediately terminates the process that called it. status is normally the return value of main(). The OS frees the resources it used (heap, file descriptors, etc.) but not its exit status. It remains in the process table to await its reaping. Zombies are reaped when their parents read their exit status. (If the parent is dead, this is done by init.) Then its pid can be reused. 10

Reaping of a Process: wait pid_t waitpid(pid_t pid, int* status, int options) The wait family of func2ons allows a parent to know when a child has changed state (e.g., terminated). waitpid returns when the process specified by pid terminates. pid must be a direct child of the invoking process. If pid = - 1, it will wait for any child of the current process. Return value: the pid of the child it reaped. Writes to status: informa2on about the child s status. options variable: used to modify waitpid s behavior. WNOHANG: keep execu2ng caller un2l a child terminates. WUNTRACED: report stopped children too. WCONTINUED: report con>nued children too. 11

Yay Concurrency! pid_t child_pid = fork(); int status; pid_t child_pid = fork(); if (child_pid == 0) { printf("child!\n"); exit(0); } if (child_pid == 0) { printf("child!\n"); exit(0); } else { } printf("parent!\n"); else { waitpid(child_pid, &status, 0); printf("parent!\n"); } Outcomes: Child! Parent! Parent! Child! Outcome: Child! Parent! 12

Race Condi>ons Race condi>ons occur when the sequence or >ming of events is random or unknown. When you fork, you don t know whether the parent or child will run first. Signal handlers will interrupt currently running code. (We ll get to this in a sec.) If something can go wrong, it will! You must reason carefully about the possible sequence of events in concurrent programs. (A big theme of the second half of this course!) 13

Agenda News Shell Lab Overview Processes Overview Important func2ons Concurrency Signals Overview Important func2ons Race condi2ons I/O Intro 14

Signals Signals are the basic way processes communicate with each other. They no>fy a process that an event has occurred (for example, that its child has terminated). They are sent several ways: Ctrl- C, Ctrl- Z, a kill instruc>on. Signals are asynchronous. They aren t necessary received immediately; they re received right a`er a context switch. They are non- queuing. If 100 child processes die and send a SIGCHLD, the parent may s>ll only receive one SIGCHLD. 15

Signals Many signals have default behaviors SIGINT, SIGTERM will terminate the process. SIGSTP will suspend the process un2l it receives SIGCONT. SIGCHLD is sent from a child to its parent when the child dies or is suspended. But we can avoid the default behavior by catching the signal and running our own signal handler. SIGKILL and SIGSTOP can t be modified. We can block signals with sigprocmask(). We can wait for signals with sigsuspend(). 16

Sending a Signal int kill(pid_t pid, int sig) Despite the name, this is used to send all signals between processes not just SIGKILL. If pid is posi2ve, this sends signal sig to the process with pid = id. If pid is nega2ve, this sends signal sig to all processes with with pgid = - id. 17

Kill: Process kill(213, SIGINT); pid=5 pgid=8 pid=20 pgid=8 pid=213 pgid=8 kill() with a posi2ve ID will send the signal only to the process with that pid. pid=500 pgid=8 18

Kill: Process Group kill(- 8, SIGINT); pid=5 pgid=8 pid=20 pgid=8 pid=213 pgid=8 kill() with a nega2ve ID will send the signal to all the process with that pgid. pid=500 pgid=8 19

Handling a Signal signal(int signum, sighandler_t handler) signal installs a signal handler that will run whenever a par2cular signal (the signum) is received. The handler is just a func2on you write that takes one int (the signum) and is void (returns nothing). Now, whenever you receive that signal, the handler will interrupt the process and execute even if it or another signal handler is currently running. Control flow of the main program is restored once the handler has finished. This creates a separate flow of control in the same process, because you don t know when the handler will get called! 20

Handling a Signal void handler1(int sig) { pid_t pid; } while ((pid = waitpid(- 1,NULL,WNOHANG)) > 0) deletejob(pid); if (errno!= ECHILD) unix_error("waitpid error"); Do not use this code! It has a concurrency bug! int main() { int pid; Signal(SIGCHLD, handler); // initialize the handler initjobs(); // initialize a jobs list } while(1) { /* child process */ if (pid = Fork()) == 0) { Execve("/bin/date",argv,NULL); } /* parent process */ addjob(pid); } exit(0); 21

Blocking Signals Processes can choose to block signals using a signal mask. While a signal is blocked, a process will s>ll receive the signal but keep it pending. No ac>on will be taken un>l the signal is unblocked. S>ll nonqueuing: the process will only track that it has received a blocked signal, but not the number of >mes it was received. This allows you to ensure that a par>cular part of your code is never interrupted by a par>cular signal. 22

Blocking Signals: Relevance to You When you fork a new process in shell lab: CHILD: exec; run, then terminate (thus sending a SIGCHLD to parent). PARENT: Add the process to the job queue. When you receive SIGCHLD, go to the SIGCHLD handler, which removes the child from the job queue. Common race condi>on: The child could terminate before the parent has added it to the job queue. Then the SIGCHLD handler tries to remove something from the job queue that isn t there, and worse, it s then added to the job queue and never removed. Solu2on: block SIGCHLDs during the cri2cal sec2on. 23

Back to This Code void handler1(int sig) { pid_t pid; } while ((pid = waitpid(- 1,NULL,WNOHANG)) > 0) deletejob(pid); if (errno!= ECHILD) unix_error("waitpid error"); Do not use this code! It has a concurrency bug! int main() { int pid; Signal(SIGCHLD, handler); // initialize the handler initjobs(); // initialize a jobs list } while(1) { /* child process */ if (pid = Fork()) == 0) { Execve("/bin/date",argv,NULL); } /* parent process */ addjob(pid); } exit(0); 24

Blocking Signals: Important Func>ons sigsetops A family of func2ons used to create and modify sets of signals. E.g., int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set) int sigaddset(sigset_t *set, int signum); int sigdelset(sigset_t *set, int signum); These sets can then be used in other func2ons. hdp://linux.die.net/man/3/sigsetops Remember to pass in the address of the sets, not the sets themselves 25

Blocking Signals: Important Func>ons int sigprocmask(int option, const sigset_t set, sighandler_t *oldset) sigprocmask updates your mask of blocked/unblocked signals, using the sigset set. op2on: SIG_SETMASK, SIG_BLOCK, SIG_UNBLOCK The signal mask s old value is wriden into oldset. Blocked signals are ignored un2l unblocked. Remember: a process only tracks whether it has received a blocked signal, not how many 2mes. If you block SIGCHLD and then 20 children terminate, when you unblock you will only receive one SIGCHLD and run the appropriate handler once. 26

Blocking Signals: Important Func>ons int sigsuspend(const sigset_t *mask) sigsuspend suspends your process un2l it receives a par2cular signal. It s good way to wait for something to happen. This is the right way to ensure your processes do their thing in the right order. It temporarily replaces the process s signal mask with mask, which should be the signals you don t want to be interrupted by. (This is the opposite of sigprocmask.) So if your goal is to be woken up by a SIGCHLD, your mask should not contain SIGCHLD. sigsuspend will return awer an unblocked signal is received and its handler run. Once sigsuspend returns, it automa2cally reverts the process signal mask to its old value. 27

Race Condi>ons int counter = 1; void handler(int signum) { counter- - ; } int main() { signal(sigalrm, handler); kill(0, SIGALRM); counter++; printf("%d\n",counter); } Possible outputs? What if we wanted to guarantee that the handler executed a`er the print statement? 28

Race Condi>ons int counter = 1; void handler(int signum) { counter- - ; } int main() { signal(sigalrm, handler); sigset_t alarmset, oldset; sigemptyset(&alarmset); sigaddset(&alarmset, SIGALRM); //Block SIGALRM from triggering the handler sigprocmask(sig_block,&alarmset,&oldset); kill(0,sigalrm); counter++; printf("%d\n",counter); } //Let the pending or incoming SIGALRM trigger the handler sigprocmask(sig_unblock,&alarmset,null); 29

Agenda News Shell Lab Overview Processes Overview Important func2ons Concurrency Signals Overview Important func2ons Race condi2ons I/O Intro 30

Unix I/O All Unix I/O, from network sockets to text files, are based on one interface. A file descriptor is what s returned by open(). int fd = open("/path/to/file, O_RDONLY); It s just an int, but you can think of it as a pointer into the file descriptor table. Every process starts with three file descriptors by default: 0: STDIN 1: STDOUT 2: STDERR. Every process gets its own file descriptor table, but all processes share the open file table and v- node table. 31

Unix I/O: A Handy Func>on dup2(dest_fd, src_fd) src_fd will now point to the same place as dest_fd. You can use this to redirect output from STDOUT to a loca2on of your own choosing. This is handy for implemen2ng redirec2on in your shell. Use open() to open the file you want to redirect to. Call dup2(what- you- just- opened, 1) to cause fd to refer to your file instead of STDOUT. 32

Shell Lab Tips There's a lot of starter code in the book; look it over. Read the handout well, especially the Hints sec>on. Use tshref to figure out the required behavior. For instance, the format of the output when a job is stopped. Be careful of the add/remove job race condi>on! Use sigsuspend, not waitpid, to wait for foreground jobs waitpid should only occur once in your code. You will lose points for using 2ght loops (while(1) {}) or sleep to wait for a signal. 33

Shell Lab Tips Shell requires SIGINT and SIGSTP to be forwarded to the foreground job of the shell (and all its descendants). How could process groups be useful? Remember the SIGCHILD handler may have to reap mul>ple children per call! We provide drivers:./runtrace./sdriver BUT start by actually using your shell and seeing if/where it fails. The last page of the handout is a guide to what func2onality we test. 34