Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void swap_out(page_table* table, int index)
- {
- table->entries[index].prev_state = table->entries[index].state;
- table->entries[index].state = STATE_IN_SWAP;
- //mprotect(table->entries[index].start, w_get_page_size(), PROT_READ | PROT_WRITE);
- w_set_file_pointer(table->map.swap_handle, index * w_get_page_size());
- memcpy(buffer, table->entries[index].start, w_get_page_size());
- w_write_file(table->map.swap_handle, table->entries[index].start, w_get_page_size());
- }
- if(tables[i].entries[page_no].state == STATE_NOT_ALLOC)
- {
- if(tables[i].ram_offset < tables[i].frames)
- {
- //DIE(mprotect(tables[i].entries[page_no].start, w_get_page_size(), PROT_READ) < 0, "Mprotect");
- char *buffer = malloc(w_get_page_size());
- buffer = memset(buffer, 0, w_get_page_size());
- char *p = mmap(tables[i].entries[page_no].start,
- w_get_page_size(),
- PROT_READ,
- MAP_SHARED | MAP_FIXED,
- tables[i].map.ram_handle,
- tables[i].ram_offset * w_get_page_size());
- DIE((p == MAP_FAILED), "MOARTE CRUNTA");
- tables[i].entries[page_no].state = STATE_IN_RAM;
- tables[i].ram_offset++;
- }
- else
- {
- fprintf(stderr, "RAM IS FULL, WE REQUIRE SWAPPIN! %d %d\n", (int)tables[i].size, (int)tables[i].ram_offset);
- int index = get_first_available_page(&tables[i]);
- swap_out(&tables[i], index);
- char *buffer = (char*)malloc(w_get_page_size());
- memset(buffer, 0, w_get_page_size());
- char *p = mmap(tables[i].entries[page_no].start,
- w_get_page_size(),
- PROT_READ,
- MAP_SHARED | MAP_FIXED,
- tables[i].map.ram_handle,
- tables[i].ram_offset * w_get_page_size());
- DIE((p == MAP_FAILED), "MOARTE CRUNTA");
- tables[i].entries[page_no].state = STATE_IN_RAM;
- tables[i].ram_offset++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement