xref: /xv6-public/sysproc.c (revision 21573833)
12685309fSrsc #include "types.h"
2dae9b0d4Srsc #include "x86.h"
3558ab49fSrsc #include "defs.h"
42685309fSrsc #include "param.h"
52685309fSrsc #include "mmu.h"
62685309fSrsc #include "proc.h"
72685309fSrsc 
82685309fSrsc int
92685309fSrsc sys_fork(void)
102685309fSrsc {
11*21573833Srsc   return fork();
122685309fSrsc }
132685309fSrsc 
142685309fSrsc int
152685309fSrsc sys_exit(void)
162685309fSrsc {
175573c8f2Srsc   exit();
182685309fSrsc   return 0;  // not reached
192685309fSrsc }
202685309fSrsc 
212685309fSrsc int
222685309fSrsc sys_wait(void)
232685309fSrsc {
245573c8f2Srsc   return wait();
252685309fSrsc }
262685309fSrsc 
272685309fSrsc int
282685309fSrsc sys_kill(void)
292685309fSrsc {
302685309fSrsc   int pid;
312685309fSrsc 
32224f6598Srsc   if(argint(0, &pid) < 0)
332685309fSrsc     return -1;
345573c8f2Srsc   return kill(pid);
352685309fSrsc }
362685309fSrsc 
372685309fSrsc int
382685309fSrsc sys_getpid(void)
392685309fSrsc {
40b6095304Srsc   return cp->pid;
412685309fSrsc }
422685309fSrsc 
432685309fSrsc int
442685309fSrsc sys_sbrk(void)
452685309fSrsc {
46224f6598Srsc   int addr;
472685309fSrsc   int n;
482685309fSrsc 
49224f6598Srsc   if(argint(0, &n) < 0)
502685309fSrsc     return -1;
51dae9b0d4Srsc   addr = cp->sz;
52dae9b0d4Srsc   if(growproc(n) < 0)
532685309fSrsc     return -1;
542685309fSrsc   return addr;
552685309fSrsc }
564bcd0f6aSrsc 
574bcd0f6aSrsc int
58efc12b8eSrsc sys_sleep(void)
594bcd0f6aSrsc {
60efc12b8eSrsc   int n, ticks0;
61efc12b8eSrsc 
62efc12b8eSrsc   if(argint(0, &n) < 0)
63efc12b8eSrsc     return -1;
64efc12b8eSrsc   acquire(&tickslock);
65efc12b8eSrsc   ticks0 = ticks;
66efc12b8eSrsc   while(ticks - ticks0 < n){
67efc12b8eSrsc     if(cp->killed){
68efc12b8eSrsc       release(&tickslock);
69efc12b8eSrsc       return -1;
70efc12b8eSrsc     }
71efc12b8eSrsc     sleep(&ticks, &tickslock);
72efc12b8eSrsc   }
73efc12b8eSrsc   release(&tickslock);
744bcd0f6aSrsc   return 0;
754bcd0f6aSrsc }
76