1 Exceptional Control Flow Ⅱ. 2 Outline Kernel Mode and User Mode Process context switches Three States of Processes Context Switch System Calls and Error.

Slides:



Advertisements
Similar presentations
Recitation 8: 10/28/02 Outline Processes Signals –Racing Hazard –Reaping Children Annie Luo Office Hours: Thursday 6:00.
Advertisements

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.
University of Washington Today Finish up cache-aware programming example Processes  So we can move on to virtual memory 1.
University of Washington Today Move on to … 1. University of Washington Hmm… Lets look at this again Disk Main Memory L2 unified cache L1 I-cache L1 D-cache.
Processes Topics Process context switches Creating and destroying processes CS 105 “Tour of the Black Holes of Computing!”
Process Control Hua LiSystems ProgrammingCS2690Process Control Page 1 of 41.
1 Processes Professor Jennifer Rexford
CS 311 – Lecture 14 Outline Process management system calls Introduction System calls  fork()  getpid()  getppid()  wait()  exit() Orphan process.
Exceptional Control Flow Part I September 22, 2008 Topics Exceptions Process context switches Creating and destroying processes class11.ppt ,
Exceptional Control Flow Part I Topics Exceptions Process context switches Creating and destroying processes class14.ppt CS 123.
CSSE Operating Systems
Exceptional Control Flow Part I Topics Exceptions Process context switches Creating and destroying processes.
1 Process Description and Control Chapter 3 = Why process? = What is a process? = How to represent processes? = How to control processes?
Processes in Unix, Linux, and Windows CS-502 Fall Processes in Unix, Linux, and Windows CS502 Operating Systems (Slides include materials from Operating.
Process. Process Concept Process – a program in execution Textbook uses the terms job and process almost interchangeably A process includes: – program.
1 Program and OS interactions: Exceptions and Processes Andrew Case Slides adapted from Jinyang Li, Randy Bryant and Dave O’Hallaron.
Fabián E. Bustamante, Spring 2007 Exceptional Control Flow Part I Today Exceptions Process context switches Creating and destroying processes Next time.
Introduction to Processes CS Intoduction to Operating Systems.
Exceptional Control Flow Part I March 4, 2004 Topics Exceptions Process context switches Creating and destroying processes class16.ppt “The course.
Process. Processes A process is an abstraction for sequence of operations that implement a computation/program. A process may be manipulated, suspended,
Computer Architecture and Operating Systems CS 3230: Operating System Section Lecture OS-1 Process Concepts Department of Computer Science and Software.
Lecture 3 Process Concepts. What is a Process? A process is the dynamic execution context of an executing program. Several processes may run concurrently,
Creating and Executing Processes
Processes Topics Process context switches Creating and destroying processes CS 105 “Tour of the Black Holes of Computing!”
Carnegie Mellon 1 Exceptional Control Flow: Exceptions and Processes : Introduction to Computer Systems 13 th Lecture, Oct. 7, 2014 Instructors:
Processes Topics Process context switches Creating and destroying processes CS 105 “Tour of the Black Holes of Computing!”
Process Control Process identifiers Process creation fork and vfork wait and waitpid Race conditions exec functions system function.
System calls for Process management
Program Translation and Execution II: Processes Oct 1, 1998 Topics User-level view of processes Implementation of processes setjmp/longjmp class12.ppt.
Exceptional Control Flow Part I Topics Exceptions Process context switches Creating and destroying processes class16.ppt.
Linux Processes Travis Willey Jeff Mihalik. What is a process? A process is a program in execution A process includes: –program counter –stack –data section.
Copyright ©: Nahrstedt, Angrave, Abdelzaher1 Processes and Threads.
Operating Systems Process Creation
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 I March 12, 2002
1 A Seven-State Process Model. 2 CPU Switch From Process to Process Silberschatz, Galvin, and Gagne  1999.
System calls for Process management Process creation, termination, waiting.
1 Unix system calls fork( ) wait( ) exit( ). 2 How To Create New Processes? n Underlying mechanism -A process runs fork to create a child process -Parent.
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Exceptional Control Flow: Exceptions and Processes.
Overview of today’s lecture Re-view of the previous lecture Process management models and state machines (cont’d from the previous lecture) What is in.
Section 8: Processes What is a process Creating processes Fork-Exec
Exceptional Control Flow & Processes
Instructor: Randy Bryant
Unix Process Management
Exceptional Control Flow Part I
Processes A process is a running program.
Instructors: Anthony Rowe, Seth Goldstein and Gregory Kesden
Example questions… Can a shell kill itself? Can a shell within a shell kill the parent shell? What happens to background processes when you exit from.
CS703 – Advanced Operating Systems
Tarek Abdelzaher Vikram Adve Marco Caccamo
Processes CSE 351 Autumn 2016 Instructor: Justin Hsia
LINUX System Programming with Processes (additional)
Processes in Unix, Linux, and Windows
CS 105 “Tour of the Black Holes of Computing!”
Exceptional Control Flow Part I Mar. 11, 2003
Exceptional Control Flow Ⅱ
Exceptional Control Flow Part I
CS 105 “Tour of the Black Holes of Computing!”
Processes Prof. Ikjun Yeom TA – Mugyo
CS 105 “Tour of the Black Holes of Computing!”
CS 105 “Tour of the Black Holes of Computing!”
CS 105 “Tour of the Black Holes of Computing!”
Exceptional Control Flow & Processes October 2, 2008
Chapter 3 Process Description and Control
Presentation transcript:

1 Exceptional Control Flow Ⅱ

2 Outline Kernel Mode and User Mode Process context switches Three States of Processes Context Switch System Calls and Error Handling Creating and Terminating Processes Suggested reading 8.2, 8.3, 8.4

3 User and Kernel Modes Processes are managed by a shared chunk of OS code called the kernel –Important: the kernel is not a separate process, but rather runs as part of some user process

4 Protection Restricts an application –to execute some instructions (privileged instruction) –to access some portions of the address space In some control registers there typically is a mode bit –Kernel (supervisor) mode if the bit is set –User mode if the bit is clear

5 User and Kernel Modes Process running in kernel mode can –execute any instructions in the instruction set –can access any memory locations in the system Process running in user mode can –neither execute privileged instructions –nor directly reference code or data in the kernel area of the address space –only do above indirectly via system call interface

6 User and Kernel Modes A process running application code –is initially in user mode –changes the user mode to kernel mode When the exception occurs and control passes to the exception handler –changes the kernel mode to user mode When control returns to the application code The only way for the process to change from user mode to kernel mode is via exception

7 Implementing the Process Abstraction Requires close cooperation between both –the low-level hardware and –the operating system software

8 Context switching The kernel maintains a context for each process The context is the state that the kernel needs to restart a preempted process Context contains –Value of PC, register file, status registers, user’s stack, kernel’s stack –Kernel data structures Process table, page table, file table

9 Context switching The mechanism that performs the multitasking Higher level form of exceptional control flow –is built on top of the lower level exception mechanism

10 Context switching The scheduler (a chunk of kernel code) does scheduling as following –Decides whether to preempt the current process during the execution of a process –Selects a previously preempted process (scheduled process) to restart –Preempts the current process Saves the context of the current process –Restarts the scheduled process Restores the saved context of the scheduled process Passes the control to this newly restored process

11 Three states of a process Running –The process is either executing on the CPU –or is waiting to be executed –and will eventually be scheduled. Stopped. –The execution of the process is suspended –and will not be scheduled. Terminated. –The process is stopped permanently.

12 Three states of a process A running process becomes stop –By receiving a signal such as SIGSTOP, SIGTSTP, SIGTTIN, or SIGTTOU A stopped process becomes running –By receiving a SIGCONT signal

13 Three states of a process A process becomes terminated –receiving a signal whose default action is to terminate the process –returning from the main routine –calling the exit function

14 Context switching

15 Context switching When does the context switch happen? –The kernel is executing a system call on behalf of the user such as read, sleep which will cause the calling process blocked Even if a system call does not block, the kernel can decide to perform a context switch rather than return control to the calling process –As a result of an interrupt Timer interrupt

16 Context switching Process A code Process B code user code kernel code user code kernel code user code Time context switch

17 Error Handling Unix system-level functions encounter an error –typically return –1 –set the global integer variable errno to indicate what went wrong

18 Error Handling 1 if ((pid = fork()) < 0) { 2 fprintf(stderr, "fork error: %s\n", 3 strerror(errno)); 3 exit(0); 4 } 1 void unix_error(char *msg) /* unix-style error */ 2 { 3 fprintf(stderr, "%s: %s\n", 4 msg, strerror(errno)); 4 exit(0); 5 }

19 Error Handling 1 if ((pid = fork()) < 0) 2 unix_error("fork error"); 1 pid_t Fork(void) 2 { 3 pid_t pid; 4 5 if ((pid = fork()) < 0) 6 unix_error("Fork error"); 7 return pid; 8 }

20 Obtaining Process ID’s Process ID –PID –Each process has a unique positive PID Getpid() –Returns the PID of the calling process Getppid() –Returns the PID of its parent The process that created the calling process

21 Obtaining Process ID’s The getpid and getppid routines return an integer value of type pid_t pid_t –Defined in types.h as an int on Linux systems #include pid_t getpid(void); pid_t getppid(void); returns: PID of either the caller or the parent

22 Exit Function The exit function terminates the process with an exit status of status. #include void exit(int status); this function does not return

23 Fork Function A parent process –creates a new running child process –by calling the fork function #include pid_t fork(void); Returns: 0 to child, PID of child to parent, -1 on error

24 Fork Function The newly created child process is –almost, but not quite, identical to the parent. The parent and the newly created child have different PIDs.

Understanding fork pid_t pid = fork(); if (pid == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); } Process n pid_t pid = fork(); if (pid == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); } Child Process m pid_t pid = fork(); if (pid == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); } pid = m pid_t pid = fork(); if (pid == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); } pid = 0 pid_t pid = fork(); if (pid == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); } pid_t pid = fork(); if (pid == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); } hello from parenthello from child Which one is first? 25

26 Fork Function The child –gets an identical (but separate) copy of the parent’s user-level virtual address space including the text, data, and bss segments, heap, and user stack. –also gets identical copies of any of the parent’s open file descriptors Which means the child can read and write any files that were open in the parent when it called fork.

27 Fork Function Called once –In the parent process Returns twice: –In the parent process Return the PID of the child –In the newly created child process. Return 0

28 Fork Function The return value provides an unambiguous way –whether the program is executing in the parent or the child.

29 Fork Function Concurrent execution –The parent and the child are separate processes that run concurrently. –The instructions in their logical control flows can be interleaved by the kernel in an arbitrary way. –We can never make assumptions about the interleaving of the instructions in different processes.

30 Fork Function 1 #include "csapp.h" 2 3 int main() 4 { 5 pid_t pid; 6 int x = 1; 7 8 pid = Fork(); 9 if (pid == 0) { /* child */ 10 printf("child : x=%d\n", ++x); 11 exit(0); 12 } /* parent */ 15 printf("parent: x=%d\n", --x); 16 exit(0); 17 }

31 Fork Function Duplicate but separate address spaces –Immediately after the fork function returned in each process, the address space of each process is identical. Local variable x has a value of 1 in both the parent and the child when the fork function returns in line 8.

32 Fork Function Duplicate but separate address spaces. –The parent and the child are separate processes they each have their own private address spaces. Any subsequent changes that a parent or child makes to x –are private –and are not reflected in the memory of the other process.

