xref: /xv6-public/sysproc.c (revision 224f6598)
12685309fSrsc #include "types.h"
22685309fSrsc #include "stat.h"
32685309fSrsc #include "param.h"
42685309fSrsc #include "mmu.h"
52685309fSrsc #include "proc.h"
62685309fSrsc #include "defs.h"
72685309fSrsc #include "x86.h"
82685309fSrsc #include "traps.h"
92685309fSrsc #include "syscall.h"
102685309fSrsc #include "spinlock.h"
112685309fSrsc #include "buf.h"
122685309fSrsc #include "fs.h"
132685309fSrsc #include "fsvar.h"
142685309fSrsc #include "elf.h"
159936bffaSrsc #include "file.h"
162685309fSrsc #include "fcntl.h"
172685309fSrsc 
182685309fSrsc int
192685309fSrsc sys_fork(void)
202685309fSrsc {
212685309fSrsc   struct proc *np;
222685309fSrsc 
232685309fSrsc   if((np = copyproc(curproc[cpu()])) == 0)
242685309fSrsc     return -1;
252685309fSrsc   np->state = RUNNABLE;
262685309fSrsc   return np->pid;
272685309fSrsc }
282685309fSrsc 
292685309fSrsc int
302685309fSrsc sys_exit(void)
312685309fSrsc {
322685309fSrsc   proc_exit();
332685309fSrsc   return 0;  // not reached
342685309fSrsc }
352685309fSrsc 
362685309fSrsc int
372685309fSrsc sys_wait(void)
382685309fSrsc {
392685309fSrsc   return proc_wait();
402685309fSrsc }
412685309fSrsc 
422685309fSrsc int
432685309fSrsc sys_kill(void)
442685309fSrsc {
452685309fSrsc   int pid;
462685309fSrsc 
47*224f6598Srsc   if(argint(0, &pid) < 0)
482685309fSrsc     return -1;
492685309fSrsc   return proc_kill(pid);
502685309fSrsc }
512685309fSrsc 
522685309fSrsc int
532685309fSrsc sys_getpid(void)
542685309fSrsc {
55*224f6598Srsc   return curproc[cpu()]->pid;
562685309fSrsc }
572685309fSrsc 
582685309fSrsc int
592685309fSrsc sys_sbrk(void)
602685309fSrsc {
61*224f6598Srsc   int addr;
622685309fSrsc   int n;
632685309fSrsc   struct proc *cp = curproc[cpu()];
642685309fSrsc 
65*224f6598Srsc   if(argint(0, &n) < 0)
662685309fSrsc     return -1;
67*224f6598Srsc   if((addr = growproc(n)) < 0)
682685309fSrsc     return -1;
692685309fSrsc   setupsegs(cp);
702685309fSrsc   return addr;
712685309fSrsc }
72