diff options
author | rtm <rtm> | 2006-06-22 20:47:23 +0000 |
---|---|---|
committer | rtm <rtm> | 2006-06-22 20:47:23 +0000 |
commit | df5cc91659b0a2190072e6fc305060c8de95ed82 (patch) | |
tree | 0965b8a673f0e2ddab08b2135ab1499f6455c648 /syscall.c | |
parent | bf49aedbed02cdbf40430178847d34c48c36c693 (diff) | |
download | xv6-labs-df5cc91659b0a2190072e6fc305060c8de95ed82.tar.gz xv6-labs-df5cc91659b0a2190072e6fc305060c8de95ed82.tar.bz2 xv6-labs-df5cc91659b0a2190072e6fc305060c8de95ed82.zip |
compile "user programs"
curproc array
Diffstat (limited to 'syscall.c')
-rw-r--r-- | syscall.c | 25 |
1 files changed, 14 insertions, 11 deletions
@@ -25,17 +25,18 @@ void sys_exit() { struct proc *p; + struct proc *cp = curproc[cpu()]; - curproc->state = ZOMBIE; + cp->state = ZOMBIE; // wake up parent for(p = proc; p < &proc[NPROC]; p++) - if(p->pid == curproc->ppid) + if(p->pid == cp->ppid) wakeup(p); // abandon children for(p = proc; p < &proc[NPROC]; p++) - if(p->ppid == curproc->pid) + if(p->ppid == cp->pid) p->pid = 1; swtch(); @@ -45,37 +46,39 @@ void sys_wait() { struct proc *p; + struct proc *cp = curproc[cpu()]; int any; - cprintf("waid pid %d ppid %d\n", curproc->pid, curproc->ppid); + cprintf("waid pid %d ppid %d\n", cp->pid, cp->ppid); while(1){ any = 0; for(p = proc; p < &proc[NPROC]; p++){ - if(p->state == ZOMBIE && p->ppid == curproc->pid){ + if(p->state == ZOMBIE && p->ppid == cp->pid){ kfree(p->mem, p->sz); kfree(p->kstack, KSTACKSIZE); p->state = UNUSED; - cprintf("%x collected %x\n", curproc, p); + cprintf("%x collected %x\n", cp, p); return; } - if(p->state != UNUSED && p->ppid == curproc->pid) + if(p->state != UNUSED && p->ppid == cp->pid) any = 1; } if(any == 0){ - cprintf("%x nothing to wait for\n", curproc); + cprintf("%x nothing to wait for\n", cp); return; } - sleep(curproc); + sleep(cp); } } void syscall() { - int num = curproc->tf->tf_regs.reg_eax; + struct proc *cp = curproc[cpu()]; + int num = cp->tf->tf_regs.reg_eax; - cprintf("%x sys %d\n", curproc, num); + cprintf("%x sys %d\n", cp, num); switch(num){ case SYS_fork: sys_fork(); |