33 Fork Function Duplicate but separate address spaces –The variable x has different values in the parent and child when they call their respective printf statements. Shared files

Fork Example #2 void fork2() { printf("L0\n"); fork(); printf("L1\n"); fork(); printf("Bye\n"); } Both parent and child can continue forking L0 L1 Bye 34

Fork Example #3 Both parent and child can continue forking void fork3() { printf("L0\n"); fork(); printf("L1\n"); fork(); printf("L2\n"); fork(); printf("Bye\n"); } L1L2 Bye L1L2 Bye L0 35

Fork Example #4 Both parent and child can continue forking void fork4() { printf("L0\n"); if (fork() != 0) { printf("L1\n"); if (fork() != 0) { printf("L2\n"); fork(); } printf("Bye\n"); } L0 L1 Bye L2 Bye 36

Fork Example #5 Both parent and child can continue forking void fork5() { printf("L0\n"); if (fork() == 0) { printf("L1\n"); if (fork() == 0) { printf("L2\n"); fork(); } printf("Bye\n"); } L0 Bye L1 Bye L2 37

38 Outline Reaping Child Processes Putting Processes to Sleep Suggested reading 8.4

39 Zombie The kernel does not remove a terminated process from the system immediately after the process terminates The process is kept around in a terminated state until it is reaped by its parent.

40 Zombie When the parent reaps the terminated child –the kernel passes the child’s exit status to the parent, –and then discards the terminated process, at which point it ceases to exist. A terminated process that has not yet been reaped is called a zombie.

