16.05.2015 Views

Working with the Unix OS

Working with the Unix OS

Working with the Unix OS

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Processes I<br />

Process Control<br />

use and implementation of system calls<br />

fork<br />

exit<br />

wait<br />

exec<br />

brk<br />

creates a new process<br />

terminates process<br />

allows a parent process to synchronize<br />

allows a process to invoke a new program<br />

allows a process to allocate more memory<br />

System Calls Dealing <strong>with</strong> Memory<br />

System Calls Dealing <strong>with</strong><br />

Management<br />

Synchronization<br />

Miscellaneous<br />

fork exec brk exit wait signal kill setpgrp setuid<br />

dupreg<br />

attach<br />

reg<br />

detachreg<br />

allocreg<br />

attach<br />

reg<br />

growreg<br />

loadreg<br />

mapreg<br />

growreg detachreg<br />

Figure 19. Process system calls<br />

Process Creation<br />

pid = fork(); /* parent is returned child’s PID */<br />

- allocates a slot in process table for new process<br />

- assigns unique ID number to child process<br />

- logical copy of <strong>the</strong> context of parent process<br />

- increment file and inode table counters<br />

- returns 0 value to child, and child PID to parent<br />

Figure 20. Algorithm for fork<br />

algorithm fork<br />

input: none<br />

output: to parent process, child PID number<br />

to child process, 0<br />

{<br />

check for available kernel resources;<br />

get free proc table slot, unique PID number;<br />

check that user not running too many processes;<br />

mark child state "being created;"<br />

copy data from parent proc table slot to new child slot;<br />

increment counts on current directory inode & changed root (if applicable);<br />

increment open file counts in file table;<br />

make copy of parent context (u area, text, data, stack) in memory;<br />

push dummy system level context layer onto child system level context;<br />

dummy context contains data allowing child process to recognize<br />

itself, and start running from here when scheduled;<br />

if (executing process is parent process)<br />

{<br />

change child state to "ready to run;"<br />

return (child ID); /* from system to user */<br />

}<br />

else /* executing process is <strong>the</strong> child process */<br />

{<br />

initialize u area timing fields;<br />

return (0); /* to user */<br />

}<br />

}<br />

- limit on number of processes for user and system<br />

- <strong>the</strong> child "inherits" <strong>the</strong> parent process real an effective user ID, parent process group, parent nice.<br />

104

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!