Beispiel #1
0
void test_ipc_1_process(PROCESS self, PARAM param)
{
    //since we do not do a ipc or resgin, this process will not get executed
    PROCESS sender;
    int* data;
    print_all_processes(kernel_window);

    data = (int*) receive (&sender);
    print_all_processes(kernel_window);
}
Beispiel #2
0
void process_command(char* command)
{
    if (is_command(command, "ps")) {
	print_all_processes(&shell_wnd);
	return;
    }
    
    if (is_command(command, "clear")) {
	clear_window(&shell_wnd);
	return;
    }

    if (is_command(command, "pacman")) {
	run_pacman_app(&pacman_wnd);
	return;
    }

    if (is_command(command, "train")) {
	run_train_app(&train_wnd);
	return;
    }

	if (is_command(command, "macaddr")) {
		ne2k_print_mac(&ne2k_wnd, &ne2k_phy);
		return;
	}

    if (is_command(command, "go")) {
	set_train_speed("4");
	return;
    }
    
    if (is_command(command, "stop")) {
	set_train_speed("0");
	return;
    }
    
    if (is_command(command, "rev")) {
	set_train_speed("D");
	return;
    }
    
    if (is_command(command, "help")) {
	wprintf(&shell_wnd, "Commands:\n");
	wprintf(&shell_wnd, "  - help   show this help\n");
	wprintf(&shell_wnd, "  - clear  clear window\n");
	wprintf(&shell_wnd, "  - ps     show all processes\n");
	wprintf(&shell_wnd, "  - pacman start PacMan\n");
	wprintf(&shell_wnd, "  - go     make the train go\n");
	wprintf(&shell_wnd, "  - stop   make the train stop\n");
	wprintf(&shell_wnd, "  - rev    reverse train direction\n");
	wprintf(&shell_wnd, "  - train  start train application\n");
	wprintf(&shell_wnd, "  - macaddr  get the MAC address of your NE2K\n\n");
	return;
    }
    
    /* Room for more commands! */
    wprintf(&shell_wnd, "Syntax error! Type 'help' for help.\n");
}
Beispiel #3
0
void test_dispatcher_4_process_a(PROCESS self, PARAM param)
{
    kprintf("Process: %s\n\n", self->name);
    kprintf("Param: %d\n", param);
    print_all_processes(kernel_window);

    if (check_sum != 2)
       test_failed(22);

    check_sum += 1; 
    return_to_boot();
}
Beispiel #4
0
void test_dispatcher_5_process_d(PROCESS self, PARAM param)
{
    kprintf("Process: %s\n\n", self->name);
    print_all_processes(kernel_window);
    kprintf("\n");

    if (check_sum != 2)
        test_failed(23);

    check_sum += 1;
    resign();
    test_failed(24);
}
Beispiel #5
0
void f()
{
    PROCESS proc;
    
    proc = fork();
    if (proc == NULL) {
	kprintf("Child process\n");
	print_all_processes(kernel_window);
	kprintf("\n");
	// Give the parent a chance to run
	resign();
	test_failed(90);
    }
    // Give the parent a chance to run
    resign();
    kprintf("Parent process\n");
}
Beispiel #6
0
void test_ipc_6_sender_process_1(PROCESS self, PARAM param)
{
    PORT receiver_port = (PORT) param;
    int data = 11;

    check_process("Receiver", STATE_RECEIVE_BLOCKED, FALSE); 
    check_process("Sender 3", STATE_MESSAGE_BLOCKED, FALSE); 
    check_process("Sender 2", STATE_MESSAGE_BLOCKED, FALSE); 
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(test_result);
    }

    kprintf("%s: sending a message to port 1...", self->name);
    send(receiver_port, &data);
    test_failed(40);
}  
Beispiel #7
0
void test_ipc_6_sender_process_3(PROCESS self, PARAM param)
{
    PORT receiver_port = (PORT) param;
    int data = 33;

    check_process("Receiver", STATE_RECEIVE_BLOCKED, FALSE); 
    check_process("Sender 2", STATE_READY, TRUE); 
    check_process("Sender 1", STATE_READY, TRUE); 
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(test_result);
    }

    kprintf("%s: sending a message to port 3...\n", self->name);
    message(receiver_port, &data);
    test_failed(37);
}  
Beispiel #8
0
void test_ipc_3_sender_process(PROCESS self, PARAM param)
{
    PORT receiver_port = (PORT) param;
    int data1= 42;
    int data2= 24;

    check_sum += 1;
   
    /* 
     * send the first message
     */
 
    check_process("Receiver", STATE_RECEIVE_BLOCKED, FALSE);
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(48); 
    }
 
    kprintf("%s: sending a message using send()...\n",
	    self->name);
    send(receiver_port, &data1);

    if (check_sum != 3)
        test_failed(49);
    check_sum += 4;

    kprintf("%s: received = %d\n", self->name, data1);

    if (data1 != 11)
	test_failed(41);

    /* 
     * send the second message
     */
    kprintf("%s: sending a message using message()...\n",
	    self->name);
    message(receiver_port, &data2);
    if (check_sum != 15)
        test_failed(54); 

    kprintf("%s: woken up from message()\n", self->name);
    return_to_boot();
}
Beispiel #9
0
void test_dispatcher_4_process_c(PROCESS self, PARAM param)
{
    kprintf("\nProcess: %s\n\n", self->name);
    print_all_processes(kernel_window);
    kprintf("\n");

    if (check_sum != 0)
       test_failed(22);

    check_sum += 2;
    remove_ready_queue(active_proc);
    check_num_proc_on_ready_queue(2);
    if (test_result != 0)
       test_failed(test_result);

    resign();

    test_failed(26); 
}
/*
 * We don't explicitly create a new process, but because of init_process()
 * and init_dispatcher(), the main thread should be initialized as a process
 * and be added to the ready queue.  
 * This also test print_all_processes() 
 */
