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