1 / 13

Brief Introduction to System Calls and Process Management

Brief Introduction to System Calls and Process Management. COMP229 - System Software Edition 1.1 , March 11, 2002. Slides and examples could be found at: http://alcor.concordia.ca/~sa_mokho/comp229/. Overview. System Call Interface Process Management fork() exec() wait() exit().

fahim
Download Presentation

Brief Introduction to System Calls and Process Management

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Brief Introduction to System Calls and Process Management COMP229 - System Software Edition 1.1, March 11, 2002 Slides and examples could be found at: http://alcor.concordia.ca/~sa_mokho/comp229/ Serguei A. Mokhov, mokhov@cs.concordia.ca

  2. Overview • System Call Interface • Process Management • fork() • exec() • wait() • exit() Serguei A. Mokhov, mokhov@cs.concordia.ca

  3. User-running App Software syscall - trap exit() Kernel-running Zombie API Sys Software read(), write(), wait(), sleep() Sys Call (OS) Interface Blocked Ready OS Sw-Hw I-face (drivers) Hardware System Call Interface “You are here” Serguei A. Mokhov, mokhov@cs.concordia.ca

  4. The fork() System Call (1) • A process calling fork() spawns a child process • The child is almost an identical clone of the parent: • Text • Stack • PCB • Data Serguei A. Mokhov, mokhov@cs.concordia.ca

  5. PID=28 PID=28 PID=34 p1 p1 c1 The fork() System Call (2) • fork() is one of the those system calls, which is called once, but returns twice! • After fork() both the parent and the child are executing the same program. • On error, fork() returns -1 Consider a piece of program (see fork_pid.c example): ... pid_t pid = fork(); printf(“PID: %d\n”, pid); ... The parent will print: PID: 34 And the child will always print: PID: 0 fork() Serguei A. Mokhov, mokhov@cs.concordia.ca

  6. The fork() System Call (3) • Remember, after fork() the execution order is not guaranteed. • Simple fork() examples: • fork_pid.c prints out return from fork() • fork_child.c distinguishes between the parent and the child Serguei A. Mokhov, mokhov@cs.concordia.ca

  7. The exec()System Call (1) • The exec() call replaces a current process’ image with a new one (i.e. loads a new program within current process). • The new image is either regular executable binary file or a shell script. • There’s no a syscall under the name exec(). By exec() we usually refer to a family of calls: • int execl(char *path, char *arg, ...); • int execv(char *path, char *argv[]); • int execle(char *path, char *arg, ..., char *envp[]); • int execve(char *path, char *argv[], char *envp[]); • int execlp(char *file, char *arg, ...); • int execvp(char *file, char *argv[]); • Here's what c, l, e, and p mean: • l means an argument list, • v means an argument vector, • e means an environment vector, and • p means a search path. Serguei A. Mokhov, mokhov@cs.concordia.ca

  8. PID=28 PID=28 p1 Legend: Old Program p1 New Program The exec()System Call (2) • Upon success, exec()never returns to the caller. If it does return, it means the call failed. Typical reasons are: non-existent file or bad permissions. • Arguments passed via exec() appear in the argv[] of the main() function. • For more info: man -S 3 exec; Example is: exec_pid.c exec() Serguei A. Mokhov, mokhov@cs.concordia.ca

  9. Environment • The e exec calls use the environment when attempt to invoke a new program. • Name = Value • HOME • PATH • SHELL • USER • LOGNAME • ... • set or env - will display current environment, which you can modify with: • the export command in a shell or a shell script; • getenv(), setenv(), putenv(), etc in C Serguei A. Mokhov, mokhov@cs.concordia.ca

  10. PID=28 PID=28 PID=34 PID=34 p1 p1 c1 c1 fork() and exec() Combined • Often after doing fork() we want to load a new program into the child. E.g.: a shell. tcsh tcsh tcsh fork() tcsh ls PID=34 exec(ls) c1 Serguei A. Mokhov, mokhov@cs.concordia.ca

  11. The System wait() Call • Forces the parent to suspend execution, i.e. wait for its children or a specific child to die (terminate is more appropriate terminology, but a bit less common). • Example: fork_exec.c Serguei A. Mokhov, mokhov@cs.concordia.ca

  12. The exit() System Call • This call gracefully terminates process execution. Gracefully means it does clean up and release of resources, and puts the process into the zombie state. • By calling wait(), the parent cleans up all its zombie children. • exit() specifies a return value from it’s program, which a parent process might want to examine as well as status of the dead process. • _exit() call is another possibility of quick death without cleanup. Serguei A. Mokhov, mokhov@cs.concordia.ca

  13. User-running syscall() - trap exit() Kernel-running Zombie wait() Blocked Ready Process Overview INIT PID=1 ? Serguei A. Mokhov, mokhov@cs.concordia.ca

More Related