kern
diff src/syscall.c @ 57:437360696883
I think we're done for now. two processes seem to be scheduled and switched just fine, fork seems to work (NO CoW YET!)
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Tue, 16 Aug 2011 03:26:53 +0300 |
parents | 0be4615594df |
children | 5b29b15c5412 |
line diff
1.1 --- a/src/syscall.c Mon Aug 15 06:17:58 2011 +0300 1.2 +++ b/src/syscall.c Tue Aug 16 03:26:53 2011 +0300 1.3 @@ -12,12 +12,16 @@ 1.4 static int sys_exit(int status); 1.5 static int sys_hello(void); 1.6 static int sys_sleep(int sec); 1.7 +static int sys_fork(void); 1.8 +static int sys_getpid(void); 1.9 1.10 void init_syscall(void) 1.11 { 1.12 sys_func[SYS_EXIT] = sys_exit; 1.13 sys_func[SYS_HELLO] = sys_hello; 1.14 sys_func[SYS_SLEEP] = sys_sleep; 1.15 + sys_func[SYS_FORK] = sys_fork; 1.16 + sys_func[SYS_GETPID] = sys_getpid; 1.17 1.18 interrupt(SYSCALL_INT, syscall); 1.19 } 1.20 @@ -56,8 +60,19 @@ 1.21 static int sys_sleep(int sec) 1.22 { 1.23 printf("process %d will sleep for %d seconds\n", get_current_pid(), sec); 1.24 - 1.25 - sleep(sec * 1000); 1.26 - 1.27 + sleep(sec * 1000); /* timer.c */ 1.28 return 0; 1.29 } 1.30 + 1.31 +static int sys_fork(void) 1.32 +{ 1.33 + printf("process %d is forking\n", get_current_pid()); 1.34 + return fork(); /* proc.c */ 1.35 +} 1.36 + 1.37 +static int sys_getpid(void) 1.38 +{ 1.39 + int pid = get_current_pid(); 1.40 + printf("process %d getpid\n", pid); 1.41 + return pid; 1.42 +}