void leer(void) { int* pid = recibirStream(socketAdministradorDeMemoria,sizeof(int)); int* numeroPagina = recibirStream(socketAdministradorDeMemoria,sizeof(int)); if (procesoSeEncuentraEnSwap(*pid)) { proceso proceso = obtenerProceso(*pid); if(*numeroPagina >= proceso.cantidadDePaginas) { printf( "La pagina %d no se encuentra en el proceso %d y no puede ser leida\n", *numeroPagina, *pid); int fracaso = 7; send(socketAdministradorDeMemoria, &fracaso, sizeof(int), 0); } else { int paginaALeer = proceso.comienzo + *numeroPagina; void* texto; logLectura(paginaALeer,proceso); texto = leerPagina(paginaALeer); int exito = 6; enviarStream(socketAdministradorDeMemoria,exito,swap_configuracion.TAMANIO_PAGINA,texto); free(texto); } } else { printf("Proceso %d no se encuentra en Swap y no puede ser leido\n", *pid); int fracaso = 7; send(socketAdministradorDeMemoria, &fracaso, sizeof(int), 0); } free(pid); free(numeroPagina); }
tipoRespuesta* ejecutarInstruccion(tipoInstruccion* instruccion,t_list* listaDeHuecosOcupados, t_list* listaDeHuecosLibres, tipoConfigSWAP* configuracion){ tipoRespuesta* respuesta; switch (instruccion->instruccion) { case INICIAR: respuesta = reservarEspacio(listaDeHuecosOcupados,listaDeHuecosLibres,instruccion->pid,instruccion->nroPagina,configuracion->cantidadDePaginas,configuracion->tamanioDePagina,configuracion->nombreDeSWAP); break; case LEER: respuesta = leerPagina(listaDeHuecosOcupados,instruccion->pid,instruccion->nroPagina,configuracion->tamanioDePagina,configuracion->nombreDeSWAP); break; case ESCRIBIR: respuesta = escribirPagina(listaDeHuecosOcupados,instruccion->pid,instruccion->texto,instruccion->nroPagina,configuracion->tamanioDePagina,configuracion->nombreDeSWAP); break; case FINALIZAR: respuesta = liberarEspacio(listaDeHuecosOcupados,listaDeHuecosLibres,instruccion->pid); break; } return respuesta; }
tipoRespuesta* ejecutarInstruccion(tipoInstruccion* instruccion,t_list* listaDeHuecosUtilizados,t_list* listaDeHuecosLibres,tipoConfigSWAP* configuracion, t_log* logger, bool* finalizarProceso){ tipoRespuesta* respuesta; switch (instruccion->instruccion) { case INICIAR: respuesta = reservarEspacio(listaDeHuecosUtilizados,listaDeHuecosLibres,instruccion->pid,instruccion->nroPagina,configuracion->cantidadDePaginas,configuracion->tamanioDePagina,configuracion->nombreDeSWAP,configuracion->retardoDeCompactacion, logger); break; case LEER: respuesta = leerPagina(listaDeHuecosUtilizados,instruccion->pid,instruccion->nroPagina,configuracion->tamanioDePagina,configuracion->nombreDeSWAP, logger,configuracion->retardoDeSWAP); break; case ESCRIBIR: respuesta = escribirPagina(listaDeHuecosUtilizados,instruccion->pid,instruccion->texto,instruccion->nroPagina,configuracion->tamanioDePagina,configuracion->nombreDeSWAP, logger,configuracion->retardoDeSWAP); break; case FINALIZAR: respuesta = liberarEspacio(listaDeHuecosUtilizados,listaDeHuecosLibres,instruccion->pid, configuracion->tamanioDePagina, logger,configuracion->nombreDeSWAP); break; case FINALIZAR_PROCESO: respuesta = finalizarProcesoSWAP(finalizarProceso); break; } return respuesta; }