tipoRespuesta* escribirPagina(t_list* listaDeHuecosUtilizados,int pidProceso,char* contenidoAEscribir,int dirLogicaDePagina,int tamanioDePagina, char* particion, t_log* logger, int retardoDeEscritura){ tipoRespuesta* respuestaASolicitudDeEscritura; char* textoALogear = string_new(); //buscarPIDEnListaDeHuecos tipoHuecoUtilizado* huecoDelProceso = buscarHuecoUtilizadoPorPID(listaDeHuecosUtilizados,pidProceso); //traducirDireccionLogicaAFisica int direccionFisicaEnParticion = traducirDireccionLogicaAFisica(huecoDelProceso,dirLogicaDePagina); //escribirEnParticion escribirBloqueMapeado(particion,contenidoAEscribir,direccionFisicaEnParticion,tamanioDePagina); respuestaASolicitudDeEscritura = crearTipoRespuesta(PERFECTO,OK_PAGINA_ESCRITA); sleep(retardoDeEscritura); string_append_with_format(&textoALogear,"Escritura realizada | PID: %d | Byte inicial: %d | Tamanio: %d | Contenido: %s",pidProceso,dirLogicaDePagina*tamanioDePagina,string_length(contenidoAEscribir),contenidoAEscribir); logearSeguimiento(textoALogear,logger); free(textoALogear); return respuestaASolicitudDeEscritura; }
tipoRespuesta* leerPagina(t_list* listaDeHuecosUtilizados,int pidProceso,int dirLogicaDePagina,int tamanioDePagina,char* particion, t_log* logger, int retardoDeLectura){ tipoRespuesta* respuestaASolicitudDeLectura; char* contenidoDePagina; char* textoALogear = string_new(); //buscarPIDEnListaDeHuecos tipoHuecoUtilizado* huecoDelProceso = buscarHuecoUtilizadoPorPID(listaDeHuecosUtilizados,pidProceso); //traducirDireccionLogicaEnFisica int direccionFisicaEnParticion = traducirDireccionLogicaAFisica(huecoDelProceso,dirLogicaDePagina); //direccionFisicaEnParticion es la posicion donde comienza la pagina en el archivo de particion //buscarEnContenidoEnParticion contenidoDePagina = string_duplicate(leerBloqueMapeado(particion,direccionFisicaEnParticion,tamanioDePagina)); //retornarContenidoDePagina respuestaASolicitudDeLectura = crearTipoRespuesta(PERFECTO,contenidoDePagina); sleep(retardoDeLectura); string_append_with_format(&textoALogear,"Lectura realizada | PID: %d | Byte inicial: %d | Tamanio: %d | Contenido: %s",pidProceso,dirLogicaDePagina*tamanioDePagina,string_length(contenidoDePagina),contenidoDePagina); logearSeguimiento(textoALogear,logger); free(textoALogear); free(contenidoDePagina); return respuestaASolicitudDeLectura; }
int ultimaPaginaEscrita(t_list* listaDeHuecosUtilizados){ tipoHuecoUtilizado* aux = list_get(listaDeHuecosUtilizados,list_size(listaDeHuecosUtilizados)-1); return traducirDireccionLogicaAFisica(aux,aux->cantidadDePaginasQueOcupa-1); }