commit 4bcd0f6a77e20c78632b64fe6ee57129556a531d
parent 1b789e1d50df4e7b98fa131fc29caf29a5f38bfa
Author: rsc <rsc>
Date: Fri, 24 Aug 2007 20:04:53 +0000
Add yield system call, for zombie test program (bad idea?).
Diffstat:
5 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/syscall.c b/syscall.c
@@ -105,6 +105,7 @@ extern int sys_sbrk(void);
extern int sys_unlink(void);
extern int sys_wait(void);
extern int sys_write(void);
+extern int sys_yield(void);
static int (*syscalls[])(void) = {
[SYS_chdir] sys_chdir,
@@ -126,6 +127,7 @@ static int (*syscalls[])(void) = {
[SYS_unlink] sys_unlink,
[SYS_wait] sys_wait,
[SYS_write] sys_write,
+[SYS_yield] sys_yield,
};
void
diff --git a/syscall.h b/syscall.h
@@ -18,3 +18,4 @@
#define SYS_dup 17
#define SYS_getpid 18
#define SYS_sbrk 19
+#define SYS_yield 20
diff --git a/sysproc.c b/sysproc.c
@@ -68,3 +68,10 @@ sys_sbrk(void)
setupsegs(cp);
return addr;
}
+
+int
+sys_yield(void)
+{
+ yield();
+ return 0;
+}
diff --git a/usys.S b/usys.S
@@ -27,3 +27,4 @@ STUB(chdir)
STUB(dup)
STUB(getpid)
STUB(sbrk)
+STUB(yield)
diff --git a/zombie.c b/zombie.c
@@ -7,6 +7,10 @@
int
main(void)
{
- fork();
+ int i;
+
+ if(fork() > 0)
+ for(i=0; i<10; i++)
+ yield();
exit();
}