Skip to content

Commit

Permalink
move fork into proc.c
Browse files Browse the repository at this point in the history
  • Loading branch information
rsc committed May 31, 2009
1 parent dae9b0d commit 2157383
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 28 deletions.
7 changes: 4 additions & 3 deletions defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ int pipewrite(struct pipe*, char*, int);
// proc.c
struct proc* copyproc(struct proc*);
void exit(void);
int fork(void);
int growproc(int);
int kill(int);
void pinit(void);
Expand Down Expand Up @@ -146,9 +147,9 @@ void tvinit(void);
extern struct spinlock tickslock;

// uart.c
void uartinit(void);
void uartintr(void);
void uartputc(int);
void uartinit(void);
void uartintr(void);
void uartputc(int);


// number of elements in fixed-size array
Expand Down
34 changes: 20 additions & 14 deletions proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,34 +130,40 @@ usegment(void)
// Create a new process copying p as the parent.
// Sets up stack to return as if from system call.
// Caller must set state of returned proc to RUNNABLE.
struct proc*
copyproc(struct proc *p)
int
fork(void)
{
int i;
int i, pid;
struct proc *np;

// Allocate process.
if((np = allocproc()) == 0)
return 0;
return -1;

// Copy process state from p.
np->sz = p->sz;
np->sz = cp->sz;
if((np->mem = kalloc(np->sz)) == 0){
kfree(np->kstack, KSTACKSIZE);
np->kstack = 0;
np->state = UNUSED;
return 0;
return -1;
}
memmove(np->mem, p->mem, np->sz);
np->parent = p;
*np->tf = *p->tf;
memmove(np->mem, cp->mem, np->sz);
np->parent = cp;
*np->tf = *cp->tf;

for(i = 0; i < NOFILE; i++)
if(p->ofile[i])
np->ofile[i] = filedup(p->ofile[i]);
np->cwd = idup(p->cwd);
// Clear %eax so that fork returns 0 in the child.
np->tf->eax = 0;

return np;
for(i = 0; i < NOFILE; i++)
if(cp->ofile[i])
np->ofile[i] = filedup(cp->ofile[i]);
np->cwd = idup(cp->cwd);

pid = np->pid;
np->state = RUNNABLE;

return pid;
}

// Set up first user process.
Expand Down
12 changes: 1 addition & 11 deletions sysproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,7 @@
int
sys_fork(void)
{
int pid;
struct proc *np;

if((np = copyproc(cp)) == 0)
return -1;
pid = np->pid;

// Clear %eax so that fork returns 0 in the child.
np->tf->eax = 0;
np->state = RUNNABLE;
return pid;
return fork();
}

int
Expand Down

0 comments on commit 2157383

Please sign in to comment.