Mercurial > hg > Members > tobaru > xv6-osx-rpi
diff src/sysproc.c @ 0:53676d1f5817 default tip
firsh commit
author | tobaru |
---|---|
date | Sun, 04 Feb 2018 17:54:49 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/sysproc.c Sun Feb 04 17:54:49 2018 +0900 @@ -0,0 +1,96 @@ +#include "types.h" +#include "arm.h" +#include "defs.h" +#include "param.h" +#include "memlayout.h" +#include "mmu.h" +#include "proc.h" + +int sys_fork(void) +{ + return fork(); +} + +int sys_exit(void) +{ + exit(); + return 0; // not reached +} + +int sys_wait(void) +{ + return wait(); +} + +int sys_kill(void) +{ + int pid; + + if(argint(0, &pid) < 0) { + return -1; + } + + return kill(pid); +} + +int sys_getpid(void) +{ + return proc->pid; +} + +int sys_sbrk(void) +{ + int addr; + int n; + + if(argint(0, &n) < 0) { + return -1; + } + + addr = proc->sz; + + if(growproc(n) < 0) { + return -1; + } + + return addr; +} + +int sys_sleep(void) +{ + int n; + uint ticks0; + + if(argint(0, &n) < 0) { + return -1; + } + + acquire(&tickslock); + + ticks0 = ticks; + + while(ticks - ticks0 < n){ + if(proc->killed){ + release(&tickslock); + return -1; + } + + sleep(&ticks, &tickslock); + } + + release(&tickslock); + return 0; +} + +// return how many clock tick interrupts have occurred +// since start. +int sys_uptime(void) +{ + uint xticks; + + acquire(&tickslock); + xticks = ticks; + release(&tickslock); + + return xticks; +}