From 7c13afa56dfd871cda6f5adf3a0dd10b4e6c2611 Mon Sep 17 00:00:00 2001 From: alvaro Date: Fri, 20 Nov 2020 15:54:14 +0100 Subject: [PATCH 01/23] feature: added main files --- camion.c | 13 +++++++++++++ coche.c | 13 +++++++++++++ hostfile.config | 1 + orquestador_parking.c | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 camion.c create mode 100644 coche.c create mode 100644 hostfile.config create mode 100644 orquestador_parking.c diff --git a/camion.c b/camion.c new file mode 100644 index 0000000..acacf1a --- /dev/null +++ b/camion.c @@ -0,0 +1,13 @@ +// SLAVE PROCESS + +#include +#include + + +/* + Un camion ocupa 2 espacios en el parking +*/ + +// Variables finales +int ESPACIO = 2; + diff --git a/coche.c b/coche.c new file mode 100644 index 0000000..5371dd5 --- /dev/null +++ b/coche.c @@ -0,0 +1,13 @@ +// SLAVE PROCESS + +#include +#include + + +/* + Un coche ocupa 1 espacio en el parking +*/ + +// Variables finales +int ESPACIO = 1; + diff --git a/hostfile.config b/hostfile.config new file mode 100644 index 0000000..afc25a1 --- /dev/null +++ b/hostfile.config @@ -0,0 +1 @@ +localhost slots=4 \ No newline at end of file diff --git a/orquestador_parking.c b/orquestador_parking.c new file mode 100644 index 0000000..b5efa6b --- /dev/null +++ b/orquestador_parking.c @@ -0,0 +1,38 @@ +// MASTER PROCESS + +// C +#include +#include +#include + +// MPI +#include + +// LOCAL + + +/* + Controlador del parking: + - Salida, mayor prioridad + - Entrada, menor prioridad + - Asignador de plaza + Definicion de variables de: + - Plantas + - Plazas por planta + Tiempo de espera dentro del parking aleatorio -> (sleep()) +*/ + + +int main(int argc, char* argv[]){ + // Declaracion de variables antes de iniciar + + // Inicializacion + MPI_Init(&argc, &argv); + + // Argumentos pasados + + // Programa principal + + // Fin + MPI_Finalize(); +} \ No newline at end of file From 08bcdcd71aab1b0d8d2129197eb96450dd0a3ae4 Mon Sep 17 00:00:00 2001 From: alvaro Date: Fri, 20 Nov 2020 17:11:29 +0100 Subject: [PATCH 02/23] feature: in control parking --- orquestador_parking.c | 159 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 146 insertions(+), 13 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index b5efa6b..24e1e70 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -1,16 +1,5 @@ // MASTER PROCESS -// C -#include -#include -#include - -// MPI -#include - -// LOCAL - - /* Controlador del parking: - Salida, mayor prioridad @@ -22,17 +11,161 @@ Tiempo de espera dentro del parking aleatorio -> (sleep()) */ +// C +#include +#include +#include + +// MPI +#include + +// LOCAL + + +// Funciones +void imprime_plazas(int plantas, int plazas_planta, int ** parking); +int** init_parking(int plantas, int plazas_planta); +int* asigna_plaza_coche(int *** parking, int id); +int* asigna_plaza_camion(int *** parking, int id); int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar + int plazas = strtol(argv[1], NULL, 10); + int plantas = strtol(argv[2], NULL, 10); + + printf("Plantas: %d, con %d plazas por planta.\n", plantas, plazas); + + int ** parking = init_parking(plantas, plazas); + + MPI_Status status; - // Inicializacion + int aparcado; + + // Inicializacion MPI MPI_Init(&argc, &argv); // Argumentos pasados - + int recibido[3]; // [id hilo][operacion][tipo de vehiculo] + + MPI_Barrier(MPI_COMM_WORLD); + // Programa principal + while(1){ + MPI_Recv(recibido, 3, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); + + printf("Vehiculo: %d. Entrar=0/Salir=1, operacion: %d. Coche=0/Camion=0, tipo: %d\n", recibido[0], recibido[1], recibido[2]); + + // Realizar comparaciones necesarias, primero tipo de operacion, despues tipo de vehiculo. + if(recibido[1] == 0){ // Entrada + if(recibido[2] == 0) { // Coche + int asignado_coche[2]; + asignado_coche = asigna_plaza_coche(&parking, recibido[0]); + if(asignado_coche[0] != -1){ // Se ha asignado + printf("Coche %d aparcado en la planta %d, en la plaza %d.\n", recibido[0], asignado_coche[0], asignado_coche[1]); + aparcado = 1; + MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); + aparcado = 0; + } else if (asignado_coche[0] == -1){ // No se ha asigando + printf("Coche %d no ha podido aparcar.\n", recibido[0]); + MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); + } + } else if (recibido[2] == 1) { // Camion + int asignado_camion[4]; + asignado_camion = asigna_plaza_camion(&parking, recibido[0]); + if(asignado_camion[0] != -1){ // Se ha asignado + printf("Camion %d aparcado en la planta %d, en las plazas %d y %d.\n", recibido[0], asignado_camion[0], asignado_camion[1], asignado_camion[3]); + aparcado = 1; + MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); + aparcado=0 + } else if (asignado_camion[0] == -1){ // No se ha asigando + printf("Camion %d no ha podido aparcar.\n", recibido[0]); + MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); + } + } + } else if(recibido[1] == 1) { // Salida + if(recibido[2] == 0) { // Coche + + } else if (recibido[2] == 1) { // Camion + + } + } + } // Fin MPI_Finalize(); +} + +void imprime_plazas(int plantas, int plazas_planta, int ** parking){ + printf("Estado actual del parking: \n"); + int i, j; + for(i=0; i < plantas; i++){ + printf("-> Planta %d: ", i); + for(j=0; j < plazas_planta; j++){ + printf("[%d]", parking[i][j]); + } + printf("\n"); + } +} + +int** init_parking(int plantas, int plazas_planta){ + int** parking; + int i, j; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas_planta; j++){ + parking[i][j] = 0; // 0 sera libre y 1 ocupado + } + } + return parking; +} + +int* asigna_plaza_coche(int *** parking, int id){ + int i, j; + int posicion[2]; // [planta][plaza] + posicion[0] = -1; + posicion[1] = -1; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas_planta; j++){ + if(parking[i][j] == 0){ + // Aqui somos capaces de asignar plaza + parking[i][j] = id; + + posicion[0] = i; + posicion[1] = j; + + return posicion; // Se pudo asignar + } + } + } + return posicion; // No se pudo asignar +} + +int* asigna_plaza_camion(int *** parking, int id){ + int i, j, k; + int posicion[4]; // [planta][plaza][planta][plaza] + posicion[0] = -1; + posicion[1] = -1; + posicion[2] = -1; + posicion[3] = -1; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas_planta; j++){ + k = j; + k++; + if(k < plazas_planta){ // Un camion debe de aparcar en dos huecos contigos + if(parking[i][j] == 0 && parking[i][k] == 0){ + parking[i][j] = id; + parking[i][j] = id; + + posicion[0] = i; + posicion[1] = j; + posicion[2] = i; + posicion[3] = k; + + return posicion; // Se pudo asignar + } + } else { + k = 0; + } + } + } + return posicion; // No se pudo asignar } \ No newline at end of file From 7f9d2afbd023ceadf457416d5d7172e80bff322a Mon Sep 17 00:00:00 2001 From: alvaro Date: Fri, 20 Nov 2020 17:15:44 +0100 Subject: [PATCH 03/23] fix: variables in functions --- orquestador_parking.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index 24e1e70..284e98d 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -25,8 +25,8 @@ // Funciones void imprime_plazas(int plantas, int plazas_planta, int ** parking); int** init_parking(int plantas, int plazas_planta); -int* asigna_plaza_coche(int *** parking, int id); -int* asigna_plaza_camion(int *** parking, int id); +int* asigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id); +int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id); int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar @@ -59,7 +59,7 @@ int main(int argc, char* argv[]){ if(recibido[1] == 0){ // Entrada if(recibido[2] == 0) { // Coche int asignado_coche[2]; - asignado_coche = asigna_plaza_coche(&parking, recibido[0]); + asignado_coche = asigna_plaza_coche(&parking, plazas, plantas, recibido[0]); if(asignado_coche[0] != -1){ // Se ha asignado printf("Coche %d aparcado en la planta %d, en la plaza %d.\n", recibido[0], asignado_coche[0], asignado_coche[1]); aparcado = 1; @@ -71,7 +71,7 @@ int main(int argc, char* argv[]){ } } else if (recibido[2] == 1) { // Camion int asignado_camion[4]; - asignado_camion = asigna_plaza_camion(&parking, recibido[0]); + asignado_camion = asigna_plaza_camion(&parking, plazas, plantas, recibido[0]); if(asignado_camion[0] != -1){ // Se ha asignado printf("Camion %d aparcado en la planta %d, en las plazas %d y %d.\n", recibido[0], asignado_camion[0], asignado_camion[1], asignado_camion[3]); aparcado = 1; @@ -118,7 +118,7 @@ int** init_parking(int plantas, int plazas_planta){ return parking; } -int* asigna_plaza_coche(int *** parking, int id){ +int* asigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id){ int i, j; int posicion[2]; // [planta][plaza] posicion[0] = -1; @@ -139,7 +139,7 @@ int* asigna_plaza_coche(int *** parking, int id){ return posicion; // No se pudo asignar } -int* asigna_plaza_camion(int *** parking, int id){ +int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id){ int i, j, k; int posicion[4]; // [planta][plaza][planta][plaza] posicion[0] = -1; From 9314a5c24e924f0da74af4106bbeb847d472475c Mon Sep 17 00:00:00 2001 From: alvaro Date: Fri, 20 Nov 2020 17:22:43 +0100 Subject: [PATCH 04/23] feature: delete vehicles from parking functions --- orquestador_parking.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/orquestador_parking.c b/orquestador_parking.c index 284e98d..c65f018 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -27,6 +27,8 @@ void imprime_plazas(int plantas, int plazas_planta, int ** parking); int** init_parking(int plantas, int plazas_planta); int* asigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id); int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id); +int desasigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id); +int desasigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id); int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar @@ -41,6 +43,8 @@ int main(int argc, char* argv[]){ int aparcado; + imprime_plazas(plantas, plazas, parking); + // Inicializacion MPI MPI_Init(&argc, &argv); @@ -168,4 +172,14 @@ int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id } } return posicion; // No se pudo asignar +} + +int desasigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id){ + + return -1; +} + +int desasigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id){ + + return -1; } \ No newline at end of file From 16788fa0af1a771483a955852eae235a2ef9f693 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 09:51:10 +0100 Subject: [PATCH 05/23] feature: vahicle exits --- orquestador_parking.c | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index c65f018..49358c7 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -23,7 +23,7 @@ // Funciones -void imprime_plazas(int plantas, int plazas_planta, int ** parking); +void imprime_plazas(int plantas, int plazas_planta, int *** parking); int** init_parking(int plantas, int plazas_planta); int* asigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id); int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id); @@ -88,18 +88,20 @@ int main(int argc, char* argv[]){ } } else if(recibido[1] == 1) { // Salida if(recibido[2] == 0) { // Coche - + int salida = desasigna_plaza_coche(&parking, plantas, plazas, recibido[0]); // salida = 0 -> correcto, EOC -> error } else if (recibido[2] == 1) { // Camion - + int salida = desasigna_plaza_camion(&parking, plantas, plazas, recibido[0]); // salida = 0 -> correcto, EOC -> error } } + imprime_plazas(plantas, plazas, &parking); + sleep(1); } // Fin MPI_Finalize(); } -void imprime_plazas(int plantas, int plazas_planta, int ** parking){ +void imprime_plazas(int plantas, int plazas_planta, int *** parking){ printf("Estado actual del parking: \n"); int i, j; for(i=0; i < plantas; i++){ @@ -116,7 +118,7 @@ int** init_parking(int plantas, int plazas_planta){ int i, j; for(i=0; i < plantas; i++){ for(j=0; j < plazas_planta; j++){ - parking[i][j] = 0; // 0 sera libre y 1 ocupado + parking[i][j] = 0; // 0 sera libre y cualquier otro numero aparcado [id] } } return parking; @@ -175,11 +177,32 @@ int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id } int desasigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id){ - - return -1; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas_planta; j++){ + if(parking[i][j] == id) { + parking[i][j] = 0; + printf("Coche %d dejando la plaza %d en la planta %d.\n", id, j, i); + return 0; // Encontrado + } + } + } + return -1; // No encontrado } int desasigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id){ - - return -1; + int k = 0; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas_planta; j++){ + k = j+1; + if(parking[i][j] == id && parking[i][j] == k){ + parking[i][j] = 0; + parking[i][k] = 0; + printf("Camion %d dejando las plazas %d y %d en la planta %d.\n", id, j, k, i); + return 0; // Encontrado + } else { + k = 0; + } + } + } + return -1; // No encontrado } \ No newline at end of file From 7988834771e5ed4ae14b5e221cc750a3a3f8e221 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 09:55:16 +0100 Subject: [PATCH 06/23] feature: vehicle exits --- orquestador_parking.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index 49358c7..cd82cf8 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -94,9 +94,8 @@ int main(int argc, char* argv[]){ } } imprime_plazas(plantas, plazas, &parking); - sleep(1); + sleep(1); // Para evitar mucha repeticion de imprimir el parking } - // Fin MPI_Finalize(); } From 9b8dc87d588fca41b54492ccb56c258c7a2f8f38 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 09:55:53 +0100 Subject: [PATCH 07/23] fix: introduced main function both slave process --- camion.c | 5 +++-- coche.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/camion.c b/camion.c index acacf1a..6536942 100644 --- a/camion.c +++ b/camion.c @@ -8,6 +8,7 @@ Un camion ocupa 2 espacios en el parking */ -// Variables finales -int ESPACIO = 2; +int main(int argc, char* argv[]){ + return 0; +} diff --git a/coche.c b/coche.c index 5371dd5..a609690 100644 --- a/coche.c +++ b/coche.c @@ -8,6 +8,7 @@ Un coche ocupa 1 espacio en el parking */ -// Variables finales -int ESPACIO = 1; +int main(int argc, char* argv[]){ + return 0; +} From 378cef70129c65f2139756f6b4e689f6a6e59483 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 10:26:03 +0100 Subject: [PATCH 08/23] fix: comments --- orquestador_parking.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index cd82cf8..468fc69 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -60,8 +60,8 @@ int main(int argc, char* argv[]){ printf("Vehiculo: %d. Entrar=0/Salir=1, operacion: %d. Coche=0/Camion=0, tipo: %d\n", recibido[0], recibido[1], recibido[2]); // Realizar comparaciones necesarias, primero tipo de operacion, despues tipo de vehiculo. - if(recibido[1] == 0){ // Entrada - if(recibido[2] == 0) { // Coche + if(recibido[1] == 0){ // Quiero entrar + if(recibido[2] == 0) { // Soy un coche int asignado_coche[2]; asignado_coche = asigna_plaza_coche(&parking, plazas, plantas, recibido[0]); if(asignado_coche[0] != -1){ // Se ha asignado @@ -73,7 +73,7 @@ int main(int argc, char* argv[]){ printf("Coche %d no ha podido aparcar.\n", recibido[0]); MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } - } else if (recibido[2] == 1) { // Camion + } else if (recibido[2] == 1) { // Soy un camion int asignado_camion[4]; asignado_camion = asigna_plaza_camion(&parking, plazas, plantas, recibido[0]); if(asignado_camion[0] != -1){ // Se ha asignado @@ -86,15 +86,14 @@ int main(int argc, char* argv[]){ MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } } - } else if(recibido[1] == 1) { // Salida - if(recibido[2] == 0) { // Coche + } else if(recibido[1] == 1) { // Quiero salir + if(recibido[2] == 0) { // Soy un coche int salida = desasigna_plaza_coche(&parking, plantas, plazas, recibido[0]); // salida = 0 -> correcto, EOC -> error - } else if (recibido[2] == 1) { // Camion + } else if (recibido[2] == 1) { // Soy un camion int salida = desasigna_plaza_camion(&parking, plantas, plazas, recibido[0]); // salida = 0 -> correcto, EOC -> error } } imprime_plazas(plantas, plazas, &parking); - sleep(1); // Para evitar mucha repeticion de imprimir el parking } // Fin MPI_Finalize(); From 2620f626f6facce420157f8a3e86dd186769f1e2 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 10:37:34 +0100 Subject: [PATCH 09/23] feature: main car idea --- coche.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/coche.c b/coche.c index a609690..dca8a31 100644 --- a/coche.c +++ b/coche.c @@ -6,9 +6,25 @@ /* Un coche ocupa 1 espacio en el parking + Necesito: + - Id del proceso o algo parecido que lo identifique + - Operacion a realizar, primero sera entrada, luego salida + - Tipo de vehiculo, en este caso no cambiara -> coche */ int main(int argc, char* argv[]){ + // Declaracion de variables antes de iniciar + int recibido; + int enviado[3]; // [id hilo][operacion][tipo de vehiculo] + MPI_Status status; - return 0; + // Inicializacion MPI + MPI_Init(&argc, &argv); + + MPI_Barrier(MPI_COMM_WORLD); + + // TODO + + // Fin + MPI_Finalize(); } From 72f6a3575b4b34cdb6df930c1341e6bcc2845552 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 10:38:17 +0100 Subject: [PATCH 10/23] feature: main car idea --- coche.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coche.c b/coche.c index dca8a31..728750f 100644 --- a/coche.c +++ b/coche.c @@ -14,7 +14,7 @@ int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar - int recibido; + int recibido; // Sera si se ha aparcado o no int enviado[3]; // [id hilo][operacion][tipo de vehiculo] MPI_Status status; From cc5aecf61a44c1016cf1fa7285c5f4304639ed4d Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 10:55:58 +0100 Subject: [PATCH 11/23] fix: comment refractor --- orquestador_parking.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index 468fc69..f051a73 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -2,13 +2,11 @@ /* Controlador del parking: - - Salida, mayor prioridad - - Entrada, menor prioridad - Asignador de plaza Definicion de variables de: - Plantas - Plazas por planta - Tiempo de espera dentro del parking aleatorio -> (sleep()) + Tiempo de espera dentro del parking aleatorio -> (sleep()) -> en cada proceso SLAVE */ // C @@ -94,6 +92,7 @@ int main(int argc, char* argv[]){ } } imprime_plazas(plantas, plazas, &parking); + sleep(1); // Para evitar mucha repeticion de imprimir el parking } // Fin MPI_Finalize(); From 0fc477f8e2d8f7e14effddd263af79d6dc8ecade Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 11:31:15 +0100 Subject: [PATCH 12/23] feature: car and truck operations --- camion.c | 44 +++++++++++++++++++++++++++++++++++++++++++- coche.c | 32 +++++++++++++++++++++++++++++--- 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/camion.c b/camion.c index 6536942..341501b 100644 --- a/camion.c +++ b/camion.c @@ -1,14 +1,56 @@ // SLAVE PROCESS +// C #include + +// MPI #include /* Un camion ocupa 2 espacios en el parking + Necesito: + - Id del proceso o algo parecido que lo identifique + - Operacion a realizar, primero sera entrada, luego salida + - Tipo de vehiculo, en este caso no cambiara -> camion */ int main(int argc, char* argv[]){ + // Declaracion de variables antes de iniciar + int recibido = -1; // Sera si se ha aparcado o no + int enviado[3]; // [id hilo][operacion][tipo de vehiculo] + + // Inicializacion MPI + MPI_Init(&argc, &argv); + + MPI_Barrier(MPI_COMM_WORLD); + + enviado[0] = MPI_Comm_rank(MPI_COMM_WORLD); // Sera el id + enviado[1] = 0; // 0 = aparcar, 1 = salir. Se deja en 0 ya que primero siempre se aparca + enviado[2] = 1; // 0 = coche, 1 = camion, siempre coche en este fichero + + while(1){ + // Pedir plaza + printf("Camion %d quiere aparcar...", enviado[0]); + while(recibido == -1){ + MPI_Send(enviado, 3, MPI_INT, 0, 0, MPI_COMM_WORLD); + MPI_Recv(&recibido, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); + } + printf("Camion %d aparcado", enviado[0]); + // Cambio de variables + enviado[1] = 1; // Aparcado + // Esperar en el parking + sleep(5); + // Pedir salir + printf("Camion %d quiere salir...", enviado[0]); + MPI_Send(enviado, 3, MPI_INT, 0, 0, MPI_COMM_WORLD); + // Cambio variables + enviado[1] = 0; + recibido = -1; // Cambiado a mano ya que al salir del parking el orquestador no envia nada, TODO mas adelante + } + + MPI_Barrier(MPI_COMM_WORLD); - return 0; + // Fin + MPI_Finalize(); } diff --git a/coche.c b/coche.c index 728750f..98a2792 100644 --- a/coche.c +++ b/coche.c @@ -1,6 +1,9 @@ // SLAVE PROCESS +// C #include + +// MPI #include @@ -14,16 +17,39 @@ int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar - int recibido; // Sera si se ha aparcado o no + int recibido = -1; // Sera si se ha aparcado o no int enviado[3]; // [id hilo][operacion][tipo de vehiculo] - MPI_Status status; // Inicializacion MPI MPI_Init(&argc, &argv); MPI_Barrier(MPI_COMM_WORLD); - // TODO + enviado[0] = MPI_Comm_rank(MPI_COMM_WORLD); // Sera el id + enviado[1] = 0; // 0 = aparcar, 1 = salir. Se deja en 0 ya que primero siempre se aparca + enviado[2] = 0; // 0 = coche, 1 = camion, siempre coche en este fichero + + while(1){ + // Pedir plaza + printf("Coche %d quiere aparcar...", enviado[0]); + while(recibido == -1){ + MPI_Send(enviado, 3, MPI_INT, 0, 0, MPI_COMM_WORLD); + MPI_Recv(&recibido, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); + } + printf("Coche %d aparcado", enviado[0]); + // Cambio de variables + enviado[1] = 1; // Aparcado + // Esperar en el parking + sleep(5); + // Pedir salir + printf("Coche %d quiere salir...", enviado[0]); + MPI_Send(enviado, 3, MPI_INT, 0, 0, MPI_COMM_WORLD); + // Cambio variables + enviado[1] = 0; + recibido = -1; // Cambiado a mano ya que al salir del parking el orquestador no envia nada, TODO mas adelante + } + + MPI_Barrier(MPI_COMM_WORLD); // Fin MPI_Finalize(); From f8a1fa20aff995e18ec5102e21d3c75eaff0a5cc Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 11:41:48 +0100 Subject: [PATCH 13/23] feature: added makefile --- Makefile | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c2b1e15 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +# Makefile v1.0.0 + +all: orquestador coche camion + +orquestador: orquestador_parking.c + mpicc orquestador_parking.c -o orquestador + +coche: coche.c + mpicc coche.c -o coche + +camion: camion.c + mpicc camion.c -o camion + +clean: + rm orquestador + rm coche + rm camion \ No newline at end of file From 3a94f92097edf5e61bb30b45ce062a8d4e113214 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 12:11:32 +0100 Subject: [PATCH 14/23] feature: libraries for sleep --- camion.c | 11 ++++++++--- coche.c | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/camion.c b/camion.c index 341501b..72328a3 100644 --- a/camion.c +++ b/camion.c @@ -2,6 +2,8 @@ // C #include +#include +#include // MPI #include @@ -19,13 +21,16 @@ int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar int recibido = -1; // Sera si se ha aparcado o no int enviado[3]; // [id hilo][operacion][tipo de vehiculo] - + MPI_Status status; // Inicializacion MPI MPI_Init(&argc, &argv); MPI_Barrier(MPI_COMM_WORLD); - enviado[0] = MPI_Comm_rank(MPI_COMM_WORLD); // Sera el id + int id; + MPI_Comm_rank(MPI_COMM_WORLD, &id); + + enviado[0] = id; // Sera el id enviado[1] = 0; // 0 = aparcar, 1 = salir. Se deja en 0 ya que primero siempre se aparca enviado[2] = 1; // 0 = coche, 1 = camion, siempre coche en este fichero @@ -34,7 +39,7 @@ int main(int argc, char* argv[]){ printf("Camion %d quiere aparcar...", enviado[0]); while(recibido == -1){ MPI_Send(enviado, 3, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Recv(&recibido, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); + MPI_Recv(&recibido, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); } printf("Camion %d aparcado", enviado[0]); // Cambio de variables diff --git a/coche.c b/coche.c index 98a2792..0a2023a 100644 --- a/coche.c +++ b/coche.c @@ -2,6 +2,8 @@ // C #include +#include +#include // MPI #include @@ -19,13 +21,16 @@ int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar int recibido = -1; // Sera si se ha aparcado o no int enviado[3]; // [id hilo][operacion][tipo de vehiculo] - + MPI_Status status; // Inicializacion MPI MPI_Init(&argc, &argv); MPI_Barrier(MPI_COMM_WORLD); - enviado[0] = MPI_Comm_rank(MPI_COMM_WORLD); // Sera el id + int id; + MPI_Comm_rank(MPI_COMM_WORLD, &id); + + enviado[0] = id; // Sera el id enviado[1] = 0; // 0 = aparcar, 1 = salir. Se deja en 0 ya que primero siempre se aparca enviado[2] = 0; // 0 = coche, 1 = camion, siempre coche en este fichero @@ -34,7 +39,7 @@ int main(int argc, char* argv[]){ printf("Coche %d quiere aparcar...", enviado[0]); while(recibido == -1){ MPI_Send(enviado, 3, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Recv(&recibido, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); + MPI_Recv(&recibido, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); } printf("Coche %d aparcado", enviado[0]); // Cambio de variables From de0733b4f3314978bd47ed9152b1b6ab611e7ded Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 12:11:41 +0100 Subject: [PATCH 15/23] fix: removed functions --- orquestador_parking.c | 193 ++++++++++++++++++------------------------ 1 file changed, 84 insertions(+), 109 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index f051a73..4ae0ebc 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -21,12 +21,8 @@ // Funciones -void imprime_plazas(int plantas, int plazas_planta, int *** parking); -int** init_parking(int plantas, int plazas_planta); -int* asigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id); -int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id); -int desasigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id); -int desasigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id); +void imprime_plazas(int plantas, int plazas, int ** parking); +int** init_parking(int plantas, int plazas); int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar @@ -39,7 +35,7 @@ int main(int argc, char* argv[]){ MPI_Status status; - int aparcado; + int aparcado = -1; imprime_plazas(plantas, plazas, parking); @@ -60,146 +56,125 @@ int main(int argc, char* argv[]){ // Realizar comparaciones necesarias, primero tipo de operacion, despues tipo de vehiculo. if(recibido[1] == 0){ // Quiero entrar if(recibido[2] == 0) { // Soy un coche - int asignado_coche[2]; - asignado_coche = asigna_plaza_coche(&parking, plazas, plantas, recibido[0]); - if(asignado_coche[0] != -1){ // Se ha asignado - printf("Coche %d aparcado en la planta %d, en la plaza %d.\n", recibido[0], asignado_coche[0], asignado_coche[1]); + int i, j; + int posicion[2]; // [planta][plaza] + posicion[0] = -1; + posicion[1] = -1; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas; j++){ + if(parking[i][j] == 0){ + // Aqui somos capaces de asignar plaza + parking[i][j] = recibido[0]; // Se pudo asignar + posicion[0] = i; + posicion[1] = j; + } + } + }// No se pudo asignar + if(posicion[0] != -1){ // Se ha asignado + printf("Coche %d aparcado en la planta %d, en la plaza %d.\n", recibido[0], posicion[0], posicion[1]); aparcado = 1; MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); - aparcado = 0; - } else if (asignado_coche[0] == -1){ // No se ha asigando + aparcado = -1; + } else if (posicion[0] == -1){ // No se ha asigando printf("Coche %d no ha podido aparcar.\n", recibido[0]); MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } } else if (recibido[2] == 1) { // Soy un camion - int asignado_camion[4]; - asignado_camion = asigna_plaza_camion(&parking, plazas, plantas, recibido[0]); - if(asignado_camion[0] != -1){ // Se ha asignado - printf("Camion %d aparcado en la planta %d, en las plazas %d y %d.\n", recibido[0], asignado_camion[0], asignado_camion[1], asignado_camion[3]); + int i, j, k; + int posicion[4]; // [planta][plaza][planta][plaza] + posicion[0] = -1; + posicion[1] = -1; + posicion[2] = -1; + posicion[3] = -1; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas; j++){ + k = j; + k++; + if(k < plazas){ // Un camion debe de aparcar en dos huecos contigos + if(parking[i][j] == 0 && parking[i][k] == 0){ + parking[i][j] = recibido[0]; + parking[i][k] = recibido[0]; + + posicion[0] = i; + posicion[1] = j; + posicion[2] = i; + posicion[3] = k; // Se pudo asignar + } + } else { + k = 0; + } + } + }// No se pudo asignar + if(posicion[0] != -1){ // Se ha asignado + printf("Camion %d aparcado en la planta %d, en las plazas %d y %d.\n", recibido[0], posicion[0], posicion[1], posicion[3]); aparcado = 1; MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); - aparcado=0 - } else if (asignado_camion[0] == -1){ // No se ha asigando + aparcado=-1; + } else if (posicion[0] == -1){ // No se ha asigando printf("Camion %d no ha podido aparcar.\n", recibido[0]); MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } } } else if(recibido[1] == 1) { // Quiero salir if(recibido[2] == 0) { // Soy un coche - int salida = desasigna_plaza_coche(&parking, plantas, plazas, recibido[0]); // salida = 0 -> correcto, EOC -> error + int salida; // salida = 0 -> correcto, EOC -> error + int i, j; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas; j++){ + if(parking[i][j] == recibido[0]) { + parking[i][j] = 0; + printf("Coche %d dejando la plaza %d en la planta %d.\n", recibido[0], j, i); + salida = 0; // Encontrado + } + } + } + salida = -1; // No encontrado } else if (recibido[2] == 1) { // Soy un camion - int salida = desasigna_plaza_camion(&parking, plantas, plazas, recibido[0]); // salida = 0 -> correcto, EOC -> error + int salida; // salida = 0 -> correcto, EOC -> error + int i, j; + int k = 0; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas; j++){ + k = j+1; + if(parking[i][j] == recibido[0] && parking[i][k] == recibido[0]){ + parking[i][j] = 0; + parking[i][k] = 0; + printf("Camion %d dejando las plazas %d y %d en la planta %d.\n", recibido[0], j, k, i); + salida = 0; // Encontrado + } else { + k = 0; + } + } + } + salida = -1; // No encontrado } } - imprime_plazas(plantas, plazas, &parking); + imprime_plazas(plantas, plazas, parking); sleep(1); // Para evitar mucha repeticion de imprimir el parking } // Fin MPI_Finalize(); } -void imprime_plazas(int plantas, int plazas_planta, int *** parking){ +void imprime_plazas(int plantas, int plazas, int ** parking){ printf("Estado actual del parking: \n"); int i, j; for(i=0; i < plantas; i++){ printf("-> Planta %d: ", i); - for(j=0; j < plazas_planta; j++){ + for(j=0; j < plazas; j++){ printf("[%d]", parking[i][j]); } printf("\n"); } } -int** init_parking(int plantas, int plazas_planta){ +int** init_parking(int plantas, int plazas){ int** parking; int i, j; for(i=0; i < plantas; i++){ - for(j=0; j < plazas_planta; j++){ + for(j=0; j < plazas; j++){ parking[i][j] = 0; // 0 sera libre y cualquier otro numero aparcado [id] } } return parking; } - -int* asigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id){ - int i, j; - int posicion[2]; // [planta][plaza] - posicion[0] = -1; - posicion[1] = -1; - for(i=0; i < plantas; i++){ - for(j=0; j < plazas_planta; j++){ - if(parking[i][j] == 0){ - // Aqui somos capaces de asignar plaza - parking[i][j] = id; - - posicion[0] = i; - posicion[1] = j; - - return posicion; // Se pudo asignar - } - } - } - return posicion; // No se pudo asignar -} - -int* asigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id){ - int i, j, k; - int posicion[4]; // [planta][plaza][planta][plaza] - posicion[0] = -1; - posicion[1] = -1; - posicion[2] = -1; - posicion[3] = -1; - for(i=0; i < plantas; i++){ - for(j=0; j < plazas_planta; j++){ - k = j; - k++; - if(k < plazas_planta){ // Un camion debe de aparcar en dos huecos contigos - if(parking[i][j] == 0 && parking[i][k] == 0){ - parking[i][j] = id; - parking[i][j] = id; - - posicion[0] = i; - posicion[1] = j; - posicion[2] = i; - posicion[3] = k; - - return posicion; // Se pudo asignar - } - } else { - k = 0; - } - } - } - return posicion; // No se pudo asignar -} - -int desasigna_plaza_coche(int *** parking, int plantas, int plazas_planta, int id){ - for(i=0; i < plantas; i++){ - for(j=0; j < plazas_planta; j++){ - if(parking[i][j] == id) { - parking[i][j] = 0; - printf("Coche %d dejando la plaza %d en la planta %d.\n", id, j, i); - return 0; // Encontrado - } - } - } - return -1; // No encontrado -} - -int desasigna_plaza_camion(int *** parking, int plantas, int plazas_planta, int id){ - int k = 0; - for(i=0; i < plantas; i++){ - for(j=0; j < plazas_planta; j++){ - k = j+1; - if(parking[i][j] == id && parking[i][j] == k){ - parking[i][j] = 0; - parking[i][k] = 0; - printf("Camion %d dejando las plazas %d y %d en la planta %d.\n", id, j, k, i); - return 0; // Encontrado - } else { - k = 0; - } - } - } - return -1; // No encontrado -} \ No newline at end of file From 8200c9b72f8066f42c95e764d65669d35bd2de93 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 13:00:26 +0100 Subject: [PATCH 16/23] fix: get parameters in function --- orquestador_parking.c | 81 +++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index 4ae0ebc..59eb518 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -21,23 +21,38 @@ // Funciones -void imprime_plazas(int plantas, int plazas, int ** parking); -int** init_parking(int plantas, int plazas); + int main(int argc, char* argv[]){ // Declaracion de variables antes de iniciar - int plazas = strtol(argv[1], NULL, 10); - int plantas = strtol(argv[2], NULL, 10); + int plazas = atoi(argv[1]); + int plantas = atoi(argv[2]); printf("Plantas: %d, con %d plazas por planta.\n", plantas, plazas); - int ** parking = init_parking(plantas, plazas); + int parking[plantas][plazas]; + int i, j, k; + int asignado = 0; + for(i=0; i < plantas; i++){ + for(j=0; j < plazas; j++){ + parking[i][j] = 0; // 0 sera libre y cualquier otro numero aparcado [id del proceso que pide plaza] + } + } + + printf("Parking inicializado.\n"); MPI_Status status; int aparcado = -1; - imprime_plazas(plantas, plazas, parking); + printf("Estado actual del parking: \n"); + for(i=0; i < plantas; i++){ + printf("-> Planta %d: ", i); + for(j=0; j < plazas; j++){ + printf("[%d]", parking[i][j]); + } + printf("\n"); + } // Inicializacion MPI MPI_Init(&argc, &argv); @@ -56,20 +71,21 @@ int main(int argc, char* argv[]){ // Realizar comparaciones necesarias, primero tipo de operacion, despues tipo de vehiculo. if(recibido[1] == 0){ // Quiero entrar if(recibido[2] == 0) { // Soy un coche - int i, j; int posicion[2]; // [planta][plaza] posicion[0] = -1; posicion[1] = -1; for(i=0; i < plantas; i++){ for(j=0; j < plazas; j++){ - if(parking[i][j] == 0){ + if(parking[i][j] == 0 && asignado == 0){ // Aqui somos capaces de asignar plaza - parking[i][j] = recibido[0]; // Se pudo asignar + parking[i][j] = recibido[0]; posicion[0] = i; posicion[1] = j; + asignado = 1; // Se pudo asignar } } - }// No se pudo asignar + } + asignado = 0; if(posicion[0] != -1){ // Se ha asignado printf("Coche %d aparcado en la planta %d, en la plaza %d.\n", recibido[0], posicion[0], posicion[1]); aparcado = 1; @@ -80,7 +96,6 @@ int main(int argc, char* argv[]){ MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } } else if (recibido[2] == 1) { // Soy un camion - int i, j, k; int posicion[4]; // [planta][plaza][planta][plaza] posicion[0] = -1; posicion[1] = -1; @@ -90,21 +105,23 @@ int main(int argc, char* argv[]){ for(j=0; j < plazas; j++){ k = j; k++; - if(k < plazas){ // Un camion debe de aparcar en dos huecos contigos - if(parking[i][j] == 0 && parking[i][k] == 0){ + if(k < plazas){ // Un camion debe de aparcar en dos huecos contiguos + if(parking[i][j] == 0 && parking[i][k] == 0 && asignado == 0){ parking[i][j] = recibido[0]; parking[i][k] = recibido[0]; posicion[0] = i; posicion[1] = j; posicion[2] = i; - posicion[3] = k; // Se pudo asignar + posicion[3] = k; + asignado = 1; // Se pudo asignar } } else { k = 0; } } - }// No se pudo asignar + } + asignado = 0; if(posicion[0] != -1){ // Se ha asignado printf("Camion %d aparcado en la planta %d, en las plazas %d y %d.\n", recibido[0], posicion[0], posicion[1], posicion[3]); aparcado = 1; @@ -118,7 +135,6 @@ int main(int argc, char* argv[]){ } else if(recibido[1] == 1) { // Quiero salir if(recibido[2] == 0) { // Soy un coche int salida; // salida = 0 -> correcto, EOC -> error - int i, j; for(i=0; i < plantas; i++){ for(j=0; j < plazas; j++){ if(parking[i][j] == recibido[0]) { @@ -131,7 +147,6 @@ int main(int argc, char* argv[]){ salida = -1; // No encontrado } else if (recibido[2] == 1) { // Soy un camion int salida; // salida = 0 -> correcto, EOC -> error - int i, j; int k = 0; for(i=0; i < plantas; i++){ for(j=0; j < plazas; j++){ @@ -149,32 +164,16 @@ int main(int argc, char* argv[]){ salida = -1; // No encontrado } } - imprime_plazas(plantas, plazas, parking); + printf("Estado actual del parking: \n"); + for(i=0; i < plantas; i++){ + printf("-> Planta %d: ", i); + for(j=0; j < plazas; j++){ + printf("[%d]", parking[i][j]); + } + printf("\n"); + } sleep(1); // Para evitar mucha repeticion de imprimir el parking } // Fin MPI_Finalize(); } - -void imprime_plazas(int plantas, int plazas, int ** parking){ - printf("Estado actual del parking: \n"); - int i, j; - for(i=0; i < plantas; i++){ - printf("-> Planta %d: ", i); - for(j=0; j < plazas; j++){ - printf("[%d]", parking[i][j]); - } - printf("\n"); - } -} - -int** init_parking(int plantas, int plazas){ - int** parking; - int i, j; - for(i=0; i < plantas; i++){ - for(j=0; j < plazas; j++){ - parking[i][j] = 0; // 0 sera libre y cualquier otro numero aparcado [id] - } - } - return parking; -} From 0637b147fd9bd15a43fa649b738edf08b05694b7 Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 13:01:13 +0100 Subject: [PATCH 17/23] feature: set localhost slots to 15 --- hostfile.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hostfile.config b/hostfile.config index afc25a1..1b9c762 100644 --- a/hostfile.config +++ b/hostfile.config @@ -1 +1 @@ -localhost slots=4 \ No newline at end of file +localhost slots=15 \ No newline at end of file From 5ad8fe158256e21e235fac4e1367b5b94430920a Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 13:09:21 +0100 Subject: [PATCH 18/23] feature: added 'make run' command --- Makefile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Makefile b/Makefile index c2b1e15..b697dae 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,16 @@ coche: coche.c camion: camion.c mpicc camion.c -o camion +########################################################################################## +############ 1 orquestador(control), 10 coches(slaves), 4 camiones(slaves) ############### +############# En el fichero de config hay 15 nodos preparados para ejecucion ############# +########################################################################################## + +run: orquestador coche camion + mpirun --hostfile hostfile.config -np 1 orquestador 10 2 : -np 10 coche : -np 4 camion + +########################################################################################## + clean: rm orquestador rm coche From f9cfc48fd1616de1a421e254f447bc6d32d0819f Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 13:34:31 +0100 Subject: [PATCH 19/23] feature: new readme usage --- README.md | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 29ec0c9..fc6823a 100644 --- a/README.md +++ b/README.md @@ -87,9 +87,7 @@ sudo apt-get install xterm 1. Make yourself a folder where you would like to work -2. Get a nice editor, VS code recommended - -3. Clone the repo +2. Clone the repo ```sh git clone https://github.com//.git ``` @@ -97,7 +95,7 @@ git clone https://github.com//.git ## Contributing -Any new code should be pushed into a new branch. Please do not push any commits directly into the master branch! +Any new code should be pushed into a new branch. Please do not push any commits directly into the master or dev branches! 1. Create your Feature Branch (`git checkout -b feature-feature_name`) 2. Commit your Changes (`git commit -m 'feature: '`) @@ -132,36 +130,45 @@ Alvaro Martinez Quiroga - a.martinezq.2017@alumnos.urjc.es ## Usage -In order to run .c files first configure your hostfile.config file +The new way: -1. Create the file (if you don't have it) +1. Compile the files with the Makefile file running the following command ```sh -touch hostfile.config +make ``` -2. Add the number of nodes you want to run the program with, for example +2. Run the program using again the Makefile ```sh -localhost slots=4 +make run ``` -3. Compile .c files into .o +If you want to remove the compiled source, run the following command ```sh -mpicc [filename].c -o [filename].o +make clean +``` + +The old way: + +In order to run .c files first configure your hostfile.config file + +1. Create the file (if you don't have it) +```sh +touch hostfile.config ``` -4. Run the nodes +2. Add the number of nodes you want to run the program with, for example ```sh -mpirun --hostfile hostfile.config -np 4 [filename].o +localhost slots=15 ``` -5. If you want to run the debug +3. Compile .c files into .o ```sh -mpirun --hostfile hostfile.config -np 4 xterm -e gdb ./[filename].o +mpicc [filename].c -o [filename].o ``` -In order to run the code in each console, copy the following command in every console +4. Run the nodes, numbers in the following line are just an example and can be changed ```sh -run +mpirun --hostfile hostfile.config -np 1 orquestador 10 2 : -np 10 coche : -np 4 camion ``` From b83140aabebad3caabd93f7878378a91b793f59f Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 13:35:18 +0100 Subject: [PATCH 20/23] feature: developers --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc6823a..8ccac33 100644 --- a/README.md +++ b/README.md @@ -125,8 +125,9 @@ Second and last from the main development branch do as follows: ## Contact -Alvaro Martinez Quiroga - a.martinezq.2017@alumnos.urjc.es - +Alvaro Martinez Quiroga - alvaroo2302@gmail.com +Patricia Tarazaga Cozas - +Raul Heredia Horcajo - ## Usage From 8b6efd289ab56f2881aef19674f5d787ad8926ed Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 13:36:57 +0100 Subject: [PATCH 21/23] feature: acknowledgements --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ccac33..294e663 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,8 @@ mpirun --hostfile hostfile.config -np 1 orquestador 10 2 : -np 10 coche : -np 4 ## Acknowledgements -TODO +* [University Rey Juan Carlos](https://www.urjc.es/) +* [Github readme template](https://github.com/othneildrew/Best-README-Template) ## Contact -Alvaro Martinez Quiroga - alvaroo2302@gmail.com -Patricia Tarazaga Cozas - -Raul Heredia Horcajo - +* Alvaro Martinez Quiroga - alvaroo2302@gmail.com +* Patricia Tarazaga Cozas - +* Raul Heredia Horcajo - ## Usage From 19ab6c1b5f8f1216e19bee6f93c1786e9ab5093f Mon Sep 17 00:00:00 2001 From: alvaro Date: Tue, 24 Nov 2020 15:22:12 +0100 Subject: [PATCH 23/23] feature: added colors for console :art: --- orquestador_parking.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/orquestador_parking.c b/orquestador_parking.c index 59eb518..4fd3aa6 100644 --- a/orquestador_parking.c +++ b/orquestador_parking.c @@ -28,7 +28,9 @@ int main(int argc, char* argv[]){ int plazas = atoi(argv[1]); int plantas = atoi(argv[2]); - printf("Plantas: %d, con %d plazas por planta.\n", plantas, plazas); + printf("\033[1;35m"); + printf("\nPlantas: %d, con %d plazas por planta.\n", plantas, plazas); + printf("\033[0;0m"); int parking[plantas][plazas]; int i, j, k; @@ -38,14 +40,15 @@ int main(int argc, char* argv[]){ parking[i][j] = 0; // 0 sera libre y cualquier otro numero aparcado [id del proceso que pide plaza] } } - - printf("Parking inicializado.\n"); - + printf("\033[1;31m"); + printf("\n\nParking inicializado.\n\n"); + printf("\033[0;0m"); MPI_Status status; int aparcado = -1; - printf("Estado actual del parking: \n"); + printf("\nEstado actual del parking: \n"); + printf("\033[1;33m"); for(i=0; i < plantas; i++){ printf("-> Planta %d: ", i); for(j=0; j < plazas; j++){ @@ -53,6 +56,7 @@ int main(int argc, char* argv[]){ } printf("\n"); } + printf("\033[0;0m"); // Inicializacion MPI MPI_Init(&argc, &argv); @@ -65,9 +69,9 @@ int main(int argc, char* argv[]){ // Programa principal while(1){ MPI_Recv(recibido, 3, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); - - printf("Vehiculo: %d. Entrar=0/Salir=1, operacion: %d. Coche=0/Camion=0, tipo: %d\n", recibido[0], recibido[1], recibido[2]); - + printf("\033[1;36m"); + printf("\nVehiculo: %d. Entrar=0/Salir=1, operacion: %d. Coche=0/Camion=1, tipo: %d\n\n", recibido[0], recibido[1], recibido[2]); + printf("\033[0;0m"); // Realizar comparaciones necesarias, primero tipo de operacion, despues tipo de vehiculo. if(recibido[1] == 0){ // Quiero entrar if(recibido[2] == 0) { // Soy un coche @@ -87,12 +91,16 @@ int main(int argc, char* argv[]){ } asignado = 0; if(posicion[0] != -1){ // Se ha asignado + printf("\033[1;32m"); printf("Coche %d aparcado en la planta %d, en la plaza %d.\n", recibido[0], posicion[0], posicion[1]); + printf("\033[0;0m"); aparcado = 1; MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); aparcado = -1; } else if (posicion[0] == -1){ // No se ha asigando + printf("\033[0;31m"); printf("Coche %d no ha podido aparcar.\n", recibido[0]); + printf("\033[0;0m"); MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } } else if (recibido[2] == 1) { // Soy un camion @@ -123,12 +131,16 @@ int main(int argc, char* argv[]){ } asignado = 0; if(posicion[0] != -1){ // Se ha asignado + printf("\033[1;32m"); printf("Camion %d aparcado en la planta %d, en las plazas %d y %d.\n", recibido[0], posicion[0], posicion[1], posicion[3]); + printf("\033[0;0m"); aparcado = 1; MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); aparcado=-1; } else if (posicion[0] == -1){ // No se ha asigando + printf("\033[0;31m"); printf("Camion %d no ha podido aparcar.\n", recibido[0]); + printf("\033[0;0m"); MPI_Send(&aparcado, 1, MPI_INT, recibido[0], 0, MPI_COMM_WORLD); } } @@ -139,7 +151,9 @@ int main(int argc, char* argv[]){ for(j=0; j < plazas; j++){ if(parking[i][j] == recibido[0]) { parking[i][j] = 0; + printf("\033[1;35m"); printf("Coche %d dejando la plaza %d en la planta %d.\n", recibido[0], j, i); + printf("\033[0;0m"); salida = 0; // Encontrado } } @@ -154,7 +168,9 @@ int main(int argc, char* argv[]){ if(parking[i][j] == recibido[0] && parking[i][k] == recibido[0]){ parking[i][j] = 0; parking[i][k] = 0; + printf("\033[1;35m"); printf("Camion %d dejando las plazas %d y %d en la planta %d.\n", recibido[0], j, k, i); + printf("\033[0;0m"); salida = 0; // Encontrado } else { k = 0; @@ -164,7 +180,8 @@ int main(int argc, char* argv[]){ salida = -1; // No encontrado } } - printf("Estado actual del parking: \n"); + printf("\nEstado actual del parking: \n"); + printf("\033[1;33m"); for(i=0; i < plantas; i++){ printf("-> Planta %d: ", i); for(j=0; j < plazas; j++){ @@ -172,6 +189,7 @@ int main(int argc, char* argv[]){ } printf("\n"); } + printf("\033[0;0m"); sleep(1); // Para evitar mucha repeticion de imprimir el parking } // Fin