int main( int argc, char *argv[] ) { // handle input if(argc!=5) { printf("use: virtmem <npages> <nframes> <rand|fifo|custom> <sort|scan|focus>\n"); return 1; } int npages = atoi(argv[1]); int nframes = atoi(argv[2]); char *page_replacement = argv[3]; const char *program = argv[4]; if (!strcmp(page_replacement,"rand")){ page_rep_choice = 0; } else if(!strcmp(page_replacement,"fifo")){ page_rep_choice = 1; } else if(!strcmp(page_replacement,"custom")){ page_rep_choice = 2; } else{ printf("Choose rand, fifo, or custum\n"); return 1; } // create new virtual disk with pointer to the disk object struct disk *disk = disk_open("myvirtualdisk",npages); if(!disk) { fprintf(stderr,"couldn't create virtual disk: %s\n",strerror(errno)); return 1; } // create page table with pointer to page table // includes virtual memory and physical memory struct page_table *pt = page_table_create( npages, nframes, page_fault_handler ); if(!pt) { fprintf(stderr,"couldn't create page table: %s\n",strerror(errno)); return 1; } // return pointer to start of virtual memory char *virtmem = page_table_get_virtmem(pt); // return pointer to start of physical memory char *physmem = page_table_get_physmem(pt); // calls page_fault_handler // call one of the algorithms if(!strcmp(program,"sort")) { sort_program(virtmem,npages*PAGE_SIZE); } else if(!strcmp(program,"scan")) { scan_program(virtmem,npages*PAGE_SIZE); } else if(!strcmp(program,"focus")) { focus_program(virtmem,npages*PAGE_SIZE); } else { fprintf(stderr,"unknown program: %s\n",argv[3]); } page_table_print(pt); // clean up page_table_delete(pt); disk_close(disk); return 0; }
int main( int argc, char *argv[] ) { if(argc!=5) { printf("use: virtmem <npages> <nframes> <rand|fifo|custom> <sort|scan|focus>\n"); return 1; } npages = atoi(argv[1]); nframes = atoi(argv[2]); const char *algorithm = argv[3]; const char *program = argv[4]; loaded_pages = malloc(sizeof(int) * nframes); int i; for(i = 0; i < nframes; i++) { /* indicate that there is no pages loaded yet */ loaded_pages[i] = -1; } disk = disk_open("myvirtualdisk",npages); if(!disk) { fprintf(stderr,"couldn't create virtual disk: %s\n",strerror(errno)); return 1; } struct page_table *pt = page_table_create( npages, nframes, page_fault_handler ); if(!pt) { fprintf(stderr,"couldn't create page table: %s\n",strerror(errno)); return 1; } char *virtmem = page_table_get_virtmem(pt); physmem = page_table_get_physmem(pt); if(!strcmp(algorithm, "rand")) { pageswap = 0; } else if(!strcmp(algorithm, "fifo")) { pageswap = 1; fifo_counter = 0; } else if(!strcmp(algorithm, "custom")) { pageswap = 2; fifo_counter = 0; clock = malloc(sizeof(int) * nframes); for(i = 0; i < nframes; i++) { clock[i] = 0; } } else if(!strcmp(algorithm, "custom2")) { pageswap = 3; clock = malloc(sizeof(int) * nframes); for(i = 0; i < nframes; i++) { clock[i] = 0; } } else { fprintf(stderr,"unknown algorithm: %s\n",argv[2]); } if(!strcmp(program,"sort")) { sort_program(virtmem,npages*PAGE_SIZE); } else if(!strcmp(program,"scan")) { scan_program(virtmem,npages*PAGE_SIZE); } else if(!strcmp(program,"focus")) { focus_program(virtmem,npages*PAGE_SIZE); } else { fprintf(stderr,"unknown program: %s\n",argv[3]); } printf("Faults: %d Reads: %d Writes: %d\n", fault_counter, read_count, write_count); page_table_delete(pt); disk_close(disk); return 0; }