annotate src/sysproc.c @ 0:53676d1f5817 default tip

firsh commit
author tobaru
date Sun, 04 Feb 2018 17:54:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
1 #include "types.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
2 #include "arm.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
3 #include "defs.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
4 #include "param.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
5 #include "memlayout.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
6 #include "mmu.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
7 #include "proc.h"
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
8
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
9 int sys_fork(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
10 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
11 return fork();
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
12 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
13
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
14 int sys_exit(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
15 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
16 exit();
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
17 return 0; // not reached
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
18 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
19
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
20 int sys_wait(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
21 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
22 return wait();
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
23 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
24
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
25 int sys_kill(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
26 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
27 int pid;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
28
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
29 if(argint(0, &pid) < 0) {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
30 return -1;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
31 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
32
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
33 return kill(pid);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
34 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
35
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
36 int sys_getpid(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
37 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
38 return proc->pid;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
39 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
40
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
41 int sys_sbrk(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
42 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
43 int addr;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
44 int n;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
45
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
46 if(argint(0, &n) < 0) {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
47 return -1;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
48 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
49
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
50 addr = proc->sz;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
51
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
52 if(growproc(n) < 0) {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
53 return -1;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
54 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
55
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
56 return addr;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
57 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
58
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
59 int sys_sleep(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
60 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
61 int n;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
62 uint ticks0;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
63
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
64 if(argint(0, &n) < 0) {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
65 return -1;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
66 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
67
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
68 acquire(&tickslock);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
69
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
70 ticks0 = ticks;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
71
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
72 while(ticks - ticks0 < n){
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
73 if(proc->killed){
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
74 release(&tickslock);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
75 return -1;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
76 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
77
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
78 sleep(&ticks, &tickslock);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
79 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
80
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
81 release(&tickslock);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
82 return 0;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
83 }
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
84
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
85 // return how many clock tick interrupts have occurred
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
86 // since start.
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
87 int sys_uptime(void)
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
88 {
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
89 uint xticks;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
90
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
91 acquire(&tickslock);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
92 xticks = ticks;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
93 release(&tickslock);
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
94
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
95 return xticks;
53676d1f5817 firsh commit
tobaru
parents:
diff changeset
96 }