xref: /xv6-public/sysproc.c (revision abf847a0)
12685309fSrsc #include "types.h"
2dae9b0d4Srsc #include "x86.h"
3558ab49fSrsc #include "defs.h"
4aae4e749SCody Cutler #include "date.h"
52685309fSrsc #include "param.h"
69aa0337dSFrans Kaashoek #include "memlayout.h"
72685309fSrsc #include "mmu.h"
82685309fSrsc #include "proc.h"
92685309fSrsc 
102685309fSrsc int
sys_fork(void)112685309fSrsc sys_fork(void)
122685309fSrsc {
1321573833Srsc   return fork();
142685309fSrsc }
152685309fSrsc 
162685309fSrsc int
sys_exit(void)172685309fSrsc sys_exit(void)
182685309fSrsc {
195573c8f2Srsc   exit();
202685309fSrsc   return 0;  // not reached
212685309fSrsc }
222685309fSrsc 
232685309fSrsc int
sys_wait(void)242685309fSrsc sys_wait(void)
252685309fSrsc {
265573c8f2Srsc   return wait();
272685309fSrsc }
282685309fSrsc 
292685309fSrsc int
sys_kill(void)302685309fSrsc sys_kill(void)
312685309fSrsc {
322685309fSrsc   int pid;
332685309fSrsc 
34224f6598Srsc   if(argint(0, &pid) < 0)
352685309fSrsc     return -1;
365573c8f2Srsc   return kill(pid);
372685309fSrsc }
382685309fSrsc 
392685309fSrsc int
sys_getpid(void)402685309fSrsc sys_getpid(void)
412685309fSrsc {
42*abf847a0SFrans Kaashoek   return myproc()->pid;
432685309fSrsc }
442685309fSrsc 
452685309fSrsc int
sys_sbrk(void)462685309fSrsc sys_sbrk(void)
472685309fSrsc {
48224f6598Srsc   int addr;
492685309fSrsc   int n;
502685309fSrsc 
51224f6598Srsc   if(argint(0, &n) < 0)
522685309fSrsc     return -1;
53*abf847a0SFrans Kaashoek   addr = myproc()->sz;
54dae9b0d4Srsc   if(growproc(n) < 0)
552685309fSrsc     return -1;
562685309fSrsc   return addr;
572685309fSrsc }
584bcd0f6aSrsc 
594bcd0f6aSrsc int
sys_sleep(void)60efc12b8eSrsc sys_sleep(void)
614bcd0f6aSrsc {
62789b508dSRobert Morris   int n;
63789b508dSRobert Morris   uint ticks0;
64efc12b8eSrsc 
65efc12b8eSrsc   if(argint(0, &n) < 0)
66efc12b8eSrsc     return -1;
67efc12b8eSrsc   acquire(&tickslock);
68efc12b8eSrsc   ticks0 = ticks;
69efc12b8eSrsc   while(ticks - ticks0 < n){
70*abf847a0SFrans Kaashoek     if(myproc()->killed){
71efc12b8eSrsc       release(&tickslock);
72efc12b8eSrsc       return -1;
73efc12b8eSrsc     }
74efc12b8eSrsc     sleep(&ticks, &tickslock);
75efc12b8eSrsc   }
76efc12b8eSrsc   release(&tickslock);
774bcd0f6aSrsc   return 0;
784bcd0f6aSrsc }
79789b508dSRobert Morris 
80789b508dSRobert Morris // return how many clock tick interrupts have occurred
81a4b213cfSFrans Kaashoek // since start.
82789b508dSRobert Morris int
sys_uptime(void)83789b508dSRobert Morris sys_uptime(void)
84789b508dSRobert Morris {
85789b508dSRobert Morris   uint xticks;
86789b508dSRobert Morris 
87789b508dSRobert Morris   acquire(&tickslock);
88789b508dSRobert Morris   xticks = ticks;
89789b508dSRobert Morris   release(&tickslock);
90789b508dSRobert Morris   return xticks;
91789b508dSRobert Morris }
92