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); }
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"); }
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(); }
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); }
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"); }
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); }
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); }
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(); }
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); }
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); }
void print_process_func(int argc, char *argv) { print_all_processes(shell_window); }
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); }
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(); }
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(); }
void test_fork_1() { test_reset(); f(); print_all_processes(kernel_window); }
int showProcessesCommand(char* param1, char* param2) { print_all_processes(&shell_wnd); return 1; }