Presentation is loading. Please wait.

Presentation is loading. Please wait.

A process is a program in execution A running system consists of multiple processes – OS processes Processes started by the OS to do “system things” –

Similar presentations


Presentation on theme: "A process is a program in execution A running system consists of multiple processes – OS processes Processes started by the OS to do “system things” –"— Presentation transcript:

1

2 A process is a program in execution A running system consists of multiple processes – OS processes Processes started by the OS to do “system things” – Not everything is in the kernel – User processes Executing user code, with the possibility of executing kernel code by going to kernel mode (system calls) – The terms “job” and “process” are used interchangeably in OS texts stack heap data text bounded by a max size Process address space

3 Definition Process = – code (also called text section) initially stored on disk in an executable file – program counter – content of the processor’s registers – a runtime stack function parameters, local variables, return addresses, etc. – a data section global variables – a heap for dynamically allocated memory

4 free memory command interpreter kernel process #2 process #3 process #1 stack heap data text stack heap data text stack heap data text OS support multi-tasking: multiple processes can co- exist in memory To start a new program, the OS simply creates a new process via the system call fork()

5 As a process executes, it may be in various states These states are defined by the OS Our assumption: a single CPU and we do not treat threads now.

6 the process control block (PCB) contains: state, PC, CPU scheduling info, memory info, resource info, I/O status info, …

7 A process may create a new process, so it becomes a parent We obtain a tree of processes Each process has a pid ppid refers to the parent’s pid When a process creates a child, the child may inherit/share some of the resources of its parent, or may have entirely new ones Upon creation of a child, the parent could continue execution, or wait for the child’s completion The child could be a clone of the parent (i.e., have a copy of the address space), or have a new program loaded into it ps - auxelw

8 fork() creates a new process The child is a copy of the parent, but... – It has a different pid (and thus ppid) – Its resource utilization (so far) is set to 0 fork() returns the child’s pid to the parent, and 0 to the child – Each process can find its own pid with the getpid() call, and its ppid with the getppid() call Both processes continue execution after the call to fork()

9 pid = fork(); if (pid < 0) { fprintf(stdout,”Error: can’t fork()\n”); } else if (pid) { fprintf(stdout,”I am the parent and my child has pid %d\n”,pid); while (1); // a sleep command } else { fprintf(stdout,”I am the child, and my pid is %d\n”, getpid()); while (1) ; }

10 What does the following code print? int a = 12; if (pid = fork()) { sleep(10); fprintf(stdout,”a = %d\n”,a); while (1); } else { a += 3; while (1) ; }

11 stack heap data a = 12 text stack heap data a = 15 text parentchild activation record for sleep identical but for extra activation record(s) identical identical but for a identical State of both processes right before sleep returns

12 How many times does this code print “hello”? pid1 = fork(); fprintf(stdout,”hello\n”); pid2 = fork(); fprintf(stdout,”hello\n”); pid1 = fork(); fprintf(stdout,”hello\n”); pid2 = fork(); fprintf(stdout,”hello\n”); pid2 = fork(); fprintf(stdout,”hello\n”);

13 A process terminates itself with the exit() system call – This call takes as argument a status value (or error code, or exit code) – All resources of a process are deallocated (freed) by the OS physical and virtual memory, open files, I/O buffers,... A process can cause the termination of another proce A parent can wait for a child to complete The wait() call – blocks until any child completes – returns the pid of the completed child and the child’s exit code The waitpid() call – blocks until a specific child completes – can be made non-blocking Assignment: Read man waitpid and man wait for next time

14 Waiting for child

15 #include int main(int argc, char **argv) { pid_t pid; pid = fork(); if (pid < 0) { fprintf(stderr,"Error”); exit(1); } else if (pid) { // I am the parent int status; if (waitpid(pid,&status,0) == -1) perror("waitpid()"); else { // end of waiting fprintf(stdout,"I am parent. My child exit code %d\n“, WEXITSTATUS(status)); } else { // I am the child fprintf(stdout,"I am the child and my pid is %d\n",getpid()); sleep(5); exit(42); } exit(0); }

16 #include int main(int argc, char **argv) { pid_t pid; pid = fork(); if (pid < 0) { fprintf(stderr,"Error”); exit(1); } else if (pid) { // I am the parent int status; if (waitpid(pid,&status,0) == -1) perror("waitpid()"); else { // end of waiting fprintf(stdout,"I am parent. My child exit code %d\n“, WEXITSTATUS(status)); } else { // I am the child fprintf(stdout,"I am the child and my pid is %d\n",getpid()); sleep(5); exit(42); } exit(0); }


Download ppt "A process is a program in execution A running system consists of multiple processes – OS processes Processes started by the OS to do “system things” –"

Similar presentations


Ads by Google