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