Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* elje a que frame hay que hacer swap, algoritmo clock modificado*/
- frame_t* __find_victim_frame_and_lock_it(){
- log_info(logger, "Se busca un frame para hacer swap con 0 0");
- void __update_index(){
- i++;
- if(i==frame_number) i=0;
- log_info(logger, "INDEX CLOCK %d",i);
- }
- int number_of_trys = 0;
- while(1){
- while(number_of_trys != frame_number){
- log_info(logger, "checkeando Frame #%d por u:0 m:0",i);
- frame_t* frame = list_get(frames, i);
- page_t* p = __lock_frame_and_page(frame);
- log_warning(logger, "logre bloquiear frame y pagina para testeo %p", frame);
- if(frame->used == 0 && frame->modifyed==0){
- log_info(logger, "Este frame fue seleccionado para swap, %p", frame);
- __update_index();
- return frame;
- }
- sem_post(&frame->lock);
- if(p!=NULL) sem_post(&p->l);
- __update_index();
- number_of_trys++;
- }
- number_of_trys=0;
- log_info(logger, "Buso u:0 m:1, reemplazo u:1 => u:0");
- while(number_of_trys != frame_number){
- log_info(logger, "checkeando Frame #%d u:0 m:1, reemplazo u:1 => u:0",number_of_trys);
- frame_t* frame = list_get(frames, i);
- page_t* p = __lock_frame_and_page(frame);
- log_warning(logger, "logre bloquiear frame para testeo");
- if(frame->used == 0 && frame->modifyed==1){
- log_info(logger, "Este frame fue seleccionado para swap");
- __update_index();
- return frame;
- }else{
- frame->used = 0;
- }
- sem_post(&frame->lock);
- if(p!=NULL) sem_post(&p->l);
- __update_index();
- number_of_trys++;
- }
- number_of_trys = 0;
- while(number_of_trys != frame_number){
- log_info(logger, "checkeando Frame #%d por u:0 m:0",number_of_trys);
- frame_t* frame = list_get(frames, i);
- page_t* p = __lock_frame_and_page(frame);
- log_warning(logger, "logre bloquiear frame para testeo");
- if(frame->used == 0 && frame->modifyed==0){
- log_info(logger, "Este frame fue seleccionado para swap, %p", frame->pos);
- __update_index();
- return frame;
- }
- sem_post(&frame->lock);
- if(p!=NULL) sem_post(&p->l);
- __update_index();
- number_of_trys++;
- }
- number_of_trys=0;
- log_info(logger, "Buso u:0 m:1");
- while(number_of_trys != frame_number){
- //TODO escribier sobre archivo los cambios
- log_info(logger, "checkeando Frame #%d por u:0 m:1",i);
- frame_t* frame = list_get(frames, i);
- page_t* p = __lock_frame_and_page(frame);
- if(frame->used == 0 && frame->modifyed==1){
- log_info(logger, "Este frame fue seleccionado para swap");
- __update_index();
- return frame;
- }
- sem_post(&frame->lock);
- if(p!=NULL) sem_post(&p->l);
- __update_index();
- number_of_trys++;
- }
- }
- log_error(logger, "ERROR FATAL falla en clock modificado");
- exit(-1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement