12685309fSrsc #include "types.h" 22685309fSrsc #include "stat.h" 32685309fSrsc #include "param.h" 42685309fSrsc #include "mmu.h" 52685309fSrsc #include "proc.h" 62685309fSrsc #include "defs.h" 72685309fSrsc #include "x86.h" 82685309fSrsc #include "traps.h" 92685309fSrsc #include "syscall.h" 102685309fSrsc #include "spinlock.h" 112685309fSrsc #include "buf.h" 122685309fSrsc #include "fs.h" 132685309fSrsc #include "fsvar.h" 142685309fSrsc #include "elf.h" 159936bffaSrsc #include "file.h" 162685309fSrsc #include "fcntl.h" 172685309fSrsc 182685309fSrsc int 192685309fSrsc sys_fork(void) 202685309fSrsc { 212685309fSrsc struct proc *np; 222685309fSrsc 232685309fSrsc if((np = copyproc(curproc[cpu()])) == 0) 242685309fSrsc return -1; 252685309fSrsc np->state = RUNNABLE; 262685309fSrsc return np->pid; 272685309fSrsc } 282685309fSrsc 292685309fSrsc int 302685309fSrsc sys_exit(void) 312685309fSrsc { 322685309fSrsc proc_exit(); 332685309fSrsc return 0; // not reached 342685309fSrsc } 352685309fSrsc 362685309fSrsc int 372685309fSrsc sys_wait(void) 382685309fSrsc { 392685309fSrsc return proc_wait(); 402685309fSrsc } 412685309fSrsc 422685309fSrsc int 432685309fSrsc sys_kill(void) 442685309fSrsc { 452685309fSrsc int pid; 462685309fSrsc 47*224f6598Srsc if(argint(0, &pid) < 0) 482685309fSrsc return -1; 492685309fSrsc return proc_kill(pid); 502685309fSrsc } 512685309fSrsc 522685309fSrsc int 532685309fSrsc sys_getpid(void) 542685309fSrsc { 55*224f6598Srsc return curproc[cpu()]->pid; 562685309fSrsc } 572685309fSrsc 582685309fSrsc int 592685309fSrsc sys_sbrk(void) 602685309fSrsc { 61*224f6598Srsc int addr; 622685309fSrsc int n; 632685309fSrsc struct proc *cp = curproc[cpu()]; 642685309fSrsc 65*224f6598Srsc if(argint(0, &n) < 0) 662685309fSrsc return -1; 67*224f6598Srsc if((addr = growproc(n)) < 0) 682685309fSrsc return -1; 692685309fSrsc setupsegs(cp); 702685309fSrsc return addr; 712685309fSrsc } 72