12685309fSrsc #include "types.h" 2558ab49fSrsc #include "defs.h" 32685309fSrsc #include "param.h" 42685309fSrsc #include "mmu.h" 52685309fSrsc #include "proc.h" 62685309fSrsc 72685309fSrsc int 82685309fSrsc sys_fork(void) 92685309fSrsc { 102685309fSrsc struct proc *np; 112685309fSrsc 12b6095304Srsc if((np = copyproc(cp)) == 0) 132685309fSrsc return -1; 142685309fSrsc np->state = RUNNABLE; 152685309fSrsc return np->pid; 162685309fSrsc } 172685309fSrsc 182685309fSrsc int 192685309fSrsc sys_exit(void) 202685309fSrsc { 21*5573c8f2Srsc exit(); 222685309fSrsc return 0; // not reached 232685309fSrsc } 242685309fSrsc 252685309fSrsc int 262685309fSrsc sys_wait(void) 272685309fSrsc { 28*5573c8f2Srsc return wait(); 292685309fSrsc } 302685309fSrsc 312685309fSrsc int 322685309fSrsc sys_kill(void) 332685309fSrsc { 342685309fSrsc int pid; 352685309fSrsc 36224f6598Srsc if(argint(0, &pid) < 0) 372685309fSrsc return -1; 38*5573c8f2Srsc return kill(pid); 392685309fSrsc } 402685309fSrsc 412685309fSrsc int 422685309fSrsc sys_getpid(void) 432685309fSrsc { 44b6095304Srsc return cp->pid; 452685309fSrsc } 462685309fSrsc 472685309fSrsc int 482685309fSrsc sys_sbrk(void) 492685309fSrsc { 50224f6598Srsc int addr; 512685309fSrsc int n; 522685309fSrsc 53224f6598Srsc if(argint(0, &n) < 0) 542685309fSrsc return -1; 55224f6598Srsc if((addr = growproc(n)) < 0) 562685309fSrsc return -1; 572685309fSrsc setupsegs(cp); 582685309fSrsc return addr; 592685309fSrsc } 604bcd0f6aSrsc 614bcd0f6aSrsc int 62efc12b8eSrsc sys_sleep(void) 634bcd0f6aSrsc { 64efc12b8eSrsc int n, ticks0; 65efc12b8eSrsc 66efc12b8eSrsc if(argint(0, &n) < 0) 67efc12b8eSrsc return -1; 68efc12b8eSrsc acquire(&tickslock); 69efc12b8eSrsc ticks0 = ticks; 70efc12b8eSrsc while(ticks - ticks0 < n){ 71efc12b8eSrsc if(cp->killed){ 72efc12b8eSrsc release(&tickslock); 73efc12b8eSrsc return -1; 74efc12b8eSrsc } 75efc12b8eSrsc sleep(&ticks, &tickslock); 76efc12b8eSrsc } 77efc12b8eSrsc release(&tickslock); 784bcd0f6aSrsc return 0; 794bcd0f6aSrsc } 80