Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. int compactar(){
  2. int i,inicioAnterior, libre, cont;
  3. traductor_marco* procesoAMover;
  4.  
  5. int ordenarPorInicioDeMenorAMayor(traductor_marco* marco1, traductor_marco* marco2){
  6. return (marco1->inicio<marco2->inicio);
  7. }
  8. int proximoProceso(traductor_marco* proceso){
  9. return (proceso->inicio>=i);
  10. }
  11.  
  12. list_sort(tablaPaginas,(void*)ordenarPorInicioDeMenorAMayor);
  13. log_info(logs,"INICIANDO COMPACTACION...");
  14. usleep(datosSwap->retardoCompactacion*1000);
  15. for(i=0;i<datosSwap->cantidadPaginas;i++){
  16. if (!bitarray_test_bit(bitArray,i)){
  17. libre = i;
  18. // busque el proximo proceso ocupado a mover
  19. procesoAMover=list_find(tablaPaginas,(void*)proximoProceso);
  20. if (procesoAMover!=NULL){
  21. log_info(logs, ">>>El proceso a mover es: %d<<<", procesoAMover);
  22. inicioAnterior=procesoAMover->inicio;
  23. for (cont=0;cont<procesoAMover->paginas;cont++){
  24. bitarray_clean_bit(bitArray,inicioAnterior+cont); //porque ahora va a estar vacia
  25. bitarray_set_bit(bitArray,libre+cont); //Ahora va a estar ocupada
  26. }
  27. memcpy(archivoSwap+ libre * datosSwap->tamPagina, archivoSwap+inicioAnterior * datosSwap->tamPagina, procesoAMover->paginas * datosSwap->tamPagina); //Modifique los marcos, ahora copio los datos
  28. procesoAMover->inicio = libre;
  29. }
  30. else{
  31. i=datosSwap->cantidadPaginas;} //No hay mas procesos para mover => salgo del ciclo, no necesito buscar mas
  32. }
  33. }
  34. log_info(logs,"Compactacion realizada con exito!!\n");
  35. return 1;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement