void __stdio_init() { infd = open("/dev/input/keyboard", 0); if (infd < 0) _serial_print("Error opening keyboard device\n"); outfd = open("/dev/display/vga_text", 0); if (outfd < 0) _serial_print("Error opening keyboard device\n"); }
static int starter(void*) { for (;;) { atomic_add(&thread_count, 10); spawn_thread(vm_bang, "VM Bang", (void*) "1 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "2 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "3 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "4 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "5 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "6 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "7 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "8 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "9 ", 18); spawn_thread(vm_bang, "VM Bang", (void*) "10 ", 18); #if SWAP_OUT if (cnt-- == 0) { cnt = 20; // Swap in some booty pages for (int i = 0; i < 0x600000; i += PAGE_SIZE) { if (booty[i] != 0x24) _serial_print("swap in goofed"); } } #endif // wait for threads to die while (thread_count) sleep(20000); } return 0; }
static int vm_bang(void *str) { for (int i = 0; i < 10; i++) { uint *addr; int area = create_area("original area", (void**) &addr, 0, 0x2000, AREA_NOT_WIRED, USER_READ | USER_WRITE); if (area < 0) { _serial_print("error creating original area\n"); return 0; } unsigned var = rand(); *addr = var; uint *clone_addr; int clone = clone_area("clone area", (void**) &clone_addr, 0, USER_WRITE | USER_READ, area); if (clone < 0) { _serial_print("error creating clone area\n"); return 0; } if (*clone_addr != var) { _serial_print("clone failed to copy pages\n"); return 0; } addr += 1024; clone_addr += 1024; *clone_addr = var; if (*addr != var) { _serial_print("page failed failed to be propigated\n"); return 0; } for (int i = 0; i < 10; i++) resize_area(area, (i % 4) * PAGE_SIZE + PAGE_SIZE); delete_area(area); delete_area(clone); } printf("%s", (char*) str); atomic_add(&thread_count, -1); return 0; }
static int fp_worker(void*) { float a = 0.0; float b = 1.0; int update = 0; while (true) { b += 0.01; a = 2 * b; if (a != 2 * b) _serial_print("FP error\n"); if (update++ > 10000) { printf("."); update = 0; } } }