1*2685309fSrsc #include "types.h" 2*2685309fSrsc #include "stat.h" 3*2685309fSrsc #include "param.h" 4*2685309fSrsc #include "mmu.h" 5*2685309fSrsc #include "proc.h" 6*2685309fSrsc #include "defs.h" 7*2685309fSrsc #include "x86.h" 8*2685309fSrsc #include "traps.h" 9*2685309fSrsc #include "syscall.h" 10*2685309fSrsc #include "spinlock.h" 11*2685309fSrsc #include "buf.h" 12*2685309fSrsc #include "fs.h" 13*2685309fSrsc #include "fsvar.h" 14*2685309fSrsc #include "elf.h" 15*2685309fSrsc #include "fd.h" 16*2685309fSrsc #include "fcntl.h" 17*2685309fSrsc 18*2685309fSrsc int 19*2685309fSrsc sys_fork(void) 20*2685309fSrsc { 21*2685309fSrsc struct proc *np; 22*2685309fSrsc 23*2685309fSrsc if((np = copyproc(curproc[cpu()])) == 0) 24*2685309fSrsc return -1; 25*2685309fSrsc np->state = RUNNABLE; 26*2685309fSrsc return np->pid; 27*2685309fSrsc } 28*2685309fSrsc 29*2685309fSrsc int 30*2685309fSrsc sys_exit(void) 31*2685309fSrsc { 32*2685309fSrsc proc_exit(); 33*2685309fSrsc return 0; // not reached 34*2685309fSrsc } 35*2685309fSrsc 36*2685309fSrsc int 37*2685309fSrsc sys_wait(void) 38*2685309fSrsc { 39*2685309fSrsc return proc_wait(); 40*2685309fSrsc } 41*2685309fSrsc 42*2685309fSrsc int 43*2685309fSrsc sys_kill(void) 44*2685309fSrsc { 45*2685309fSrsc int pid; 46*2685309fSrsc 47*2685309fSrsc if(fetcharg(0, &pid) < 0) 48*2685309fSrsc return -1; 49*2685309fSrsc return proc_kill(pid); 50*2685309fSrsc } 51*2685309fSrsc 52*2685309fSrsc int 53*2685309fSrsc sys_getpid(void) 54*2685309fSrsc { 55*2685309fSrsc struct proc *cp = curproc[cpu()]; 56*2685309fSrsc return cp->pid; 57*2685309fSrsc } 58*2685309fSrsc 59*2685309fSrsc int 60*2685309fSrsc sys_sbrk(void) 61*2685309fSrsc { 62*2685309fSrsc uint addr; 63*2685309fSrsc int n; 64*2685309fSrsc struct proc *cp = curproc[cpu()]; 65*2685309fSrsc 66*2685309fSrsc if(fetcharg(0, &n) < 0) 67*2685309fSrsc return -1; 68*2685309fSrsc if((addr = growproc(n)) == 0xffffffff) 69*2685309fSrsc return -1; 70*2685309fSrsc setupsegs(cp); 71*2685309fSrsc return addr; 72*2685309fSrsc } 73