linux>./forks 7 & [1] 6639 Running Parent, PID = 6639 Terminating Child, PID = 6640 linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6639 ttyp9 00:00:03 forks 6640 ttyp9 00:00:00 forks 6641 ttyp9 00:00:00 ps linux> kill 6639 [1] Terminated linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6642 ttyp9 00:00:00 ps Zombie Example ps shows child process as “defunct” Killing parent allows child to be reaped by init void fork7() { if (fork() == 0) { /* Child */ printf("Terminating Child, PID = %d\n", getpid()); exit(0); } else { printf("Running Parent, PID = %d\n", getpid()); while (1) ; /* Infinite loop */ } 41

linux>./forks 8 Terminating Parent, PID = 6675 Running Child, PID = 6676 linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6676 ttyp9 00:00:06 forks 6677 ttyp9 00:00:00 ps linux> kill 6676 linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6678 ttyp9 00:00:00 ps Nonterminating Child Example Child process still active even though parent has terminated Must kill explicitly, or else will keep running indefinitely void fork8() { if (fork() == 0) { /* Child */ printf("Running Child, PID = %d\n", getpid()); while (1) ; /* Infinite loop */ } else { printf("Terminating Parent, PID = %d\n", getpid()); exit(0); } 42

43 Zombie If the parent process –terminates without reaping its zombie children, –the kernel arranges for the init process to reap them. The init process –has a PID of 1 –and is created by the kernel during system initialization.

44 Zombie Long-running programs such as shells or servers should always reap their zombie children. Even though zombies are not running, they still consume system memory resources.

45 Wait_pid Function #include pid_t waitpid(pid_t pid, int *status, int options); returns: PID of child if OK, 0 (if WNOHANG) or -1 on error

46 Wait_pid Function pid > 0 –The wait set is the singleton child process whose process ID is equal to pid pid = -1 –The wait set consists of all of the parent’s child processes

47 Wait_pid Function The calling process has no children –waitpid returns –1 –sets errno to ECHILD. If the waitpid function was interrupted by a signal –returns –1 –sets errno to EINTR.

48 Wait_pid Function options = 0 –waitpid suspends execution of the calling process until a child process in its wait set terminates –If a process in the wait set has already terminated at the time of the call, then waitpid returns immediately –waitpid returns the PID of the terminated child that caused waitpid to return –the terminated child is removed from the system

49 Wait_pid Function options –WNOHANG: Return immediately (with a return value of 0 ) if none of the child processes in the waiting set has terminated yet –WUNTRACED: Suspended execution of the calling process until a process terminated or stopped child that caused the return

50 Wait_pid Function options –WUNTRACED | WNOHANG : Suspended execution of the calling process until a process terminated or stopped child that caused the return. Also, return immediately (with a return value of 0 ) if none of the child processes in the wait set is terminated or stopped

51 Wait_pid Function Checking the exit status of a reaped child –The status argument is non-NULL –waitpid encodes status information about the child that caused the return in the status argument. –The wait.h include file defines several macros for interpreting the status argument

52 Wait_pid Function WIFEXITED(status): –Returns true if the child terminated normally via a call to exit or a return. WEXITSTATUS(status): –Returns the exit status of a normally terminated child. –This status is only defined if WIFEXITED returned true.

53 Wait_pid Function WIFSIGNALED(status): –Returns true if the child process terminated because of a signal that was not caught WTERMSIG(status): –Returns the number of the signal that caused the child process to terminate. –This status is only defined if WIFSIGNALED (status) returned true.

54 Wait_pid Function WIFSTOPPED(status): –Returns true if the child that caused the return is currently stopped. WSTOPSIG (status): –Returns the number of the signal that caused the child to stop. –This status is only defined if WIFSTOPPED (status) returned true.

55 Wait_pid Function 1 #include "csapp.h" 2 #define N int main() 5 { 6 int status, i; 7 pid_t pid; 8 9 for (i = 0; i < N; i++) 10 if ((pid = Fork()) == 0) /* child */ 11 exit(100+i); 12

56 Wait_pid Function 13 /* parent waits for all of its children to terminate */ 14 while ((pid = waitpid(-1, &status, 0)) > 0) { 15 if (WIFEXITED(status)) 16 printf("child %d terminated normally with exit 17 status=%d\n", pid, WEXITSTATUS(status)); 18 else 19 printf("child %d terminated abnormally\n", pid); 20 } 21 if (errno != ECHILD) 22 unix_error("waitpid error"); exit(0); 25 }

57 Wait_pid Function unix>./waitpid1 child terminated normally with exit status=100 child terminated normally with exit status=101

58 Wait_pid Function 1 #include "csapp.h" 2 #define N int main() 5 { 6 int status, i; 7 pid_t pid[N+1], retpid; 8 9 for (i = 0; i < N; i++) 10 if ((pid[i] = Fork()) == 0) /* child */ 11 exit(100+i); /* parent reaps N children in order */ 14 i = 0;

59 Wait_pid Function 15 while ((retpid = waitpid(pid[i++], &status, 0)) > 0) { 16 if (WIFEXITED(status)) 17 printf("child %d terminated normally with exit 18 status=%d\n", retpid, WEXITSTATUS(status)); 19 else 20 printf("child %d terminated abnormally\n", retpid); 21 } /* The only normal termination is if there are no more children */ 24 if (errno != ECHILD) 25 unix_error("waitpid error"); exit(0); 28 }

60 Putting Process to Sleep Suspends a process for some period of time. Returns zero if the requested amount of time has elapsed Returns the number of seconds still left to sleep otherwise. #include unsigned int sleep(unsigned int secs); returns: seconds left to sleep int pause(void); always returns -1