xv6

port of xv6 to x86-64
git clone http://frotz.net/git/xv6.git
Log | Files | Refs | README | LICENSE

sysproc.c (1081B)


      1 #include "types.h"
      2 #include "x86.h"
      3 #include "defs.h"
      4 #include "param.h"
      5 #include "memlayout.h"
      6 #include "mmu.h"
      7 #include "proc.h"
      8 
      9 int
     10 sys_fork(void)
     11 {
     12   return fork();
     13 }
     14 
     15 int
     16 sys_exit(void)
     17 {
     18   exit();
     19   return 0;  // not reached
     20 }
     21 
     22 int
     23 sys_wait(void)
     24 {
     25   return wait();
     26 }
     27 
     28 int
     29 sys_kill(void)
     30 {
     31   int pid;
     32 
     33   if(argint(0, &pid) < 0)
     34     return -1;
     35   return kill(pid);
     36 }
     37 
     38 int
     39 sys_getpid(void)
     40 {
     41   return proc->pid;
     42 }
     43 
     44 uintp
     45 sys_sbrk(void)
     46 {
     47   uintp addr;
     48   uintp n;
     49 
     50   if(arguintp(0, &n) < 0)
     51     return -1;
     52   addr = proc->sz;
     53   if(growproc(n) < 0)
     54     return -1;
     55   return addr;
     56 }
     57 
     58 int
     59 sys_sleep(void)
     60 {
     61   int n;
     62   uint ticks0;
     63   
     64   if(argint(0, &n) < 0)
     65     return -1;
     66   acquire(&tickslock);
     67   ticks0 = ticks;
     68   while(ticks - ticks0 < n){
     69     if(proc->killed){
     70       release(&tickslock);
     71       return -1;
     72     }
     73     sleep(&ticks, &tickslock);
     74   }
     75   release(&tickslock);
     76   return 0;
     77 }
     78 
     79 // return how many clock tick interrupts have occurred
     80 // since start.
     81 int
     82 sys_uptime(void)
     83 {
     84   uint xticks;
     85   
     86   acquire(&tickslock);
     87   xticks = ticks;
     88   release(&tickslock);
     89   return xticks;
     90 }