Title: Forking
1Forking Process Scheduling
- Vivek Pai / Kai Li
- Princeton University
2Mechanics
- Exams not graded
- Hopefully, this week
- Quick scan looked fine
- Printed slides dont exactly match
- Notebook problems, time limited
- Finish forking, start scheduling
3A Quick Review
- What have we covered
- How to store data via files
- How to virtualize memory
- Every process gets uniform address space
- Lots of tricks can be played to share memory
- Whats left
- How to share/virtualize the processor
- Having processes communicate/cooperate
4Whos Happy Right Now
5How To Launch a New Process?
- Obvious choice start process system call
- But not all processes start the same
- testprogram versus testprogram gt outfile
versus testprogram arg1 arg2 gt outfile - The parent process wants to specify various
aspects of the childs environment - Next step add more parameters to specify
environment
6Can We Generalize?
- What happens as more information gets added to
the processs environment more parameters?
New system calls? This gets ugly - Whats the most general way of setting up all of
the environment? - So, why not allow process setup at any point?
- This is the exec( ) system call (and its variants)
7But We Want a Parent and a Child
- The exec call destroys the current process
- So, instead, destroy a copy of the process
- The fork( ) call duplicates the current process
- Better yet, dont tightly couple fork and exec
- This way, you can customize the childs
environment - So what does fork( ) entail?
- Making a copy of everything about the process
- Ouch!
8What Gets Copied
- So far, weve covered the following
- VM system
- File system
- Signals
- How do we go about copying this information?
- What parts are easy to copy, and whats hard?
- Whats the common case with fork/exec?
- What needs to get preserved in this scenario?
9Shared Memory
- How to destroy a virtual address space?
- Link all PTEs
- Reference count
- How to swap out/in?
- Link all PTEs
- Operation on all entries
- How to pin/unpin?
- Link all PTEs
- Reference count
w
. . .
. . .
Page table
. . .
Process 1
w
Physical pages
. . .
. . .
Page table
Process 2
10Copy-On-Write
- Childs virtual address space uses the same page
mapping as parents - Make all pages read-only
- Make child process ready
- On a read, nothing happens
- On a write, generates an access fault
- map to a new page frame
- copy the page over
- restart the instruction
r
r
. . .
. . .
Page table
. . .
Parent process
r
r
Physical pages
. . .
. . .
Page table
Child process
11Issues of Copy-On-Write
- How to destroy an address space
- Same as shared memory case?
- How to swap in/out?
- Same as shared memory
- How to pin/unpin
- Same as shared memory
12Process Creation Termination
- Four primitives
- Fork create a copy of this process
- Exec replace this process with this program
- Wait wait for child process to finish
- Kill (potentially) end a running process
- Processes form a tree what happens when parent
disappears?
13Signals
- Asynchronous event delivery mechanism
- Examples FPE, segv, ctrl-c, hang up, resume
- Default actions ignore, abort, core dump
- Handler program-specified routine for signal
14A Signaling Sidebar
- Whats wrong with this program
- int randVal
- void SigHand(void)
-
- printf(your rand val is d\n, randVal)
-
- int main(int argc, char argv)
-
- set up ctrl-c handler
- while (1)
- randVal 0
- randVal 1
-
- randVal 9
-
15Scheduling Primitives
- Block wait on some event/resource
- Network packet arrival
- Keyboard, mouse input
- Disk activity completion
- Yield give up running for now
- Directed (let my friend run)
- Undirected (let any process run)
- Synchronization
- We will talk about this later
16Our Friend, The Transition Diagram
terminate
Scheduler dispatch
Running
Wait for resource
Create a process
Ready
Blocked
Resource becomes available
17Process State Transition ofNon-Preemptive
Scheduling
Terminate (call scheduler)
Running
Scheduler dispatch
Block for resource (call scheduler)
Yield (call scheduler)
Create a process
Ready
Blocked
Resource becomes available (move to ready queue)
18Scheduler
- A non-preemptive scheduler invoked by explicit
block or yield calls - The simplest form
- Scheduler
- save current process state (into PCB)
- choose next process to run
- dispatch (load PCB and run)
- Does this work?
19More on Scheduler
- Should the scheduler use a special stack?
- Yes, because a user process can overflow and it
would require another stack to deal with stack
overflow - Should the scheduler simply be a kernel process?
- You can view it that way because it has a stack,
code and its data structure - This process always runs when there is no user
process
20Where Should PCB Be Saved?
- Save the PCB on its user stack
- Many processors have a special instruction to do
it efficiently - But, need to deal with the overflow problem
- When the process terminates, the PCB vanishes
- Save the PCB on the kernel heap data structure
- May not be as efficient as saving it on stack
- But, it is very flexible and no other problems
21Physical Memory Multiprogramming
- Memory is a scarce resource
- Want to run many programs
- Programs need memory to run
- What happens whenM(a) M(b) M(c) gt physical
mem?
22Job Swapping
Swap in
Swap out
Partially executed swapped-out processes
Ready Queue
CPU
Terminate
I/O Waiting queues
I/O
23Add Job Swapping toState Transition Diagram
Swap out
Swap
Terminate (call scheduler)
Running
Scheduler dispatch
Block for resource (call scheduler)
Swap in
Yield (call scheduler)
Create a process
Ready
Blocked
Resource becomes available (move to ready queue)
24Think About Swapping
- Is swapping
- Necessary
- Desirable
- Good
- Ideal
- Things to consider
- Performance
- Complexity
- Efficiency