void test_create_process_1() 
{
    test_reset();
    print_all_processes(kernel_window);

    //check if the boot process is initialized correctly.
    check_create_process(boot_name, 1, NULL, 0);
    if (test_result != 0) 
       test_failed(test_result);

    check_num_of_pcb_entries(1);
    if (test_result != 0)
       test_failed(test_result);

    check_process(boot_name, STATE_READY, TRUE);
    if (test_result != 0)
       test_failed(test_result);

    check_num_proc_on_ready_queue(1);
    if (test_result != 0)
       test_failed(test_result);
}
Beispiel #11
0
void test_ipc_3_receiver_process(PROCESS self, PARAM param)
{
    PROCESS sender;
    int* data;

    check_sum = 0; 
   
    /*
     * receive the first message
     */
    check_process("Sender", STATE_READY, TRUE);
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(test_result);
    }

    kprintf("%s: receiving the first message...\n", self->name);
    data = (int*) receive (&sender);

    if (check_sum != 1)
	test_failed(47);

    kprintf("%s: received a message from %s, parameter = %d\n",
            self->name, sender->name, *data);
    check_sum += 2;

    check_process("Receiver", STATE_READY, TRUE);
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(53);
    }

    // Sender should now be REPLY_BLOCKED and off ready queue
    check_process("Sender", STATE_REPLY_BLOCKED, FALSE);
    if (test_result == 13) {
	print_all_processes(kernel_window);
	test_failed(50);
    }
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(51);
    }

    if (*data != 42)
	test_failed(41);

    *data = 11;
    reply(sender);

    /*
     * receive the sencond message
     */
 
    kprintf("%s: receiving the second message...\n", self->name);
    data = (int*) receive(&sender);
    if (check_sum != 7)
	test_failed(47);

    kprintf("%s: received a message from %s, parameter = %d\n",
            self->name, sender->name, *data);

    check_sum += 8;

    // Sender should now be STATE_READY and on ready queue
    check_process("Sender", STATE_READY, TRUE);
    if (test_result == 13) {
	print_all_processes(kernel_window);
	test_failed(55);
    }
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(57);
    }

    if (*data == 11)
	test_failed(44);
    if (*data != 24)
	test_failed(41);
    
    /* We do the third receive. Since there is no message pending,
     * this process will become RECEIVE_BLOCKED so that the sender
     * will continue to run. */
    data = (int*) receive(&sender);
    test_failed(47);
}
Beispiel #12
0
void print_process_func(int argc, char *argv)
{
	print_all_processes(shell_window);
}
Beispiel #13
0
void test_ipc_2_receiver_process (PROCESS self, PARAM param)
{
    PROCESS sender;
    int* data;

    /*
     * receiving the first message
     */
    check_sum += 1;

    // Sender should now be SEND_BLOCKED and off read queue
    check_process("Sender", STATE_SEND_BLOCKED, FALSE);
    if (test_result == 13) {
	print_all_processes(kernel_window);
	test_failed(35);
    }
    if (test_result == 14) {
	print_all_processes(kernel_window);
	test_failed(36);
    }

    kprintf("%s: receiving first message...\n", self->name);
    data = (int*) receive (&sender);

    // check the processes
    // Sender should now be REPLY_BLOCKED and off read queue
    check_process("Sender", STATE_REPLY_BLOCKED, FALSE);
    if (test_result == 13) {
	print_all_processes(kernel_window);
	test_failed(38);
    }
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(test_result);
    }

    kprintf("%s: received a message from %s, parameter = %d\n",
	   self->name, sender->name, *data);

    if (*data != 42)
	test_failed(41);
    *data = 11;

    kprintf("%s: replying to %s.\n", self->name, sender->name);

    reply(sender);

    if (check_sum != 3)
	test_failed(40);

    /*
     * receiving the second message
     */
    check_sum += 4;

    // Sender should now be MESSAGE_BLOCKED and off read queue
    check_process("Sender", STATE_MESSAGE_BLOCKED, FALSE);
    if (test_result == 13) {
	print_all_processes(kernel_window);
	test_failed(43);
    }
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(36);
    }

    kprintf("%s: receiving second message...\n", self->name);
    data = (int*) receive (&sender);

    if (*data == 11)
	test_failed(44); //the first message is received again

    // Sender should now be STATE_READY and on read queue
    check_process("Sender", STATE_READY, TRUE);
    if (test_result == 13) {
	print_all_processes(kernel_window);
	test_failed(45);
    }
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(46);
    }

    kprintf("%s: received a message from %s, parameter = %d\n",
	    self->name, sender->name, *data);

    if (*data != 24)
	test_failed(41);

    resign();
    test_failed(46);
}
Beispiel #14
0
void test_ipc_2_sender_process(PROCESS self, PARAM param)
{
    PORT receiver_port = (PORT) param;
    int data1 = 42;
    int data2 = 24;
    check_sum = 0;

    /*
    * send first message
    */

    check_process("Receiver", STATE_READY, TRUE);
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(test_result);
    }

    kprintf("%s: sending a message using send()...\n",
	    self->name);

    send(receiver_port, &data1);

    if (check_sum != 1)
       test_failed(37);

    kprintf("%s: received data = %d\n", self->name, data1);

    if (data1 != 11)
       test_failed(42);

    /*
     *  send second message
     */
    check_sum += 2;
    check_process("Sender", STATE_READY, TRUE);
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(39);
    }
    check_process("Receiver", STATE_READY, TRUE);
    if (test_result != 0) {
	print_all_processes(kernel_window);
	test_failed(test_result);
    }

    kprintf("%s: sending a message using message()...\n",
	    self->name);

    message(receiver_port, &data2);

    if (check_sum != 7)
	test_failed(37);

    kprintf("%s: woken up from message().\n", self->name);

    check_process("Receiver", STATE_READY, TRUE);
    if (test_result != 0)
	test_failed(test_result);

    check_sum += 8;
    return_to_boot();
}
Beispiel #15
0
void test_ipc_6_receiver(PROCESS self, PARAM param)
{
   PORT port1;
   PORT port2;
   PORT port3;
   PROCESS sender_1;
   PROCESS sender_2;
   PROCESS sender_3;
   int second_sender;
   int *data1;
   int *data2;
   int *data3;

   check_sum += 1;

   port1 = self->first_port;
   kprintf("%s: creating port 3 and port 2...\n", self->name);
   port3 = create_port();
   port2 = create_port(); 
   kprintf("%s: closing port 3 and port 2...\n", self->name);
   close_port(port2);
   close_port(port3);

   check_port(port1, self->name, TRUE);
   check_port(port2, self->name, FALSE);
   check_port(port3, self->name, FALSE);
   if (test_result != 0)
      test_failed(test_result);

   create_process(test_ipc_6_sender_process_3, 5, (PARAM) port3, "Sender 3");
   create_process(test_ipc_6_sender_process_2, 5, (PARAM) port2, "Sender 2");
   create_process(test_ipc_6_sender_process_1, 4, (PARAM) port1, "Sender 1");

   /*
    * receive first message
    */
   kprintf("%s: receiving first message...\n", self->name);
   data1 = (int*) receive(&sender_1);
   kprintf("\n%s: received a message from %s, parameter = %d.\n",
           self->name, sender_1->name, * data1);

   if (string_compare(sender_1->name, "Sender 2") == 1)
       test_failed(60);
   if (string_compare(sender_1->name, "Sender 3") == 1)
       test_failed(60);
   if (string_compare(sender_1->name, "Sender 1") != 1)
       test_failed(58);
    
   check_process("Sender 3", STATE_MESSAGE_BLOCKED, FALSE); 
   check_process("Sender 2", STATE_MESSAGE_BLOCKED, FALSE); 
   check_process("Sender 1", STATE_REPLY_BLOCKED, FALSE); 
   if (test_result != 0) {
       print_all_processes(kernel_window);
       test_failed(test_result);
   }
  
   /*
    * receive second message
    */
   kprintf("%s: opening port 2 and port 3...\n", self->name);
   open_port(port2);
   open_port(port3);

   check_sum += 2; // to check that first message is receiverd.

   kprintf("%s: receiving second message...\n", self->name);
   data2 = (int*) receive (&sender_2); 
   kprintf("%s: received a message from %s, parameter = %d.\n",
           self->name, sender_2->name, * data2);

   // second message can be from either sender 2 or sender 3, depending
   // on implementation of create_port(). 
   second_sender = 0;
   if (string_compare(sender_2->name, "Sender 2") == 1) {
       check_process("Sender 2", STATE_READY, TRUE); 
       check_process("Sender 3", STATE_MESSAGE_BLOCKED, FALSE); 
       second_sender = 2;
   } else if (string_compare(sender_2->name, "Sender 3") == 1) {
       check_process("Sender 3", STATE_READY, TRUE); 
       check_process("Sender 2", STATE_MESSAGE_BLOCKED, FALSE); 
       second_sender = 3;
   } else
       test_failed(44);
    
   check_sum += 4; // to check that second message is received.

   /* 
    * receive third message
    */
   kprintf("%s: receiving third message...\n", self->name);
   data3 = (int*) receive(&sender_3); 
   kprintf("%s: received a message from %s, parameter = %d.\n",
           self->name, sender_3->name, * data3);

   if (string_compare(sender_3->name, "Sender 1") == 1)
       test_failed(44);

   if (second_sender == 2) {
       if (string_compare(sender_3->name, "Sender 2") == 1)
	   test_failed(44);
       if (string_compare(sender_3->name, "Sender 3") != 1)
	   test_failed(58);
   } else {
       if (string_compare(sender_3->name, "Sender 3") == 1)
	   test_failed(44);
       if (string_compare(sender_3->name, "Sender 2") != 1)
	   test_failed(58);
   }
 
   check_process("Sender 3", STATE_READY, TRUE); 
   check_process("Sender 2", STATE_READY, TRUE); 
   check_process("Sender 1", STATE_REPLY_BLOCKED, FALSE); 
   if (test_result != 0) {
       print_all_processes(kernel_window);
       test_failed(test_result);
   }

   check_sum += 8; // to check that third message is received.

   return_to_boot();
}    
Beispiel #16
0
void test_fork_1()
{
    test_reset();
    f();
    print_all_processes(kernel_window);
}
Beispiel #17
0
int showProcessesCommand(char* param1, char* param2)
{
	print_all_processes(&shell_wnd);
	return 1;
}