sysproc.c (1081B)
1 #include "types.h" 2 #include "x86.h" 3 #include "defs.h" 4 #include "param.h" 5 #include "memlayout.h" 6 #include "mmu.h" 7 #include "proc.h" 8 9 int 10 sys_fork(void) 11 { 12 return fork(); 13 } 14 15 int 16 sys_exit(void) 17 { 18 exit(); 19 return 0; // not reached 20 } 21 22 int 23 sys_wait(void) 24 { 25 return wait(); 26 } 27 28 int 29 sys_kill(void) 30 { 31 int pid; 32 33 if(argint(0, &pid) < 0) 34 return -1; 35 return kill(pid); 36 } 37 38 int 39 sys_getpid(void) 40 { 41 return proc->pid; 42 } 43 44 uintp 45 sys_sbrk(void) 46 { 47 uintp addr; 48 uintp n; 49 50 if(arguintp(0, &n) < 0) 51 return -1; 52 addr = proc->sz; 53 if(growproc(n) < 0) 54 return -1; 55 return addr; 56 } 57 58 int 59 sys_sleep(void) 60 { 61 int n; 62 uint ticks0; 63 64 if(argint(0, &n) < 0) 65 return -1; 66 acquire(&tickslock); 67 ticks0 = ticks; 68 while(ticks - ticks0 < n){ 69 if(proc->killed){ 70 release(&tickslock); 71 return -1; 72 } 73 sleep(&ticks, &tickslock); 74 } 75 release(&tickslock); 76 return 0; 77 } 78 79 // return how many clock tick interrupts have occurred 80 // since start. 81 int 82 sys_uptime(void) 83 { 84 uint xticks; 85 86 acquire(&tickslock); 87 xticks = ticks; 88 release(&tickslock); 89 return xticks; 90 }