xv6

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Msyscall.c | 2++
Msyscall.h | 1+
Msysproc.c | 7+++++++
Musys.S | 1+
Mzombie.c | 6+++++-
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(); }