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; }
void procesarEscritura(t_mensaje* detalle,sock_t* socketMemoria) { pidCondicion = detalle->PID; int32_t status; int32_t resultado; bool buscar = list_any_satisfy(espacioOcupado,validarMismoPid); resultado = buscar; if(buscar == 1) { escribirPagina(detalle->contenidoPagina,detalle->PID,detalle->NumeroDePagina); aumentarEscritura(detalle->PID); } else { log_error(SwapLog,"No existe el proceso %d en memoria",detalle->PID); } status = send(socketMemoria->fd, &resultado, sizeof(int32_t),0); /*chequea envío*/ if(!status) { printf("No se envió la cantidad de bytes a enviar luego\n"); } free(detalle->contenidoPagina); usleep(deSegundoAMicroSegundos(configuracion->retardo_swap)); }
void escribir() { int* pid = recibirStream(socketAdministradorDeMemoria,sizeof(int)); int* numeroPagina = recibirStream(socketAdministradorDeMemoria,sizeof(int)); void* texto = recibirStream(socketAdministradorDeMemoria, swap_configuracion.TAMANIO_PAGINA); 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 escrita\n", *numeroPagina, *pid); int fracaso = 7; send(socketAdministradorDeMemoria, &fracaso, sizeof(int), 0); } else { int paginaAEscribir = proceso.comienzo + *numeroPagina; logEscritura(paginaAEscribir,proceso.pid); escribirPagina(paginaAEscribir, texto); int exito = 6; send(socketAdministradorDeMemoria, &exito, sizeof(int), 0); } } else { printf("Proceso %d no se encuentra en Swap y no puede ser escrito\n", *pid); int fracaso = 7; send(socketAdministradorDeMemoria, &fracaso, sizeof(int), 0); } free(texto); free(pid); free(numeroPagina); }
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; }