xref: /xv6-public/sysproc.c (revision 2685309f)
1*2685309fSrsc #include "types.h"
2*2685309fSrsc #include "stat.h"
3*2685309fSrsc #include "param.h"
4*2685309fSrsc #include "mmu.h"
5*2685309fSrsc #include "proc.h"
6*2685309fSrsc #include "defs.h"
7*2685309fSrsc #include "x86.h"
8*2685309fSrsc #include "traps.h"
9*2685309fSrsc #include "syscall.h"
10*2685309fSrsc #include "spinlock.h"
11*2685309fSrsc #include "buf.h"
12*2685309fSrsc #include "fs.h"
13*2685309fSrsc #include "fsvar.h"
14*2685309fSrsc #include "elf.h"
15*2685309fSrsc #include "fd.h"
16*2685309fSrsc #include "fcntl.h"
17*2685309fSrsc 
18*2685309fSrsc int
19*2685309fSrsc sys_fork(void)
20*2685309fSrsc {
21*2685309fSrsc   struct proc *np;
22*2685309fSrsc 
23*2685309fSrsc   if((np = copyproc(curproc[cpu()])) == 0)
24*2685309fSrsc     return -1;
25*2685309fSrsc   np->state = RUNNABLE;
26*2685309fSrsc   return np->pid;
27*2685309fSrsc }
28*2685309fSrsc 
29*2685309fSrsc int
30*2685309fSrsc sys_exit(void)
31*2685309fSrsc {
32*2685309fSrsc   proc_exit();
33*2685309fSrsc   return 0;  // not reached
34*2685309fSrsc }
35*2685309fSrsc 
36*2685309fSrsc int
37*2685309fSrsc sys_wait(void)
38*2685309fSrsc {
39*2685309fSrsc   return proc_wait();
40*2685309fSrsc }
41*2685309fSrsc 
42*2685309fSrsc int
43*2685309fSrsc sys_kill(void)
44*2685309fSrsc {
45*2685309fSrsc   int pid;
46*2685309fSrsc 
47*2685309fSrsc   if(fetcharg(0, &pid) < 0)
48*2685309fSrsc     return -1;
49*2685309fSrsc   return proc_kill(pid);
50*2685309fSrsc }
51*2685309fSrsc 
52*2685309fSrsc int
53*2685309fSrsc sys_getpid(void)
54*2685309fSrsc {
55*2685309fSrsc   struct proc *cp = curproc[cpu()];
56*2685309fSrsc   return cp->pid;
57*2685309fSrsc }
58*2685309fSrsc 
59*2685309fSrsc int
60*2685309fSrsc sys_sbrk(void)
61*2685309fSrsc {
62*2685309fSrsc   uint addr;
63*2685309fSrsc   int n;
64*2685309fSrsc   struct proc *cp = curproc[cpu()];
65*2685309fSrsc 
66*2685309fSrsc   if(fetcharg(0, &n) < 0)
67*2685309fSrsc     return -1;
68*2685309fSrsc   if((addr = growproc(n)) == 0xffffffff)
69*2685309fSrsc     return -1;
70*2685309fSrsc   setupsegs(cp);
71*2685309fSrsc   return addr;
72*2685309fSrsc }
73