xref: /xv6-public/sysproc.c (revision 558ab49f)
12685309fSrsc #include "types.h"
2*558ab49fSrsc #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 {
212685309fSrsc   proc_exit();
222685309fSrsc   return 0;  // not reached
232685309fSrsc }
242685309fSrsc 
252685309fSrsc int
262685309fSrsc sys_wait(void)
272685309fSrsc {
282685309fSrsc   return proc_wait();
292685309fSrsc }
302685309fSrsc 
312685309fSrsc int
322685309fSrsc sys_kill(void)
332685309fSrsc {
342685309fSrsc   int pid;
352685309fSrsc 
36224f6598Srsc   if(argint(0, &pid) < 0)
372685309fSrsc     return -1;
382685309fSrsc   return proc_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