Exemplo n.º 1
0
/*
 * This test tests the wait_for_interrupt() function. The boot process
 * creates another process. This process enters a loop. For
 * each interation it calls wait_for_interrupt (TIMER_IRQ) to cause
 * a short delay before the next interation.
 */
void isr_process(PROCESS self, PARAM param)
{
    int ticks;
    int i;
    unsigned char* screen_base;
    
    kprintf("Process: %s\n", self->name);
    kprintf("ABCDEF");

    /* screen_base points to the beginning of the string "ABCDEF" */
    screen_base = (unsigned char*) 0xb8000 + 4 * 80 * 2;
    i = 0;
    int j;
    for (j = 0; j < 30; j ++) {
	ticks = 3;
	while (ticks--)
	    wait_for_interrupt(TIMER_IRQ);
	*(screen_base + i * 2) = *(screen_base + i * 2) + 1;
	i++;
	if (i == 6)
	    i = 0;
        check_sum ++;
    }
    return_to_boot();
}
Exemplo n.º 2
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();
}
Exemplo n.º 3
0
void test_isr_2_process_2(PROCESS self, PARAM param)
{
    /* screen_offset points to the "Z" of process 2 */
    MEM_ADDR screen_offset = 0xb8000 + 5 * 160 + 2 * 11;

    while (42) {
        if (test_isr_2_check_sum == 80000)
	    return_to_boot();
        test_isr_2_check_sum ++;
        poke_b(screen_offset, peek_b(screen_offset) + 1);
    }
}
Exemplo n.º 4
0
void test_dispatcher_5_process_e(PROCESS self, PARAM param)
{
    kprintf("\nProcess: %s\n\n", self->name);
    if (check_sum != 0)
        test_failed(23);

    check_sum += 2;

    resign();
    kprintf("Back to %s", self->name);

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

    check_sum += 4;
    return_to_boot();
}
Exemplo n.º 5
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();
}
Exemplo n.º 6
0
void test_dispatcher_7_process_d(PROCESS self, PARAM param)
{
    kprintf("%s\n", self->name);
    if (check_sum != 3)
       test_failed(24);

    check_sum += 4;
    resign();
    kprintf("Back to process %s \n", self->name);
    if (check_sum != 15)
       test_failed(24);

    check_sum += 16;
    resign();
    kprintf("Back to process %s again\n\n", self->name);
    if (check_sum != 31)
       test_failed(24);
    
    check_sum += 32;
    return_to_boot();
}
Exemplo n.º 7
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();
}
Exemplo n.º 8
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();
}