xref: /xv6-public/sysproc.c (revision 789b508d)
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 {
1121573833Srsc   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 {
4048755214SRuss Cox   return proc->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;
5148755214SRuss Cox   addr = proc->sz;
52dae9b0d4Srsc   if(growproc(n) < 0)
532685309fSrsc     return -1;
542685309fSrsc   return addr;
552685309fSrsc }
564bcd0f6aSrsc 
574bcd0f6aSrsc int
58efc12b8eSrsc sys_sleep(void)
594bcd0f6aSrsc {
60*789b508dSRobert Morris   int n;
61*789b508dSRobert Morris   uint ticks0;
62efc12b8eSrsc 
63efc12b8eSrsc   if(argint(0, &n) < 0)
64efc12b8eSrsc     return -1;
65efc12b8eSrsc   acquire(&tickslock);
66efc12b8eSrsc   ticks0 = ticks;
67efc12b8eSrsc   while(ticks - ticks0 < n){
6848755214SRuss Cox     if(proc->killed){
69efc12b8eSrsc       release(&tickslock);
70efc12b8eSrsc       return -1;
71efc12b8eSrsc     }
72efc12b8eSrsc     sleep(&ticks, &tickslock);
73efc12b8eSrsc   }
74efc12b8eSrsc   release(&tickslock);
754bcd0f6aSrsc   return 0;
764bcd0f6aSrsc }
77*789b508dSRobert Morris 
78*789b508dSRobert Morris // return how many clock tick interrupts have occurred
79*789b508dSRobert Morris // since boot.
80*789b508dSRobert Morris int
81*789b508dSRobert Morris sys_uptime(void)
82*789b508dSRobert Morris {
83*789b508dSRobert Morris   uint xticks;
84*789b508dSRobert Morris 
85*789b508dSRobert Morris   acquire(&tickslock);
86*789b508dSRobert Morris   xticks = ticks;
87*789b508dSRobert Morris   release(&tickslock);
88*789b508dSRobert Morris   return xticks;
89*789b508dSRobert Morris }
90