Advertisement
Guest User

Untitled

a guest
Apr 25th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.74 KB | None | 0 0
  1. void swap_out(page_table* table, int index)
  2. {
  3.     table->entries[index].prev_state = table->entries[index].state;
  4.     table->entries[index].state = STATE_IN_SWAP;
  5.  
  6.     //mprotect(table->entries[index].start, w_get_page_size(), PROT_READ | PROT_WRITE);
  7.  
  8.     w_set_file_pointer(table->map.swap_handle, index * w_get_page_size());
  9.     memcpy(buffer, table->entries[index].start, w_get_page_size());
  10.     w_write_file(table->map.swap_handle, table->entries[index].start, w_get_page_size());
  11.  
  12. }
  13.  
  14.  
  15. if(tables[i].entries[page_no].state == STATE_NOT_ALLOC)
  16. {
  17.     if(tables[i].ram_offset < tables[i].frames)
  18.     {
  19.         //DIE(mprotect(tables[i].entries[page_no].start, w_get_page_size(), PROT_READ) < 0, "Mprotect");
  20.         char *buffer = malloc(w_get_page_size());
  21.         buffer = memset(buffer, 0, w_get_page_size());
  22.         char *p = mmap(tables[i].entries[page_no].start,
  23.                  w_get_page_size(),
  24.                  PROT_READ,
  25.                  MAP_SHARED | MAP_FIXED,
  26.                  tables[i].map.ram_handle,
  27.                  tables[i].ram_offset * w_get_page_size());
  28.         DIE((p == MAP_FAILED), "MOARTE CRUNTA");
  29.  
  30.         tables[i].entries[page_no].state = STATE_IN_RAM;       
  31.         tables[i].ram_offset++;
  32.     }
  33.     else
  34.     {
  35.         fprintf(stderr, "RAM IS FULL, WE REQUIRE SWAPPIN! %d %d\n", (int)tables[i].size, (int)tables[i].ram_offset);
  36.         int index = get_first_available_page(&tables[i]);
  37.         swap_out(&tables[i], index);
  38.         char *buffer = (char*)malloc(w_get_page_size());
  39.         memset(buffer, 0, w_get_page_size());
  40.         char *p = mmap(tables[i].entries[page_no].start,
  41.                  w_get_page_size(),
  42.                  PROT_READ,
  43.                  MAP_SHARED | MAP_FIXED,
  44.                  tables[i].map.ram_handle,
  45.                  tables[i].ram_offset * w_get_page_size());
  46.            
  47.         DIE((p == MAP_FAILED), "MOARTE CRUNTA");
  48.  
  49.         tables[i].entries[page_no].state = STATE_IN_RAM;       
  50.         tables[i].ram_offset++;    
  51.     }  
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement