Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.43 KB | None | 0 0
  1.  
  2. /* elje a que frame hay que hacer swap, algoritmo clock modificado*/
  3. frame_t* __find_victim_frame_and_lock_it(){
  4.    log_info(logger, "Se busca un frame para hacer swap con 0 0");
  5.  
  6.     void __update_index(){
  7.         i++;
  8.         if(i==frame_number) i=0;
  9.         log_info(logger, "INDEX CLOCK %d",i);
  10.     }
  11.  
  12.  
  13.     int number_of_trys = 0;
  14.     while(1){
  15.     while(number_of_trys != frame_number){
  16.             log_info(logger, "checkeando Frame #%d por u:0 m:0",i);
  17.  
  18.             frame_t* frame = list_get(frames, i);
  19.  
  20.             page_t* p =  __lock_frame_and_page(frame);
  21.             log_warning(logger, "logre bloquiear frame y pagina para testeo %p", frame);
  22.  
  23.             if(frame->used == 0 && frame->modifyed==0){
  24.                 log_info(logger, "Este frame fue seleccionado para swap, %p", frame);
  25.                 __update_index();
  26.                 return frame;
  27.             }
  28.             sem_post(&frame->lock);
  29.             if(p!=NULL) sem_post(&p->l);
  30.  
  31.             __update_index();
  32.             number_of_trys++;
  33.         }
  34.             number_of_trys=0;
  35.  
  36.         log_info(logger, "Buso u:0 m:1, reemplazo u:1 => u:0");
  37.  
  38.         while(number_of_trys != frame_number){
  39.             log_info(logger, "checkeando Frame #%d u:0 m:1, reemplazo u:1 => u:0",number_of_trys);
  40.             frame_t* frame = list_get(frames, i);
  41.             page_t* p =  __lock_frame_and_page(frame);
  42.             log_warning(logger, "logre bloquiear frame para testeo");
  43.  
  44.             if(frame->used == 0 && frame->modifyed==1){
  45.                 log_info(logger, "Este frame fue seleccionado para swap");
  46.                 __update_index();
  47.                 return frame;
  48.             }else{
  49.                 frame->used = 0;
  50.             }
  51.  
  52.             sem_post(&frame->lock);
  53.             if(p!=NULL) sem_post(&p->l);
  54.  
  55.             __update_index();
  56.             number_of_trys++;
  57.         }
  58.         number_of_trys = 0;
  59.  
  60.             while(number_of_trys != frame_number){
  61.                 log_info(logger, "checkeando Frame #%d por u:0 m:0",number_of_trys);
  62.  
  63.                 frame_t* frame = list_get(frames, i);
  64.                 page_t* p =  __lock_frame_and_page(frame);
  65.                 log_warning(logger, "logre bloquiear frame para testeo");
  66.  
  67.                 if(frame->used == 0 && frame->modifyed==0){
  68.                     log_info(logger, "Este frame fue seleccionado para swap, %p", frame->pos);
  69.                     __update_index();
  70.                     return frame;
  71.             }
  72.             sem_post(&frame->lock);
  73.             if(p!=NULL) sem_post(&p->l);
  74.  
  75.             __update_index();
  76.             number_of_trys++;
  77.         }
  78.         number_of_trys=0;
  79.  
  80.         log_info(logger, "Buso u:0 m:1");
  81.  
  82.         while(number_of_trys != frame_number){
  83.             //TODO escribier sobre archivo los cambios
  84.             log_info(logger, "checkeando Frame #%d por u:0 m:1",i);
  85.             frame_t* frame = list_get(frames, i);
  86.             page_t* p =  __lock_frame_and_page(frame);
  87.  
  88.             if(frame->used == 0 && frame->modifyed==1){
  89.                 log_info(logger, "Este frame fue seleccionado para swap");
  90.                 __update_index();
  91.  
  92.                 return frame;
  93.             }
  94.            
  95.             sem_post(&frame->lock);
  96.             if(p!=NULL) sem_post(&p->l);
  97.             __update_index();
  98.             number_of_trys++;
  99.         }
  100.     }
  101.  
  102.  
  103.     log_error(logger, "ERROR FATAL falla en clock modificado");
  104.     exit(-1);
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement