unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (NetBSD-2.0)
Page:
Section:
Apropos / Subsearch:
optional field

CPU_FORK(9)              BSD Kernel Developer's Manual             CPU_FORK(9)

NAME
     cpu_fork, child_return, proc_trampoline -- finish a fork operation

SYNOPSIS
     #include <&lt;sys/proc.h>&gt;

     void
     cpu_fork(struct proc *p1, struct proc *p2, void *stack, size_t stacksize,
         void (*func)(void *), void *arg);

     void
     child_return(void *arg);

DESCRIPTION
     cpu_fork() is the machine-dependent portion of fork1() which finishes a
     fork operation, with child process p2 nearly set up.  It copies and
     updates the PCB and trap frame from the parent p1, making the child ready
     to run.

     cpu_fork() rigs the child's kernel stack so that it will start in
     proc_trampoline().  proc_trampoline() does not have a normal calling
     sequence and is entered by cpu_switch().  If an alternate user-level
     stack is requested (with non-zero values in both the stack and stacksize
     arguments), the user stack pointer is set up accordingly.

     After being entered by cpu_switch() and while running in user context
     (within the kernel) proc_trampoline() will invoke the function func with
     the argument arg.  If a kernel thread is being created, the return path
     and argument are specified with func and arg.  If a user process is being
     created, fork1() will pass child_return() and p2 to cpu_fork() as func
     and arg respectively.  This causes the newly-created child process to go
     directly to user level with an apparent return value of 0 from fork(2),
     while the parent process returns normally.

SEE ALSO
     fork(2), cpu_switch(9), fork1(9)

BSD                              May 23, 2002                              BSD