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;
+}