xref: /xv6-public/sysproc.c (revision 9aa0337d)
12685309fSrsc #include "types.h"
2dae9b0d4Srsc #include "x86.h"
3558ab49fSrsc #include "defs.h"
42685309fSrsc #include "param.h"
5*9aa0337dSFrans Kaashoek #include "memlayout.h"
62685309fSrsc #include "mmu.h"
72685309fSrsc #include "proc.h"
82685309fSrsc 
92685309fSrsc int
102685309fSrsc sys_fork(void)
112685309fSrsc {
1221573833Srsc   return fork();
132685309fSrsc }
142685309fSrsc 
152685309fSrsc int
162685309fSrsc sys_exit(void)
172685309fSrsc {
185573c8f2Srsc   exit();
192685309fSrsc   return 0;  // not reached
202685309fSrsc }
212685309fSrsc 
222685309fSrsc int
232685309fSrsc sys_wait(void)
242685309fSrsc {
255573c8f2Srsc   return wait();
262685309fSrsc }
272685309fSrsc 
282685309fSrsc int
292685309fSrsc sys_kill(void)
302685309fSrsc {
312685309fSrsc   int pid;
322685309fSrsc 
33224f6598Srsc   if(argint(0, &pid) < 0)
342685309fSrsc     return -1;
355573c8f2Srsc   return kill(pid);
362685309fSrsc }
372685309fSrsc 
382685309fSrsc int
392685309fSrsc sys_getpid(void)
402685309fSrsc {
4148755214SRuss Cox   return proc->pid;
422685309fSrsc }
432685309fSrsc 
442685309fSrsc int
452685309fSrsc sys_sbrk(void)
462685309fSrsc {
47224f6598Srsc   int addr;
482685309fSrsc   int n;
492685309fSrsc 
50224f6598Srsc   if(argint(0, &n) < 0)
512685309fSrsc     return -1;
5248755214SRuss Cox   addr = proc->sz;
53dae9b0d4Srsc   if(growproc(n) < 0)
542685309fSrsc     return -1;
552685309fSrsc   return addr;
562685309fSrsc }
574bcd0f6aSrsc 
584bcd0f6aSrsc int
59efc12b8eSrsc sys_sleep(void)
604bcd0f6aSrsc {
61789b508dSRobert Morris   int n;
62789b508dSRobert Morris   uint ticks0;
63efc12b8eSrsc 
64efc12b8eSrsc   if(argint(0, &n) < 0)
65efc12b8eSrsc     return -1;
66efc12b8eSrsc   acquire(&tickslock);
67efc12b8eSrsc   ticks0 = ticks;
68efc12b8eSrsc   while(ticks - ticks0 < n){
6948755214SRuss Cox     if(proc->killed){
70efc12b8eSrsc       release(&tickslock);
71efc12b8eSrsc       return -1;
72efc12b8eSrsc     }
73efc12b8eSrsc     sleep(&ticks, &tickslock);
74efc12b8eSrsc   }
75efc12b8eSrsc   release(&tickslock);
764bcd0f6aSrsc   return 0;
774bcd0f6aSrsc }
78789b508dSRobert Morris 
79789b508dSRobert Morris // return how many clock tick interrupts have occurred
80789b508dSRobert Morris // since boot.
81789b508dSRobert Morris int
82789b508dSRobert Morris sys_uptime(void)
83789b508dSRobert Morris {
84789b508dSRobert Morris   uint xticks;
85789b508dSRobert Morris 
86789b508dSRobert Morris   acquire(&tickslock);
87789b508dSRobert Morris   xticks = ticks;
88789b508dSRobert Morris   release(&tickslock);
89789b508dSRobert Morris   return xticks;
90789b508dSRobert Morris }
91