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 23b6095304Srsc if((np = copyproc(cp)) == 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 47224f6598Srsc if(argint(0, &pid) < 0) 482685309fSrsc return -1; 492685309fSrsc return proc_kill(pid); 502685309fSrsc } 512685309fSrsc 522685309fSrsc int 532685309fSrsc sys_getpid(void) 542685309fSrsc { 55b6095304Srsc return cp->pid; 562685309fSrsc } 572685309fSrsc 582685309fSrsc int 592685309fSrsc sys_sbrk(void) 602685309fSrsc { 61224f6598Srsc int addr; 622685309fSrsc int n; 632685309fSrsc 64224f6598Srsc if(argint(0, &n) < 0) 652685309fSrsc return -1; 66224f6598Srsc if((addr = growproc(n)) < 0) 672685309fSrsc return -1; 682685309fSrsc setupsegs(cp); 692685309fSrsc return addr; 702685309fSrsc } 714bcd0f6aSrsc 724bcd0f6aSrsc int 73*efc12b8eSrsc sys_sleep(void) 744bcd0f6aSrsc { 75*efc12b8eSrsc int n, ticks0; 76*efc12b8eSrsc 77*efc12b8eSrsc if(argint(0, &n) < 0) 78*efc12b8eSrsc return -1; 79*efc12b8eSrsc acquire(&tickslock); 80*efc12b8eSrsc ticks0 = ticks; 81*efc12b8eSrsc while(ticks - ticks0 < n){ 82*efc12b8eSrsc if(cp->killed){ 83*efc12b8eSrsc release(&tickslock); 84*efc12b8eSrsc return -1; 85*efc12b8eSrsc } 86*efc12b8eSrsc sleep(&ticks, &tickslock); 87*efc12b8eSrsc } 88*efc12b8eSrsc release(&tickslock); 894bcd0f6aSrsc return 0; 904bcd0f6aSrsc } 91