In the 1974 paper The UNIX Time-Sharing System, Dennis Ritchie and Ken Thompson of Bell Laboratories describe the original implementation of forking processes as follows: Except while UNIX is bootstrapping itself into operation, a new process can come into existence only by use of the fork system call: processid = fork(label) When fork is executed by a process, it splits into two independently executing processes. The two processes have independent copies of the original core image, and share any open files. The new processes differ only in that one is considered the parent process: in the parent, control returns directly from the fork, while in the child, control is passed to location label. The processid returned by the fork call is the identification of the other process. Note: RItchie and Thompson use the word "core" to mean "memory". In the 1960's, memory was implemented using iron core rings, and the term "core" was commonly used to describe memory. Ritchie and Thompson also use the word "image" to describe the current state of a process; the memory, registers, etc.
Describe in a sentence or two, the differences from the original implementation of fork to the current implementation, the one you used in the shell assignment.
The fork command creates two copies of itself being the parent process and the child process.
The fork() call is one half of the “start a new process to run this command with these arguments”.
The other half is the execve() family of system calls, which specify what executable to run, the value(s) of ARGV it will receive, and the environment it will inherit.
Using two syscalls (fork() and execve()) allows more flexibility in setting things up (such as redirecting stdin, stdout, stderr) before running the executable.
Get Answers For Free
Most questions answered within 1 hours.