#include #include "defs.h" #include "disk.h" #include "minithread.h" #include "minimsg.h" #include "synch.h" void disk_handler(void* arg){ char* name_type; char* name_reply; disk_interrupt_arg_t* disk_interrupt = (disk_interrupt_arg_t*) arg; switch(disk_interrupt->request.type){ case DISK_RESET: name_type="RESET"; break; case DISK_SHUTDOWN: name_type="SHUTDOWN"; break; case DISK_READ: name_type="READ"; break; case DISK_WRITE: name_type="WRITE"; break; default: name_type="UNKNOWN"; } switch(disk_interrupt->reply){ case DISK_REPLY_OK: name_reply="OK"; break; case DISK_REPLY_FAILED: name_reply="FAILED"; break; case DISK_REPLY_ERROR: name_reply="ERROR"; break; case DISK_REPLY_CRASHED: name_reply="CRASHED"; break; default: name_reply="UNKNOWN"; } printf("Disk Interrupt: request %s for block %d has reply %s.\n", name_type, disk_interrupt->request.blocknum, name_reply); /* distroy the reply */ free(disk_interrupt); } int disk_main(void* arg){ disk_t* disk1; char buffer[DISK_BLOCK_SIZE]; int i; install_disk_handler(disk_handler); disk1 = (disk_t*) malloc(sizeof(disk_t)); disk_create(disk1, "disk1", 101, DISK_READWRITE); memset((void*)buffer, 'x', DISK_BLOCK_SIZE); for (i=0; i<100; i++){ disk_write_block(disk1, i, buffer); } /* disk_shutdown(disk1); */ for (;;); } void main(void) { crash_rate=.01; failure_rate=.1; reordering_rate=.5; minithread_system_initialize(disk_main,NULL); }