Ejemplo n.º 1
0
bool destruirPrograma( Programa * programa )
{
	bool matchearPrograma(Programa *nodoPrograma)
	{
		return nodoPrograma->pid == programa->pid;
	}

		list_remove_by_condition( programas, matchearPrograma);

		if( programa != NULL)
		{
			log_info( logger, "Destruyendo programa con pid: %d", programa->pid);

			borrarSegmento( programa->stack );
			borrarSegmento( programa->script );

			if(programa->etiquetas != NULL)
			borrarSegmento( programa->etiquetas );

			borrarSegmento( programa->instrucciones );

			free( programa );

			return true;
		}else{
			log_error( logger, "El programa con pid: %d no se ha podido destruir", programa->pid);
			return false;
		}
}
void operacionesConSegmentos() {

	char operacion;

	printf("¿Que operacion desea realizar?\n");
	printf("a - Solicitar una posicion de memoria\n");
	printf("b - Escribir una posicion de memoria\n");
	printf("c - Crear un Segmento\n");
	printf("d - Destruir un Segmento\n");

	operacion = getchar();
	while (getchar() != '\n')
		;

	switch (operacion) {

	case 'a':
		requisitosOperacionSegmento(operacion);
		break;
	case 'b':
		requisitosOperacionSegmento(operacion);
		break;
	case 'c':
		printf("Ingrese el tamanio del segmento a crear\n");
		uint32_t tamanio;
		scanf("%d", &tamanio);
		while (getchar() != '\n')
			;
		if(tamanio > memoriaLibre()){
			printf("El tamaño solicitado excede el espacio libre en memoria");
		}else{
			crearSegmento(tamanio);

		}

		break;

	case 'd':
		printSegmentos( tabla_segmentos, PorCONSOLA);
		printf("Ingrese el ID del segmento a destruir");
		uint32_t idSeg;

		scanf("%d", &idSeg);
		while (getchar() != '\n');
		pthread_rwlock_wrlock(&lockEscrituraLectura);
		Segmento * segmento = buscarSegmentoEnTabla( idSeg);
		borrarSegmento( segmento);

		pthread_rwlock_unlock(&lockEscrituraLectura);
		break;

	default:
		printf("El comando ingresado es invalido\n");
	}

}