Ejemplo n.º 1
0
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;

}