Mercurial > hg > Members > anatofuz > CbC_xv6
diff src/sysproc.c @ 0:83c23a36980d
Init
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 26 May 2017 23:11:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/sysproc.c Fri May 26 23:11:05 2017 +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; +}