Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unix Processes Slides are based upon IBM technical library, Speaking Unix, Part 8: Unix processes Extended System Programming Laboratory (ESPL) CS Department.

Similar presentations


Presentation on theme: "Unix Processes Slides are based upon IBM technical library, Speaking Unix, Part 8: Unix processes Extended System Programming Laboratory (ESPL) CS Department."— Presentation transcript:

1 Unix Processes Slides are based upon IBM technical library, Speaking Unix, Part 8: Unix processes Extended System Programming Laboratory (ESPL) CS Department @ BGU Fall 2014/2015

2 2 When ?TopicLecture October 26, 2014 Introduction to C Programming in Unix Environment - I 1 November 2, 2014 Introduction to C Programming in Unix Environment - II 2 November 9, 2014Introduction to Assembly3 November 16, 2014Functions and System Calls (Assembly)4 Midterm A (December 9, 2014 - 18:00) December 7, 2014Unix Processes5 December 14, 2014Programs Execution6 December 28, 2014Introduction to script languages (Python) + ELF 7 January 4, 2014Web programming8 Midterm B (January 19, 2015)

3  On UNIX, each computing task is represented by a process.  UNIX runs many tasks seemingly at the same time  One can run multiple commands and carry out multiple tasks at a time  Each process receives a little slice of CPU time by the scheduler 3

4  A process is something of a container, bundling:  a running application  its environment variables  the state of the application's input and output  the state of the process (priority, etc’) 4

5  Most processes come and go rapidly, as tasks start and complete  So, where does the first process come from?  On UNIX, some processes run from system boot to shutdown  The kernel spawns the first process during the boot sequence  The first process is init and its PID is 1. 5

6  UNIX system has a finite, yet large pool of processes  In practice, a system almost never runs out of processes  Each new task -- say, launching vi -- immediately allocates a process from the pool with a unique PID 6 $ sleep 10 & ps -o pid,command,state,stime PID COMMAND S STIME 16351 -bash S 11:23 16845 sleep 10 S 11:42 16846 ps -o pid,u R 11:44

7  Each new UNIX process is the spawn of an existing process  In UNIX, the fork() system call is used to spawn a new process  A “child” process is a clone of the “parent” process (PID is different), until the “child” continues execution independently  Had you ever “fork” a process ? 7

8  The ls command in the shell prompt is actually a “child” process  Who is the parent process ?  If a user types the ls command at a shell prompt a new process will be forked  The Linux kernel will duplicate the shell's pages of memory and then execute the ls command 8

9  The fork() system call returns twice; in both the parent and the child processes  In the “parent” process it returns the PID of the “child” process  While in the “child” process it returns 0 9 #include #include #include #include int main(int argc, char *argv[]) { pid_t cpid; int status; cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Code executed by child */ printf("PID is %ld\n", (long) getpid()); exit(argc==2?atoi(argv[1]):0); } else { /* Code executed by parent */ printf("Child PID is %ld\n", (long)cpid); wait(&status); /* waits on the exit status from the child*/ printf("%ld exited with status %ld\n",(long)cpid,(long)status); exit(0); } }

10 10

11 Process Z has the same environment variables as A, the same memory contents, the same program state, and the same files open 11

12  “Parent” and “child” processes run simultaneously  They use the same resources until one of them decides to change the data  Then, a unique copy of the considered data is duplicated for its use (copy-on-write) 12

13  After the fork, Process A might continue running the same application  However, Process Z might immediately choose to run another application  The later operation is called execution and it is invoked by the exec() system call  It loads a new program, and overrides the parent’s one 13

14 14 int runcmd(char *cmd) { char* argv[MAX_ARGS]; pid_t child_pid; int child_status; parsecmd(cmd,argv); child_pid = fork(); if(child_pid == 0) { /* This is done by the child process. */ execvp(argv[0], argv); /* If execvp returns, it must have failed. */ printf("Unknown command\n"); exit(0); } else { /* This is run by the parent. Wait for the child to terminate. */ pid_t tpid = wait(&child_status); return child_status; } int execvp(const char *file, char *const argv[]);

15  Mechanism for processes to communicate and to synchronize their actions  If P and Q wish to communicate, they need to:  establish a communication link between them  exchange messages via send/receive  Implementation of communication link  physical (e.g., shared memory, hardware bus)  logical (e.g., logical properties: FIFO)  The logical communication link could be:  Direct - Signals  Indirect - Pipes 15

16  The source process can "raise" a signal and have it delivered to destination process.  The destination process' signal handler is invoked and the process can handle it  A direct communication in which unidirectional channels are established automatically  Processes must name each other explicitly using the process ID in order to send messages of fixed size  Asynchronous What types of signals you are familiar with? 16

17  A direct communication in which unidirectional channels are established between “related” processes  Basically, a call to the int pipe(int fd[2]) system call attaches a pair of file descriptors to the pipe  One of these descriptors is connected to the write end of the pipe, and the other is connected to the read end  On many systems, pipes will fill up after you write about 10KB to them without reading anything out 17 PIPE write() read() fd [1] fd [0]

18 18

19 19 int main(void) { int fd[2], nbytes; pid_t childpid; char string[] = "Hello, world!\n"; char readbuffer[80]; pipe(fd); if((childpid = fork()) == -1) { perror("fork"); exit(1); } if(childpid == 0) { /* Child process closes up input side of pipe */ close(fd[0]); write(fd[1], string, (strlen(string)+1)); close(fd[1]); /*close file descriptor before exiting*/ exit(0); } else { /* Parent process closes up output side of pipe */ close(fd[1]); /* what is special about this? */ nbytes = read(fd[0], readbuffer, sizeof(readbuffer)); printf("Received string: %s", readbuffer); close(fd[0]); /*close file descriptor before exiting*/ } return(0); }


Download ppt "Unix Processes Slides are based upon IBM technical library, Speaking Unix, Part 8: Unix processes Extended System Programming Laboratory (ESPL) CS Department."

Similar presentations


Ads by Google