Skip to content
Snippets Groups Projects
Commit 21573833 authored by rsc's avatar rsc
Browse files

move fork into proc.c

parent dae9b0d4
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......@@ -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
......
......@@ -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.
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment