From 4ea42028d4a9855d32accfb67298a637abd3d845 Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Fri, 20 Sep 2024 11:42:27 +0200 Subject: [PATCH 01/41] creada la rama dev_9 y cambiados los nombres de la unidad 1 --- UA1/examen/{dev_0 => dev_9}/ua1ex1.c | 48 +++++++++---------- UA1/examen/{dev_0 => dev_9}/ua1ex1_teoria.txt | 32 ++++++------- UA1/tareas/{dev_0 => dev_9}/ua1tarea1.c | 0 3 files changed, 40 insertions(+), 40 deletions(-) rename UA1/examen/{dev_0 => dev_9}/ua1ex1.c (98%) rename UA1/examen/{dev_0 => dev_9}/ua1ex1_teoria.txt (97%) rename UA1/tareas/{dev_0 => dev_9}/ua1tarea1.c (100%) diff --git a/UA1/examen/dev_0/ua1ex1.c b/UA1/examen/dev_9/ua1ex1.c similarity index 98% rename from UA1/examen/dev_0/ua1ex1.c rename to UA1/examen/dev_9/ua1ex1.c index 9c70ebfd..8de5952c 100644 --- a/UA1/examen/dev_0/ua1ex1.c +++ b/UA1/examen/dev_9/ua1ex1.c @@ -1,24 +1,24 @@ -/* - -NOMBRE: -FECHA: - -PARTE PRÁCTICA - -FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos -FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos -FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos -FR4: Implementa el control de errores - 2 puntos -FR5: Documenta y estructura el código - 2 puntos - -Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler - -Notas: - -Los comentarios (descriptivos y concisos) en el código ... siempre son bien. -Los nombres de las variables autodescriptivos ... siempre son bien. -Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. -Los warnings del presente ... son los errores del futuro. -El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ - -*/ +/* + +NOMBRE: +FECHA: + +PARTE PRÁCTICA + +FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos +FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos +FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos +FR4: Implementa el control de errores - 2 puntos +FR5: Documenta y estructura el código - 2 puntos + +Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler + +Notas: + +Los comentarios (descriptivos y concisos) en el código ... siempre son bien. +Los nombres de las variables autodescriptivos ... siempre son bien. +Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. +Los warnings del presente ... son los errores del futuro. +El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ + +*/ diff --git a/UA1/examen/dev_0/ua1ex1_teoria.txt b/UA1/examen/dev_9/ua1ex1_teoria.txt similarity index 97% rename from UA1/examen/dev_0/ua1ex1_teoria.txt rename to UA1/examen/dev_9/ua1ex1_teoria.txt index 2ea0d591..e7a3dba9 100644 --- a/UA1/examen/dev_0/ua1ex1_teoria.txt +++ b/UA1/examen/dev_9/ua1ex1_teoria.txt @@ -1,16 +1,16 @@ -NOMBRE: -FECHA: - -PARTE TEÓRICA - -a) Definición de proceso. 1 punto. - -b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. - -c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. - -d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. - -Notas: - -El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ +NOMBRE: +FECHA: + +PARTE TEÓRICA + +a) Definición de proceso. 1 punto. + +b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. + +c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. + +d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. + +Notas: + +El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ diff --git a/UA1/tareas/dev_0/ua1tarea1.c b/UA1/tareas/dev_9/ua1tarea1.c similarity index 100% rename from UA1/tareas/dev_0/ua1tarea1.c rename to UA1/tareas/dev_9/ua1tarea1.c From bc414c1e3f23fd59de95669e0b2a737de76ab7a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Wed, 25 Sep 2024 13:31:25 +0200 Subject: [PATCH 02/41] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0ea29ae1..3de8d829 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ Repositorio para el seguimiento y evaluación de la asignatura Programación de ## Contenidos -- [UA1 - Programación Multiproceso](https://github.com/Lope-de-Vega-Test/psp-22-23/tree/main/UA1) -- [UA2 - Programación Multihilo](https://github.com/Lope-de-Vega-Test/psp-22-23/tree/main/UA2) -- [UA3 - Programación de comunicaciones en red](https://github.com/Lope-de-Vega-Test/psp-22-23/tree/main/UA3) -- [UA4 - Desarrollo de Servicios en Red](https://github.com/Lope-de-Vega-Test/psp-22-23/tree/main/UA4) -- [UA5 - Técnicas de Programación segura](https://github.com/Lope-de-Vega-Test/psp-22-23/tree/main/UA5) +- [UA1 - Programación Multiproceso](https://github.com/i12vecaj/psp-24-25/tree/main/UA1) +- [UA2 - Programación Multihilo](https://github.com/i12vecaj/psp-24-25/tree/main/UA2) +- [UA3 - Programación de comunicaciones en red](https://github.com/i12vecaj/psp-24-25/tree/main/UA3) +- [UA4 - Desarrollo de Servicios en Red](https://github.com/i12vecaj/psp-24-25/tree/main/UA4) +- [UA5 - Técnicas de Programación segura](https://github.com/i12vecaj/psp-24-25/tree/main/UA5) ## Requerimientos Básicos From 04b83c6fa7456dd83d9af4496317c4b0bfaf83dd Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:48:39 +0200 Subject: [PATCH 03/41] Create Entregas tema 1 --- UA1/Entregas tema 1 | 1 + 1 file changed, 1 insertion(+) create mode 100644 UA1/Entregas tema 1 diff --git a/UA1/Entregas tema 1 b/UA1/Entregas tema 1 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/UA1/Entregas tema 1 @@ -0,0 +1 @@ + From 21b07f18a0a0808ea0d319b79e41310401286127 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:49:51 +0200 Subject: [PATCH 04/41] Create tarea0 --- UA1/tareas/dev_0/tarea0 | 1 + 1 file changed, 1 insertion(+) create mode 100644 UA1/tareas/dev_0/tarea0 diff --git a/UA1/tareas/dev_0/tarea0 b/UA1/tareas/dev_0/tarea0 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/UA1/tareas/dev_0/tarea0 @@ -0,0 +1 @@ + From db543ab390e922bb91d87f182f5eeca7d7c33dad Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:57:52 +0200 Subject: [PATCH 05/41] Update tarea0 --- UA1/tareas/dev_0/tarea0 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UA1/tareas/dev_0/tarea0 b/UA1/tareas/dev_0/tarea0 index 8b137891..dec26c2c 100644 --- a/UA1/tareas/dev_0/tarea0 +++ b/UA1/tareas/dev_0/tarea0 @@ -1 +1 @@ - +primera tarea From 19b1ee78e43de5d5caeb9bee3e65f27730c2051a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Wed, 25 Sep 2024 19:33:39 +0200 Subject: [PATCH 06/41] Update README.md --- UA1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UA1/README.md b/UA1/README.md index 311f9b6d..03d23be1 100644 --- a/UA1/README.md +++ b/UA1/README.md @@ -67,7 +67,7 @@ La evaluación de esta unidad didáctica estará basada en la entrega de las tar ### **T1 - Tarea 1 - Programación de Procesos en C** ##### **Criterios a), e), f), g), h)** ``` -Fecha de Entrega: 25/09/2024 - 14:00:00 +Fecha de Entrega: 01/10/2024 - 14:00:00 ``` PROCESOS. Crea un único programa en C que implemente las siguientes Funcionalidades Requeridas (FRs): * FR1: cree un proceso (existirán en realidad dos procesos, uno padre y el otro hijo) - 1 punto From 5b73b354b3f8ed43ef19b3b833c1270df5f7a174 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:54:39 +0200 Subject: [PATCH 07/41] Add files via upload --- ... - Programaci\303\263n de Procesos en C.c" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" diff --git "a/UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" "b/UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" new file mode 100644 index 00000000..83dc2037 --- /dev/null +++ "b/UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" @@ -0,0 +1,37 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> + +int main() { + int num; + pid_t pid; + + // FR2: Pedir al usuario una variable (ahora llamada num) + printf("Introduce una variable entera (num): "); + scanf("%d", &num); + + // FR1: Crear un proceso (uno padre y otro hijo) + pid = fork(); + + if (pid == -1) { + // Error al crear el proceso hijo + printf("Error al crear el proceso hijo\n"); + return 1; + } + + if (pid == 0) { + // FR4: Proceso hijo suma 4 a la variable num + num += 4; + printf("Proceso hijo (PID: %d): num + 4 = %d\n", getpid(), num); + } else { + // FR3: Proceso padre resta 5 a la variable num + num -= 5; + printf("Proceso padre (PID: %d): num - 5 = %d\n", getpid(), num); + + // Esperar a que termine el proceso hijo (FR5) + wait(NULL); + } + + return 0; +} \ No newline at end of file From 3ae521ac730d2f1b4bfa34ce6c4fdf71f6f0bc10 Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Mon, 30 Sep 2024 08:32:07 +0200 Subject: [PATCH 08/41] =?UTF-8?q?Resoluci=C3=B3n=20de=20la=20tarea=20ua1ta?= =?UTF-8?q?rea1.c=20(procesos=20en=20c)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UA1/tareas/dev_9/ua1_tarea1.c | 57 +++++++++++++++++++++++++++++++++++ UA1/tareas/dev_9/ua1tarea1.c | 1 - 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 UA1/tareas/dev_9/ua1_tarea1.c delete mode 100644 UA1/tareas/dev_9/ua1tarea1.c diff --git a/UA1/tareas/dev_9/ua1_tarea1.c b/UA1/tareas/dev_9/ua1_tarea1.c new file mode 100644 index 00000000..321a0415 --- /dev/null +++ b/UA1/tareas/dev_9/ua1_tarea1.c @@ -0,0 +1,57 @@ +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> + +void main() { + //Definimos las variables que vamos a utilizar + pid_t pid; + int variable; + int suma; + int resultado_final; + + printf("\t\t**BIENVENIDO**\n"); + printf("-Hola!! me puedes introducir el valor de tu variable: "); + scanf("%d", &variable); + + //Creamos un clon de el proceso padre(main) + pid = fork(); + + //Aplicamos un control de errores + if (pid == -1 ) + { + printf("No se ha podido crear el proceso hijo..."); + exit(-1); + } + + //Comprobamos si estamos en el proceso hijo de ser asi le sumamos a variable 4 + if(pid == 0) { + variable += 4; + + printf("Variable en el proceso hijo con valor de %d\n", variable); + + exit(0); + + + } else{ + //Comprobamos si estamos en el proceso padre de ser asi le restamos a variable 5 + + /* Mediante wait(NULL) lo que hacemos es esperar a que el proceso hijo termine y luego + * ejecutar el proceso padre + */ + pid = wait(NULL); + variable -= 5; + + printf("Variable en el proceso padre con valor de %d", variable); + printf("\n\t**FINALIZADO**"); + exit(1); + } + + /* EJECUCIÓN DE EJEMPLO + * **BIENVENIDO** + * -Hola!! me puedes introducir el valor de tu variable: (5) + * Variable en el proceso hijo con valor de 9 + * Variable en el proceso padre con valor de 0 + * **FINALIZADO** + */ + +} diff --git a/UA1/tareas/dev_9/ua1tarea1.c b/UA1/tareas/dev_9/ua1tarea1.c deleted file mode 100644 index 1b2cfd02..00000000 --- a/UA1/tareas/dev_9/ua1tarea1.c +++ /dev/null @@ -1 +0,0 @@ -Ya os gustaría \ No newline at end of file From 83c006751ad9aa08cad9440c032aa2df9b3ad315 Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Tue, 8 Oct 2024 11:41:35 +0200 Subject: [PATCH 09/41] tarea 2 ejecucion de procesos terminada --- UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore | 38 ++++++++++++++++++ UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml | 17 ++++++++ .../src/main/java/org/example/Main.java | 19 +++++++++ .../src/main/java/org/example/hilo_1.java | 39 +++++++++++++++++++ .../src/main/java/org/example/hilo_2.java | 29 ++++++++++++++ 5 files changed, 142 insertions(+) create mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore create mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml create mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java create mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java create mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore b/UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore new file mode 100644 index 00000000..5ff6309b --- /dev/null +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml b/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml new file mode 100644 index 00000000..01f791e8 --- /dev/null +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.example</groupId> + <artifactId>ua2_tarea2_dev9</artifactId> + <version>1.0-SNAPSHOT</version> + + <properties> + <maven.compiler.source>21</maven.compiler.source> + <maven.compiler.target>21</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + +</project> \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java new file mode 100644 index 00000000..8a2221a0 --- /dev/null +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java @@ -0,0 +1,19 @@ +package org.example; + +//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or +// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter. +public class Main { + public static void main(String[] args) throws Exception { + + + /*Creamos las instancias de los hilos*/ + hilo_2 h2 = new hilo_2(); + hilo_1 h1 = new hilo_1(); + + /*Ejecutamos y ponemos orden a los hilos*/ + h2.start(); + h2.join(); + h1.start(); + h1.join(); + } +} \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java new file mode 100644 index 00000000..9e7c7ae3 --- /dev/null +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java @@ -0,0 +1,39 @@ +package org.example; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class hilo_1 extends Thread{ + + public boolean condition = false; + /* + * Definimos una lista que recoga lo introducido por el usuario + * */ + List<String> frases = new ArrayList<>(); + + + /* + * HILO QUE EJECUTA LEE Y SE SALA SEGUN LO QUE INTRODUCE EL USUARIO + * */ + public void run() { + Scanner sc = new Scanner(System.in); + + do { + System.out.println("Introduce un valor"); + + String input = sc.nextLine(); + + if (input.equals("*")) { + condition = true; + System.out.println("Ha sido un placer estar contigo"); + + System.out.println("Te dejo por aqui el historial de tus respuestas :) {\n\t\t" + + String.join("\n\t\t", frases) +"\n\t}"); + } else { + // Agregar la frase a la lista + frases.add(input); + } + } while (!condition); + } +} diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java new file mode 100644 index 00000000..6496e4dc --- /dev/null +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java @@ -0,0 +1,29 @@ +package org.example; + +import java.util.Scanner; + +public class hilo_2 extends Thread{ + + /* + * HILO INTRODUCCION QUE VA A DEVOLVER INSTRUCCIONES + * */ + public void run() { + Scanner scanner = new Scanner(System.in); + + System.out.println("Te dejo aqui dos opciones: \n\t1.Ejecutar el segundo hilo\n\t" + + "2.Leer manual de instrucciones"); + + int opciones = scanner.nextInt(); + + switch (opciones) { + case 1: + System.out.println("Perfecto ejecutemos el siguiente hilo"); + break; + case 2: + System.out.println("Si pones * te saldrás"); + break; + default: + System.out.println("Opción incorrecta. Seleccione un número entre 1 y 2."); + } + } +} From e05c67485e4157dcddd7c5a95efc52f17152c7f7 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:54:33 +0200 Subject: [PATCH 10/41] Add files via upload --- UA1/tareas/dev_0/EjecutarprogramaEnHilo.java | 20 ++++++++ UA1/tareas/dev_0/LecturaCadena.java | 51 ++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 UA1/tareas/dev_0/EjecutarprogramaEnHilo.java create mode 100644 UA1/tareas/dev_0/LecturaCadena.java diff --git a/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java b/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java new file mode 100644 index 00000000..452ee2e0 --- /dev/null +++ b/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java @@ -0,0 +1,20 @@ +public class EjecutarProgramaEnHilo implements Runnable { + + @Override + public void run() { + + LecturaCadena.main(null); + } + + public static void main(String[] args) { + + Thread hiloEjecucion = new Thread(new EjecutarProgramaEnHilo()); + hiloEjecucion.start(); + + try { + hiloEjecucion.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/UA1/tareas/dev_0/LecturaCadena.java b/UA1/tareas/dev_0/LecturaCadena.java new file mode 100644 index 00000000..fa47092e --- /dev/null +++ b/UA1/tareas/dev_0/LecturaCadena.java @@ -0,0 +1,51 @@ +import java.util.Scanner; + +public class LecturaCadena implements Runnable { + private String texto; + + public LecturaCadena() { + this.texto = ""; + } + + @Override + public void run() { + Scanner scanner = new Scanner(System.in); + StringBuilder sb = new StringBuilder(); + String input; + + System.out.println("Introduce texto (termina con *):"); + + + do { + input = scanner.nextLine(); + sb.append(input).append("\n"); + } while (input.indexOf('*') == -1); + + + texto = sb.toString(); + int indexAsterisco = texto.indexOf('*'); + if (indexAsterisco != -1) { + texto = texto.substring(0, indexAsterisco); + } + + + System.out.println("Texto leído:\n" + texto); + } + + public String getTexto() { + return texto; + } + + public static void main(String[] args) { + + LecturaCadena lecturaCadena = new LecturaCadena(); + Thread hiloLectura = new Thread(lecturaCadena); + hiloLectura.start(); + + try { + hiloLectura.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} From 3afb6ac08493a1d32a5b14174eea8f19753b71ac Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:56:49 +0200 Subject: [PATCH 11/41] Delete UA1/tareas/dev_0/EjecutarprogramaEnHilo.java --- UA1/tareas/dev_0/EjecutarprogramaEnHilo.java | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 UA1/tareas/dev_0/EjecutarprogramaEnHilo.java diff --git a/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java b/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java deleted file mode 100644 index 452ee2e0..00000000 --- a/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java +++ /dev/null @@ -1,20 +0,0 @@ -public class EjecutarProgramaEnHilo implements Runnable { - - @Override - public void run() { - - LecturaCadena.main(null); - } - - public static void main(String[] args) { - - Thread hiloEjecucion = new Thread(new EjecutarProgramaEnHilo()); - hiloEjecucion.start(); - - try { - hiloEjecucion.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} From d7925c7a09d40df3bb631533d77834bd063b4168 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:56:57 +0200 Subject: [PATCH 12/41] Delete UA1/tareas/dev_0/LecturaCadena.java --- UA1/tareas/dev_0/LecturaCadena.java | 51 ----------------------------- 1 file changed, 51 deletions(-) delete mode 100644 UA1/tareas/dev_0/LecturaCadena.java diff --git a/UA1/tareas/dev_0/LecturaCadena.java b/UA1/tareas/dev_0/LecturaCadena.java deleted file mode 100644 index fa47092e..00000000 --- a/UA1/tareas/dev_0/LecturaCadena.java +++ /dev/null @@ -1,51 +0,0 @@ -import java.util.Scanner; - -public class LecturaCadena implements Runnable { - private String texto; - - public LecturaCadena() { - this.texto = ""; - } - - @Override - public void run() { - Scanner scanner = new Scanner(System.in); - StringBuilder sb = new StringBuilder(); - String input; - - System.out.println("Introduce texto (termina con *):"); - - - do { - input = scanner.nextLine(); - sb.append(input).append("\n"); - } while (input.indexOf('*') == -1); - - - texto = sb.toString(); - int indexAsterisco = texto.indexOf('*'); - if (indexAsterisco != -1) { - texto = texto.substring(0, indexAsterisco); - } - - - System.out.println("Texto leído:\n" + texto); - } - - public String getTexto() { - return texto; - } - - public static void main(String[] args) { - - LecturaCadena lecturaCadena = new LecturaCadena(); - Thread hiloLectura = new Thread(lecturaCadena); - hiloLectura.start(); - - try { - hiloLectura.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} From 9bd4845ac409c327fa25f6ce43deafd6b1e4b8b1 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:57:24 +0200 Subject: [PATCH 13/41] Add files via upload --- UA1/tareas/dev_0/EjecutarprogramaEnHilo.java | 20 ++++++++ UA1/tareas/dev_0/LecturaCadena.java | 51 ++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 UA1/tareas/dev_0/EjecutarprogramaEnHilo.java create mode 100644 UA1/tareas/dev_0/LecturaCadena.java diff --git a/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java b/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java new file mode 100644 index 00000000..452ee2e0 --- /dev/null +++ b/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java @@ -0,0 +1,20 @@ +public class EjecutarProgramaEnHilo implements Runnable { + + @Override + public void run() { + + LecturaCadena.main(null); + } + + public static void main(String[] args) { + + Thread hiloEjecucion = new Thread(new EjecutarProgramaEnHilo()); + hiloEjecucion.start(); + + try { + hiloEjecucion.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/UA1/tareas/dev_0/LecturaCadena.java b/UA1/tareas/dev_0/LecturaCadena.java new file mode 100644 index 00000000..fa47092e --- /dev/null +++ b/UA1/tareas/dev_0/LecturaCadena.java @@ -0,0 +1,51 @@ +import java.util.Scanner; + +public class LecturaCadena implements Runnable { + private String texto; + + public LecturaCadena() { + this.texto = ""; + } + + @Override + public void run() { + Scanner scanner = new Scanner(System.in); + StringBuilder sb = new StringBuilder(); + String input; + + System.out.println("Introduce texto (termina con *):"); + + + do { + input = scanner.nextLine(); + sb.append(input).append("\n"); + } while (input.indexOf('*') == -1); + + + texto = sb.toString(); + int indexAsterisco = texto.indexOf('*'); + if (indexAsterisco != -1) { + texto = texto.substring(0, indexAsterisco); + } + + + System.out.println("Texto leído:\n" + texto); + } + + public String getTexto() { + return texto; + } + + public static void main(String[] args) { + + LecturaCadena lecturaCadena = new LecturaCadena(); + Thread hiloLectura = new Thread(lecturaCadena); + hiloLectura.start(); + + try { + hiloLectura.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} From 9cad939e512ae6d143cd7aa5bf94ea1c4d363daa Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Wed, 9 Oct 2024 12:35:52 +0200 Subject: [PATCH 14/41] =?UTF-8?q?A=C3=B1adida=20la=20funcionalidad=20de=20?= =?UTF-8?q?testeo=20a=20la=20practica=20de=20hilos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml | 8 +++ .../src/main/java/org/example/Hilo2Test.java | 72 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml b/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml index 01f791e8..dae6a12d 100644 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml @@ -13,5 +13,13 @@ <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13.2</version> + <scope>compile</scope> + </dependency> + </dependencies> </project> \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java new file mode 100644 index 00000000..c87b903b --- /dev/null +++ b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java @@ -0,0 +1,72 @@ +package org.example; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import static org.junit.Assert.assertTrue; + +/* +* He creado una clase que va a testear las respuestas de el hilo 2 de modo que puedo ejecutar esto de +* forma independiente y verificar que el hilo 2 funciona. Lo he hecho en el mismo directorio pero también +* se puede hacer en la parte de test. +* */ +public class Hilo2Test { + @Test + public void testHiloOpcion1() throws InterruptedException { + String input = "1\n"; + ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + System.setOut(new PrintStream(out)); + + hilo_2 hilo = new hilo_2(); + hilo.start(); + + hilo.join(); //espero a que termine el hilo y luego compruebo la salida + + String output = out.toString(); + assertTrue(output.contains("Perfecto ejecutemos el siguiente hilo")); + } + + @Test + public void testHiloOpcion2() throws InterruptedException { + String input = "2\n"; + ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + System.setOut(new PrintStream(out)); + + hilo_2 hilo = new hilo_2(); + hilo.start(); + + hilo.join(); //espero a que termine el hilo y luego compruebo la salida + + String output = out.toString(); + assertTrue(output.contains("Si pones * te saldrás")); + } + + @Test + public void testHiloOpcionIncorrecta() throws InterruptedException { + String input = "3\n"; + ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + System.setOut(new PrintStream(out)); + + hilo_2 hilo = new hilo_2(); + hilo.start(); + + hilo.join(); //espero a que termine el hilo y luego compruebo la salida + + + String output = out.toString(); + assertTrue(output.contains("Opción incorrecta. Seleccione un número entre 1 y 2.")); //aqui compruebo que la opcion es correcta + } +} + From ff6480b16d955490e83ebf77b23f7103ea347d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Wed, 9 Oct 2024 19:01:07 +0200 Subject: [PATCH 15/41] Update README.md --- UA1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UA1/README.md b/UA1/README.md index 03d23be1..745633de 100644 --- a/UA1/README.md +++ b/UA1/README.md @@ -125,7 +125,7 @@ Crea un programa Java que implemente las siguientes Funcionalidades Requeridas ( ### **EX1 - Examen UA1 - Programación Multiproceso** ##### **Criterios a), b), c), d), e) f), g) y h)** ``` -Fecha de Examen: xx/10/2024 - 17:45:00 +Fecha de Examen: 16/10/2024 - 16:45:00 ``` El examen constará de dos partes: * Una primera parte de teoría, centrada sobre todo en los criterios de evaluación b), c) y d). Serán unas preguntas cortas, donde deberéis responder utilizando vuestras propias palabras. Para esta parte de teoría daremos un tiempo fijo y no permitiré el acceso a internet salvo para subir el resultado al repositorio. From 3f702781353bd33a688c2a9a1a3631a833183e87 Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Tue, 15 Oct 2024 16:57:09 +0200 Subject: [PATCH 16/41] tarea tres finalizada implementacion de test incluida --- UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java | 54 +++++++++++++++++ UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java | 59 +++++++++++++++++++ .../dev_9/ua1_tarea_3_dev9/TestHilo.java | 35 +++++++++++ 3 files changed, 148 insertions(+) create mode 100644 UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java create mode 100644 UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java create mode 100644 UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java diff --git a/UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java b/UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java new file mode 100644 index 00000000..083acf60 --- /dev/null +++ b/UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java @@ -0,0 +1,54 @@ +package org.example; + +public class Hilo implements Runnable{ + + /* + * Creamos dos variables una que recibe los argumentos y otra que retorna el codigo de acceso + * */ + private String [] argumentos; + public int exitCode; + + public Hilo(String [] argumentos) { + this.argumentos = argumentos; + this.exitCode = 0; + } + + @Override + public void run() { + if(argumentos.length < 1) { + establecerExitCode(1); + } + for(String arg : argumentos) { + try { + int esNumero = Integer.parseInt(arg); + + if(esNumero < 0 ) { + //Numero negativo + establecerExitCode(3); + } + + } catch(Exception e) { + //Estamos hablando de una cadena de texto + establecerExitCode(2); + } + } + } + + public void establecerExitCode(int exitCode) { + this.exitCode = exitCode; + } + + public int getExitCode() { + return this.exitCode; + } + + /* + * Esta funcion retorna un objeto que esta formado por una variable result que tiene el valor de exitCode + * */ + public Object[] probarTest() { + + Object[] result = {getExitCode()}; + + return result; + } +} diff --git a/UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java b/UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java new file mode 100644 index 00000000..267af95e --- /dev/null +++ b/UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java @@ -0,0 +1,59 @@ +package org.example; + +import java.util.ArrayList; +import java.util.List; + + +public class Main { + public static void main(String[] args) { + + /* + * Creamos la instancia de la clase hilo y creamos una instancia de la clase thread que contiene la clase hilo + * que va a ser ejecutada y recibirá como argumento args que será lo que recibe de la terminal a la hora de crear + * el programa. + * */ + + Hilo hilo = new Hilo(args); + + Thread proceso = new Thread(hilo); + + proceso.start(); + + /* + * Hacemos un join para poder escribir texto después de que finalize la ejecución de el hilo + * */ + try{ + proceso.join(); + + }catch (Exception e) { + e.printStackTrace(); + } + + + /* + * Comprobamos el exitCode de la clase hilo y el funcion de lo que haga hacemos una cosa u otraº + * */ + switch (hilo.getExitCode()) { + case 0: + System.out.println("Has introducido un resultado que no teniamos contemplado"); + System.exit(hilo.exitCode); + + case 1: + System.out.println("No has introducido nada. Vuelve a intentarlo"); + System.exit(hilo.exitCode); + case 2: + System.out.println("Has introducido una cadena de texto"); + System.exit(hilo.exitCode); + + case 3: + System.out.println("El numero es negativo"); + System.exit(hilo.exitCode); + default: + System.out.println("No entiendo lo que has introducido. Vuelve a intentarlo"); + System.exit(hilo.exitCode); + } + + System.out.println("Ha finalizado el programa"); + + } +} \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java b/UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java new file mode 100644 index 00000000..15f35dc0 --- /dev/null +++ b/UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java @@ -0,0 +1,35 @@ +package org.example; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestHilo { + + /* + * Implementamos un test que no recibe argumentos + * */ + @Test + public void testHilo() { + String [] args = {}; + Hilo hilo = new Hilo(args); + + Thread proceso = new Thread(hilo); + + proceso.start(); + + try{ + + proceso.join(); + + } catch(InterruptedException e){ + e.printStackTrace(); + } + + Object contenidoHilo[] = hilo.probarTest(); + assertEquals(1,contenidoHilo[0]); + + System.out.println("El test ha funcionado correctamente"); + + } +} From e17749bc44c020346039f47f8640f8cfba3808a6 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:07:44 +0200 Subject: [PATCH 17/41] Add files via upload --- ...ci\303\263n de procesos en Java (II).java" | 22 ++++++++++++ ...rocesos en Java (II).segundoprograma.java" | 36 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 "UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" create mode 100644 "UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" diff --git "a/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" "b/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" new file mode 100644 index 00000000..b5a42c00 --- /dev/null +++ "b/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" @@ -0,0 +1,22 @@ +public class ProcesoPrincipal { + public static void main(String[] args) { + if (args.length < 1) { + System.exit(1); + } + + try { + + int num = Integer.parseInt(args[0]); + + + if (num < 0) { + System.exit(3); + } else { + System.exit(0); + } + } catch (NumberFormatException e) { + + System.exit(2); + } + } +} diff --git "a/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" "b/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" new file mode 100644 index 00000000..b4829b36 --- /dev/null +++ "b/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" @@ -0,0 +1,36 @@ +import java.io.IOException; + +public class EjecutarProceso { + public static void main(String[] args) { + try { + String[] comando = new String[args.length + 2]; + comando[0] = "java"; + comando[1] = "ProcesoPrincipal"; + System.arraycopy(args, 0, comando, 2, args.length); + + + Process proceso = Runtime.getRuntime().exec(comando); + int codigoSalida = proceso.waitFor(); + + switch (codigoSalida) { + case 0: + System.out.println("El argumento es un número entero válido."); + break; + case 1: + System.out.println("No se proporcionaron argumentos."); + break; + case 2: + System.out.println("El argumento es una cadena."); + break; + case 3: + System.out.println("El argumento es un número entero menor que 0."); + break; + default: + System.out.println("Código de salida desconocido: " + codigoSalida); + break; + } + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } +} From b930bef6f515d97b3572155cbaaef5b479a156c3 Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Wed, 16 Oct 2024 17:39:48 +0200 Subject: [PATCH 18/41] =?UTF-8?q?realizada=20la=20entrega=20de=20la=20part?= =?UTF-8?q?e=20te=C3=B3rica=20de=20el=20examen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UA1/examen/dev_9/ua1ex1_teoria.txt | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/UA1/examen/dev_9/ua1ex1_teoria.txt b/UA1/examen/dev_9/ua1ex1_teoria.txt index e7a3dba9..fe53bd87 100644 --- a/UA1/examen/dev_9/ua1ex1_teoria.txt +++ b/UA1/examen/dev_9/ua1ex1_teoria.txt @@ -1,16 +1,32 @@ -NOMBRE: -FECHA: +NOMBRE: Juan Deogracias Moya +FECHA: 16/10/2024 PARTE TEÓRICA a) Definición de proceso. 1 punto. +Un proceso es un programa que tiene su propio espacio en memoria. Por tanto los procesos son independientes y no comparten memoria directamente ni recursos del sistema. + +Para ejecutar programas externos en Java se pueden usar las clases `Process` y ProcessBuilder. + +Un ejemplo de un proceso es una cadena de restaurantes en los cuales tenemos que tener diferentes procesos para poder obtener la información de los distintos programas. Es decir cada proceso va a tener una función específica para obtener las comandas que se han realizado en x restaurante y otro programa el cual es independiente como comenté anteriormente para analizar la rentabilidad de cada restaurante. + b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. +En primer lugar vamos a definir un hilo el cual es un subproceso independiente dentro de un programa. Estos hilos trabajan con programación concurrente (no secuencial) es decir que de forma simultánea cada uno de estos subprocesos (hilos) realizan una tarea específica dentro de un programa mejorando la eficiencia. Es necesario comentar que los hilos comparten espacio de memoria dentro de un programa. + +En resumen, cual es la relación entre hilo y proceso, que un hilo es un subproceso que comparte memoria con el resto de hilos de dentro de un programa y el proceso a diferencia de el hilo alberga su propio espacio y no necesita compartir nada. + +Un ejemplo de hilo sería un banco donde varias personas necesitan acceder a los recursos de el banco, una persona sacará dinero de ese banco, esa misma persona puede añadir dinero a su cuenta bancaria, etc. En este caso el hilo persona tendría que acceder al recurso de el banco y a la misma vez otra persona realiza saca dinero de ese mismo banco esto sería concurrencia. + c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. +El concepto de programación concurrente quiere decir la realización de varias tareas de forma simultanea así como por ejemplo los hilos que utilizan dicho concepto. Cuando hablamos de programación concurrente tenemos que comentar que no todo es bueno ya que si accedemos a el mismo recurso a la misma vez desde distintos hilos surge el concepto de condición de carrera. Pero todo esto puede ser controlado de diferentes formas usando conceptos como el sync, el orden de prioridad de cada hilo... No obstante en java se pueden crear hilos de dos formas distintas extendiendo de la clase Thread o implementando la clase Runnable (es la más utilizada), runnable permite extender de otra clase obtener sus métodos y aparte implementar los métodos de la clase Thread en cambio con Thread no puedes extender de otra clase que no sea Thread. + +Por otra parte este concepto es utilizado por la programación paralela y distribuida ambas aplican este concepto. ¿La pregunta es donde se utiliza la programación concurrente? La banca es uno de los mejores ejemplos en dicho ámbito hay frameworks que se especializan y utilizan este concepto como COBOL. + d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. -Notas: +La programación paralela es un tipo de programación concurrente donde se ejecutan simultáneamente diferentes tareas en diferentes núcleos de un procesador o en diferentes equipos (se suele utilizar el mismo equipo). En conclusión dividimos una tarea en diferentes subtareas y las podemos resolver de forma simultánea para mejorar el rendimiento a diferencia de la programación distribuida el coste de este tipo de programación es menor ya que se utilizan únicamente los recursos de un equipo. El inconveniente es que necesitas de el mismo equipo donde se encuentra el proceso para poder ejecutarlo. En Big Data o en inteligencia artificial se utiliza este concepto. -El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ +La programación distribuida ejecuta diferentes tareas utilizando en concepto de concurrencia pero en distintas máquinas que están conectadas en la misma red. Es decir podemos ejecutar diferentes procesos en diferentes ubicaciones lo cual es una clara ventaja. A pesar de ello el coste de este tipo de programación es claramente más alto debido a la necesidad de diferentes equipos. From 14558b9169606bd369bf66ba7571e1a592d5b55d Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:41:19 +0200 Subject: [PATCH 19/41] Add files via upload --- UA1/examen/dev_0/ua1ex1_teoria.txt | 52 ++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/UA1/examen/dev_0/ua1ex1_teoria.txt b/UA1/examen/dev_0/ua1ex1_teoria.txt index 2ea0d591..38e77f82 100644 --- a/UA1/examen/dev_0/ua1ex1_teoria.txt +++ b/UA1/examen/dev_0/ua1ex1_teoria.txt @@ -1,16 +1,54 @@ -NOMBRE: -FECHA: - PARTE TEÓRICA -a) Definición de proceso. 1 punto. +a) Definición de proceso. Ilustra tu solución con un ejemplo. 1 punto. + +Un proceso es un progrma en ejecucion que no comparte memoria con nadie mas es decir en el caso de que haya mas de 1 proceso seran independientes uno de otros . +Un ejemplo puede ser el caso de un programa que no quiera dar varias soluciones a la vez +por ejemplo si el nos quiere dar la raiz y el numero elevado a algo a la vez podemos crear dos procesos uno para cada calculo y saldran a la vez. + +b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. Ilustra tu solución con un ejemplo. 3 puntos. -b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. +Se relacionan en que ambos se puede usar para realizar varias acciones a la vez pero uno es diferente del otro ya que los procesos no comparten memoria con nadie mientras que los hilos si lo hacen con la clase a la que se les llama. +Un ejemplo de esto puede el programa del ejercicio anterior hecho con procesos te mostrara varios procesos y si se lo pides varias veces con distintos numeros +saldran de forma ordenada , con los hilos sera igual pero no saldran de forma ordenada ya que los hilos empiezan a funcionar de forma aleatoria. c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. + +La programcion concurrente permite ejecutar varios procesos al mismo tiempo + +Las principales caracteristicas son : +-Es mas eficiente. +-Me velocidad de ejecución. + +Los ambitos en los que se puede aplicar son en aquellos en los que los recursos de una solo maquina no son suficientes. +Un ejemplo de programacion concurrente sería un ordenador que podría analizar datos de miles de estaciones meteorológicas, imágenes satelitales y muestras de suelo para predecir el momento óptimo de siembra para un cultivo en particular . + + d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. -Notas: +Un programa paralelo esta distribuido entre varios nucleos de un mismo ordenador mientras que la distribuida esta distribuido entre varios ordenadores conectada a una misma red. +Paralelo +ventajas: +-Ejecucion simultanea +-Disminución del tiempo de ejecución +-Facilita la capacidad de solucionar problemas complejos +desventajas: +-Mayor complejidad. +-Programas mas dificiles de desarrollar. +-Mayor consumo de energía. +-A la hora de querer acceder a cualquier dato sera más complicado + +Distribuida +ventajas: +-Capacidad para compartir datos y recursos +-Capacidad de crecimiento +-Mas flexible +-Alta disponibilidad + +desventajas: +-Mas complejo +-Problemas con las redes +-Problemas de seguridad. + -El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ From 9098f513afb0e5b278a47ed923c0c22a2524283c Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Wed, 16 Oct 2024 18:53:40 +0200 Subject: [PATCH 20/41] Entrega de la primera practica de examen terminada --- UA1/examen/dev_9/ua1ex1.c | 114 +++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 2 deletions(-) diff --git a/UA1/examen/dev_9/ua1ex1.c b/UA1/examen/dev_9/ua1ex1.c index 8de5952c..f657c93e 100644 --- a/UA1/examen/dev_9/ua1ex1.c +++ b/UA1/examen/dev_9/ua1ex1.c @@ -1,7 +1,7 @@ /* -NOMBRE: -FECHA: +NOMBRE: Juan Deogracias Moya +FECHA: 16/10/2024 PARTE PRÁCTICA @@ -22,3 +22,113 @@ Los warnings del presente ... son los errores del futuro. El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ */ + + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + + +/* +* Creamos una funcion que nos permite mostrar por pantalla el numero de hijo que es +* el pid de el proceso y el pid de el proceso padre +*/ +void imprimir(int numero,int pid_hijo, int pid_padre) { + printf("Soy el hijo %d , PID_Hijo : %d, PID_Padre :%d\n",numero, getpid(),getppid()); +} + + +/* IMPORTANTE +* fork == -1 Nos devolvería un error +* fork == 0 Estamos en el proceso hijo +* fork == 1 Estamos en el proceso padre +*/ +int main() +{ + /* + * Definimos cada una de los procesos que vamos ha tener en este caso como + * tenemos tres hijos tendremos tres variables de los distintos 3 hijos. + */ + pid_t pid_1,pid_2,pid_3; + + printf("\t\t**BIENVENIDO**\n\n"); + /* + * Mediante fork() estamos haciendo una copia exacta de el proceso padre + * y mediante las condiciones if-else podemos decirle a cada una de las copias o + * procesos que es lo que tiene que hacer en cada momento. + */ + pid_1 = fork(); + + /* + * Aplicamos el control de errores + */ + if(pid_1 < 0 ) { + printf("Error"); + return -1; + } + + if(pid_1 == 0) { + + imprimir(1,getpid(),getppid()); + + }else { + /* + * obligamos al proceso padre a que espere la ejecucion de los hijos + */ + wait(NULL); + + pid_2 = fork(); + + /* + * Implementamos control de errores de modo que si devulve un numero que no + * es ni cero ni uno estaríamos en un Error + */ + if(pid_2 < 0 ) { + printf("Error"); + return -1; + } + + if(pid_2 == 0) { + /* + * Creamos un proceso hijo denominado pid_2 dentro de el proceso main + */ + imprimir(2,getpid(),getppid()); + + }else { + + /* + * Creamos un proceso hijo denominado pid_3 dentro de el proceso main + */ + pid_3 = fork(); + + if(pid_3 < 0 ) { + printf("Error"); + return -1; + } + + if(pid_3 == 0) { + /* + * Llamamos a la funcion para imprimir por pantalla el pid de hijo y padre + */ + imprimir(3,getpid(),getppid()); + + } else { + /* + * implementamos wait(NULL) de modo que el proceso padre espere + * la finalización de la ejecución de los procesos hijos + */ + + wait(NULL); + + /* + * Mostramos en pantalla el pid de el proceso padre de todos el cual es el main + */ + printf("Soy el proceso padre de todos (main) con PID %d\n", getpid()); + + printf("\n\t**EL PROGRAMA A FINALIZADO**\n\n"); + } + } + } +} From f7180d80d38d2061b9f803450aa865a2dc755c7d Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:56:30 +0200 Subject: [PATCH 21/41] Add files via upload --- UA1/examen/dev_0/ua1ex1.c | 66 +++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/UA1/examen/dev_0/ua1ex1.c b/UA1/examen/dev_0/ua1ex1.c index 9c70ebfd..67453f7f 100644 --- a/UA1/examen/dev_0/ua1ex1.c +++ b/UA1/examen/dev_0/ua1ex1.c @@ -1,24 +1,44 @@ -/* +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> -NOMBRE: -FECHA: - -PARTE PRÁCTICA - -FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos -FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos -FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos -FR4: Implementa el control de errores - 2 puntos -FR5: Documenta y estructura el código - 2 puntos - -Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler - -Notas: - -Los comentarios (descriptivos y concisos) en el código ... siempre son bien. -Los nombres de las variables autodescriptivos ... siempre son bien. -Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. -Los warnings del presente ... son los errores del futuro. -El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ - -*/ +int main() +{ + int pid, pid1, pid2; + + + // La variable pid almacena el valor devuelto del fork() system call + pid = fork(); + + // Si fork() devuelve 0 indica que es un hijo + if (pid == 0) { + printf("child[1] --> pid = %d and ppid = %d\n", + getpid(), getppid()); + } + + else { + pid1 = fork(); + // segundo hijo. + if (pid1 == 0) { + printf("child[2] --> pid = %d and ppid = %d\n", + getpid(), getppid()); + } + else { + pid2 = fork(); + if (pid2 == 0) { + //tercer hijo. + printf("child[3] --> pid = %d and ppid = %d\n", + getpid(), getppid()); + } + + //Si el valor retornado por el fork() es >0 + else { + //Este código sólo lo ejecutará el Padre + printf("parent --> pid = %d\n", getpid()); + } + } + } + + return 0; +} \ No newline at end of file From 8b80a02edcb059550a34f5ddd7abc82096bd749a Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Wed, 16 Oct 2024 19:58:29 +0200 Subject: [PATCH 22/41] terminado el examen e implementado un test no me ha dado tiempo a mas --- .../dev_9/ejercicio2/EstadoPlantas.java | 40 +++++++++++++++ UA1/examen/dev_9/ejercicio2/Humedad.java | 47 +++++++++++++++++ UA1/examen/dev_9/ejercicio2/Main.java | 30 +++++++++++ UA1/examen/dev_9/ejercicio2/Temperatura.java | 51 +++++++++++++++++++ UA1/examen/dev_9/ejercicio2/TestHilos.java | 35 +++++++++++++ 5 files changed, 203 insertions(+) create mode 100644 UA1/examen/dev_9/ejercicio2/EstadoPlantas.java create mode 100644 UA1/examen/dev_9/ejercicio2/Humedad.java create mode 100644 UA1/examen/dev_9/ejercicio2/Main.java create mode 100644 UA1/examen/dev_9/ejercicio2/Temperatura.java create mode 100644 UA1/examen/dev_9/ejercicio2/TestHilos.java diff --git a/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java b/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java new file mode 100644 index 00000000..ff24d9af --- /dev/null +++ b/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java @@ -0,0 +1,40 @@ +package org.example; + +public class EstadoPlantas implements Runnable{ + public int contador; + public String nombre; + public long startTime; + + public EstadoPlantas (String nombre) { + contador = 0; + this.nombre = nombre; + this.startTime = System.currentTimeMillis(); + } + + + @Override + public void run() { + while(contador < 10) { + + double estado = Math.random() * 100; + int numero = (int) (Math.random() * 3000) + 1; + + long tiempo = (System.currentTimeMillis() -startTime); + + System.out.println("El estado de la planta en el sensor " + + nombre +" es de " + estado + " en " + tiempo + " milisegundos"); + + //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos + try { + + Thread.sleep(numero); + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + contador++; + + } + } +} diff --git a/UA1/examen/dev_9/ejercicio2/Humedad.java b/UA1/examen/dev_9/ejercicio2/Humedad.java new file mode 100644 index 00000000..722711b7 --- /dev/null +++ b/UA1/examen/dev_9/ejercicio2/Humedad.java @@ -0,0 +1,47 @@ +package org.example; + +public class Humedad implements Runnable{ + + public double cantidad_humedad; + public int contador; + public String nombre; + public long startTime; + + public Humedad(String nombre) { + this.contador = 0; + this.cantidad_humedad= 0.0f; + this.nombre = nombre; + this.startTime = System.currentTimeMillis(); + } + + @Override + public void run() { + while(contador < 10) { + + double humedad = Math.random() * 100; + + int numero = (int) (Math.random() * 3000) + 1; + + long tiempo = (System.currentTimeMillis() -startTime); + + System.out.println("La humedad en el sensor " + nombre +" es de " + humedad + + " % en el tiempo de " + tiempo); + + //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos + try { + + Thread.sleep((long) numero); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + contador++; + + } + + + + + + } +} diff --git a/UA1/examen/dev_9/ejercicio2/Main.java b/UA1/examen/dev_9/ejercicio2/Main.java new file mode 100644 index 00000000..ecf469e2 --- /dev/null +++ b/UA1/examen/dev_9/ejercicio2/Main.java @@ -0,0 +1,30 @@ +package org.example; + +//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or +// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter. +public class Main { + public static void main(String[] args) throws Exception { + //TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text + // to see how IntelliJ IDEA suggests fixing it. + //Instanciamos las clases + + System.out.println("\t\t**COMENZAMOS**"); + Temperatura temperatura = new Temperatura("Temperatura"); + Humedad humedad = new Humedad("Humedad"); + EstadoPlantas plantas = new EstadoPlantas("Estado"); + + //Creamos el hilo que extiende de Runnable + Thread t = new Thread(temperatura); + Thread h = new Thread(humedad); + Thread p = new Thread(plantas); + + t.start(); + h.start(); + p.start(); + + + + + + } +} \ No newline at end of file diff --git a/UA1/examen/dev_9/ejercicio2/Temperatura.java b/UA1/examen/dev_9/ejercicio2/Temperatura.java new file mode 100644 index 00000000..0ea7cc66 --- /dev/null +++ b/UA1/examen/dev_9/ejercicio2/Temperatura.java @@ -0,0 +1,51 @@ +package org.example; + +public class Temperatura implements Runnable{ + + public float temperature; + public String nombre_sensor; + public int contador; + public long startTime; + public int estado; + + public Temperatura(String nombre_sensor) { + this.temperature = temperature; + this.contador = 0; + this.nombre_sensor = nombre_sensor; + this.startTime = System.currentTimeMillis(); + estado = 0; + } + + + @Override + public void run() { + while(contador < 10) { + + double humedad = Math.random() * 100; + + //creamos el numero aleatorio y el tiempo en el que se ha creado + int numero = (int) (Math.random() * 3000) + 1; + long tiempo = (System.currentTimeMillis() -startTime); + + System.out.println("La temperatura en el sensor " + nombre_sensor + " es de " + humedad + " grados en el tiempo de " + + " en el tiempo de " + tiempo); + + //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos + try { + + Thread.sleep(numero); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + contador++; + + } + } + public int probarTest() { + + this.estado = 1; + + return 1; + } +} diff --git a/UA1/examen/dev_9/ejercicio2/TestHilos.java b/UA1/examen/dev_9/ejercicio2/TestHilos.java new file mode 100644 index 00000000..3e9bd2f4 --- /dev/null +++ b/UA1/examen/dev_9/ejercicio2/TestHilos.java @@ -0,0 +1,35 @@ +package org.example; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestHilos { + /* + * Implementamos un test que no recibe argumentos + * */ + + @Test + public void testHiloTemperatura() { + Temperatura temperatura = new Temperatura("Temperatura"); + + //Creamos el hilo que extiende de Runnable + Thread t = new Thread(temperatura); + + + try{ + t.join(); + + + }catch (Exception e) { + e.printStackTrace(); + } + + assertEquals(temperatura.probarTest(),1); + + } + + + + +} From 60fb9e8f8ece49095e4c29555f6735236f1d2934 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 16 Oct 2024 20:01:26 +0200 Subject: [PATCH 23/41] Add files via upload --- UA1/examen/dev_0/ua1ex1p2.java | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 UA1/examen/dev_0/ua1ex1p2.java diff --git a/UA1/examen/dev_0/ua1ex1p2.java b/UA1/examen/dev_0/ua1ex1p2.java new file mode 100644 index 00000000..28aeffcf --- /dev/null +++ b/UA1/examen/dev_0/ua1ex1p2.java @@ -0,0 +1,49 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Sensores"); + Thread hilo1 = new Thread(new Hilo1()); + Thread hilo2 = new Thread(new Hilo2()); + Thread hilo3 = new Thread(new Hilo3()); + hilo1.start(); + hilo2.start(); + hilo3.start(); + } + + +} + +class Hilo1 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println("En el check "+(i+1)+" del sensor 1, la temperatura es de :"+Math.random()* 41); + } + } +} + +class Hilo2 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println("En el check "+(i+1)+" del sensor 2, el porcentage de humedad es de :"+Math.random()*101+"%"); + } + } +} + +class Hilo3 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + if (Math.random()*1>0.5) { + System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es : mala" ); + } + else { + System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es :buena" ); + + } + } + } +} \ No newline at end of file From a94333b1ccd39670f60b99f45f91faadc8e21e65 Mon Sep 17 00:00:00 2001 From: Pablo <pazb2003@gmail.com> Date: Wed, 23 Oct 2024 19:27:31 +0200 Subject: [PATCH 24/41] renombrar carpetas --- UA1/examen/{dev_0 => dev_3}/ua1ex1.c | 86 +++++++------- UA1/examen/{dev_0 => dev_3}/ua1ex1_teoria.txt | 108 +++++++++--------- UA1/examen/{dev_0 => dev_3}/ua1ex1p2.java | 96 ++++++++-------- 3 files changed, 145 insertions(+), 145 deletions(-) rename UA1/examen/{dev_0 => dev_3}/ua1ex1.c (96%) rename UA1/examen/{dev_0 => dev_3}/ua1ex1_teoria.txt (98%) rename UA1/examen/{dev_0 => dev_3}/ua1ex1p2.java (96%) diff --git a/UA1/examen/dev_0/ua1ex1.c b/UA1/examen/dev_3/ua1ex1.c similarity index 96% rename from UA1/examen/dev_0/ua1ex1.c rename to UA1/examen/dev_3/ua1ex1.c index 67453f7f..6df09b66 100644 --- a/UA1/examen/dev_0/ua1ex1.c +++ b/UA1/examen/dev_3/ua1ex1.c @@ -1,44 +1,44 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/wait.h> - -int main() -{ - int pid, pid1, pid2; - - - // La variable pid almacena el valor devuelto del fork() system call - pid = fork(); - - // Si fork() devuelve 0 indica que es un hijo - if (pid == 0) { - printf("child[1] --> pid = %d and ppid = %d\n", - getpid(), getppid()); - } - - else { - pid1 = fork(); - // segundo hijo. - if (pid1 == 0) { - printf("child[2] --> pid = %d and ppid = %d\n", - getpid(), getppid()); - } - else { - pid2 = fork(); - if (pid2 == 0) { - //tercer hijo. - printf("child[3] --> pid = %d and ppid = %d\n", - getpid(), getppid()); - } - - //Si el valor retornado por el fork() es >0 - else { - //Este código sólo lo ejecutará el Padre - printf("parent --> pid = %d\n", getpid()); - } - } - } - - return 0; +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> + +int main() +{ + int pid, pid1, pid2; + + + // La variable pid almacena el valor devuelto del fork() system call + pid = fork(); + + // Si fork() devuelve 0 indica que es un hijo + if (pid == 0) { + printf("child[1] --> pid = %d and ppid = %d\n", + getpid(), getppid()); + } + + else { + pid1 = fork(); + // segundo hijo. + if (pid1 == 0) { + printf("child[2] --> pid = %d and ppid = %d\n", + getpid(), getppid()); + } + else { + pid2 = fork(); + if (pid2 == 0) { + //tercer hijo. + printf("child[3] --> pid = %d and ppid = %d\n", + getpid(), getppid()); + } + + //Si el valor retornado por el fork() es >0 + else { + //Este código sólo lo ejecutará el Padre + printf("parent --> pid = %d\n", getpid()); + } + } + } + + return 0; } \ No newline at end of file diff --git a/UA1/examen/dev_0/ua1ex1_teoria.txt b/UA1/examen/dev_3/ua1ex1_teoria.txt similarity index 98% rename from UA1/examen/dev_0/ua1ex1_teoria.txt rename to UA1/examen/dev_3/ua1ex1_teoria.txt index 38e77f82..32b8644e 100644 --- a/UA1/examen/dev_0/ua1ex1_teoria.txt +++ b/UA1/examen/dev_3/ua1ex1_teoria.txt @@ -1,54 +1,54 @@ -PARTE TEÓRICA - -a) Definición de proceso. Ilustra tu solución con un ejemplo. 1 punto. - -Un proceso es un progrma en ejecucion que no comparte memoria con nadie mas es decir en el caso de que haya mas de 1 proceso seran independientes uno de otros . -Un ejemplo puede ser el caso de un programa que no quiera dar varias soluciones a la vez -por ejemplo si el nos quiere dar la raiz y el numero elevado a algo a la vez podemos crear dos procesos uno para cada calculo y saldran a la vez. - -b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. Ilustra tu solución con un ejemplo. 3 puntos. - -Se relacionan en que ambos se puede usar para realizar varias acciones a la vez pero uno es diferente del otro ya que los procesos no comparten memoria con nadie mientras que los hilos si lo hacen con la clase a la que se les llama. -Un ejemplo de esto puede el programa del ejercicio anterior hecho con procesos te mostrara varios procesos y si se lo pides varias veces con distintos numeros -saldran de forma ordenada , con los hilos sera igual pero no saldran de forma ordenada ya que los hilos empiezan a funcionar de forma aleatoria. - -c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. - - -La programcion concurrente permite ejecutar varios procesos al mismo tiempo - -Las principales caracteristicas son : --Es mas eficiente. --Me velocidad de ejecución. - -Los ambitos en los que se puede aplicar son en aquellos en los que los recursos de una solo maquina no son suficientes. -Un ejemplo de programacion concurrente sería un ordenador que podría analizar datos de miles de estaciones meteorológicas, imágenes satelitales y muestras de suelo para predecir el momento óptimo de siembra para un cultivo en particular . - - -d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. - -Un programa paralelo esta distribuido entre varios nucleos de un mismo ordenador mientras que la distribuida esta distribuido entre varios ordenadores conectada a una misma red. -Paralelo -ventajas: --Ejecucion simultanea --Disminución del tiempo de ejecución --Facilita la capacidad de solucionar problemas complejos -desventajas: --Mayor complejidad. --Programas mas dificiles de desarrollar. --Mayor consumo de energía. --A la hora de querer acceder a cualquier dato sera más complicado - -Distribuida -ventajas: --Capacidad para compartir datos y recursos --Capacidad de crecimiento --Mas flexible --Alta disponibilidad - -desventajas: --Mas complejo --Problemas con las redes --Problemas de seguridad. - - +PARTE TEÓRICA + +a) Definición de proceso. Ilustra tu solución con un ejemplo. 1 punto. + +Un proceso es un progrma en ejecucion que no comparte memoria con nadie mas es decir en el caso de que haya mas de 1 proceso seran independientes uno de otros . +Un ejemplo puede ser el caso de un programa que no quiera dar varias soluciones a la vez +por ejemplo si el nos quiere dar la raiz y el numero elevado a algo a la vez podemos crear dos procesos uno para cada calculo y saldran a la vez. + +b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. Ilustra tu solución con un ejemplo. 3 puntos. + +Se relacionan en que ambos se puede usar para realizar varias acciones a la vez pero uno es diferente del otro ya que los procesos no comparten memoria con nadie mientras que los hilos si lo hacen con la clase a la que se les llama. +Un ejemplo de esto puede el programa del ejercicio anterior hecho con procesos te mostrara varios procesos y si se lo pides varias veces con distintos numeros +saldran de forma ordenada , con los hilos sera igual pero no saldran de forma ordenada ya que los hilos empiezan a funcionar de forma aleatoria. + +c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. + + +La programcion concurrente permite ejecutar varios procesos al mismo tiempo + +Las principales caracteristicas son : +-Es mas eficiente. +-Me velocidad de ejecución. + +Los ambitos en los que se puede aplicar son en aquellos en los que los recursos de una solo maquina no son suficientes. +Un ejemplo de programacion concurrente sería un ordenador que podría analizar datos de miles de estaciones meteorológicas, imágenes satelitales y muestras de suelo para predecir el momento óptimo de siembra para un cultivo en particular . + + +d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. + +Un programa paralelo esta distribuido entre varios nucleos de un mismo ordenador mientras que la distribuida esta distribuido entre varios ordenadores conectada a una misma red. +Paralelo +ventajas: +-Ejecucion simultanea +-Disminución del tiempo de ejecución +-Facilita la capacidad de solucionar problemas complejos +desventajas: +-Mayor complejidad. +-Programas mas dificiles de desarrollar. +-Mayor consumo de energía. +-A la hora de querer acceder a cualquier dato sera más complicado + +Distribuida +ventajas: +-Capacidad para compartir datos y recursos +-Capacidad de crecimiento +-Mas flexible +-Alta disponibilidad + +desventajas: +-Mas complejo +-Problemas con las redes +-Problemas de seguridad. + + diff --git a/UA1/examen/dev_0/ua1ex1p2.java b/UA1/examen/dev_3/ua1ex1p2.java similarity index 96% rename from UA1/examen/dev_0/ua1ex1p2.java rename to UA1/examen/dev_3/ua1ex1p2.java index 28aeffcf..240158d0 100644 --- a/UA1/examen/dev_0/ua1ex1p2.java +++ b/UA1/examen/dev_3/ua1ex1p2.java @@ -1,49 +1,49 @@ -public class Main { - public static void main(String[] args) { - System.out.println("Sensores"); - Thread hilo1 = new Thread(new Hilo1()); - Thread hilo2 = new Thread(new Hilo2()); - Thread hilo3 = new Thread(new Hilo3()); - hilo1.start(); - hilo2.start(); - hilo3.start(); - } - - -} - -class Hilo1 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - System.out.println("En el check "+(i+1)+" del sensor 1, la temperatura es de :"+Math.random()* 41); - } - } -} - -class Hilo2 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - System.out.println("En el check "+(i+1)+" del sensor 2, el porcentage de humedad es de :"+Math.random()*101+"%"); - } - } -} - -class Hilo3 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - if (Math.random()*1>0.5) { - System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es : mala" ); - } - else { - System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es :buena" ); - - } - } - } +public class Main { + public static void main(String[] args) { + System.out.println("Sensores"); + Thread hilo1 = new Thread(new Hilo1()); + Thread hilo2 = new Thread(new Hilo2()); + Thread hilo3 = new Thread(new Hilo3()); + hilo1.start(); + hilo2.start(); + hilo3.start(); + } + + +} + +class Hilo1 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println("En el check "+(i+1)+" del sensor 1, la temperatura es de :"+Math.random()* 41); + } + } +} + +class Hilo2 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println("En el check "+(i+1)+" del sensor 2, el porcentage de humedad es de :"+Math.random()*101+"%"); + } + } +} + +class Hilo3 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + if (Math.random()*1>0.5) { + System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es : mala" ); + } + else { + System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es :buena" ); + + } + } + } } \ No newline at end of file From 574fbdfce42024d0fbbf61951e6ed560c58ba8dd Mon Sep 17 00:00:00 2001 From: Pablo <pazb2003@gmail.com> Date: Wed, 23 Oct 2024 19:35:02 +0200 Subject: [PATCH 25/41] Mejora del ejercicio de java del examen --- UA1/examen/dev_3/Main.java | 47 ++++++++ UA1/examen/dev_3/ua1ex1ep2.java | 47 ++++++++ UA1/examen/dev_3/ua1ex1p2.java | 49 --------- .../EjecutarprogramaEnHilo.java | 40 +++---- .../{dev_0 => dev_3}/LecturaCadena.java | 102 +++++++++--------- ... - Programaci\303\263n de Procesos en C.c" | 72 ++++++------- ...ci\303\263n de procesos en Java (II).java" | 44 ++++---- ...rocesos en Java (II).segundoprograma.java" | 72 ++++++------- UA1/tareas/{dev_0 => dev_3}/tarea0 | 0 UA1/tareas/{dev_0 => dev_3}/ua1tarea1.c | 0 10 files changed, 259 insertions(+), 214 deletions(-) create mode 100644 UA1/examen/dev_3/Main.java create mode 100644 UA1/examen/dev_3/ua1ex1ep2.java delete mode 100644 UA1/examen/dev_3/ua1ex1p2.java rename UA1/tareas/{dev_0 => dev_3}/EjecutarprogramaEnHilo.java (95%) rename UA1/tareas/{dev_0 => dev_3}/LecturaCadena.java (95%) rename "UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" => "UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" (96%) rename "UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" => "UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" (95%) rename "UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" => "UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" (97%) rename UA1/tareas/{dev_0 => dev_3}/tarea0 (100%) rename UA1/tareas/{dev_0 => dev_3}/ua1tarea1.c (100%) diff --git a/UA1/examen/dev_3/Main.java b/UA1/examen/dev_3/Main.java new file mode 100644 index 00000000..cdff4358 --- /dev/null +++ b/UA1/examen/dev_3/Main.java @@ -0,0 +1,47 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Sensores"); + Thread sensorTemperatura = new Thread(new Sensor("Sensor de Temperatura")); + Thread sensorHumedad = new Thread(new Sensor("Sensor de Humedad")); + Thread sensorEstadoDePlantas= new Thread(new Hilo3()); + sensorTemperatura .start(); + sensorHumedad.start(); + sensorEstadoDePlantas.start(); + } +} +// he implementado el ejemplo que nos has puesto en el sensor 1 y 2. +class Sensor implements Runnable{ + private String nombreSensor; + + public Sensor(String nombreSensor){ + this.nombreSensor = nombreSensor; + } + @Override + public void run(){ + for (int i = 0; i < 10; i++) { + System.out.println(nombreSensor+" -Checkeo "+i+" : "+Math.random()*100); + + } + System.out.println(nombreSensor + " ha completado sus 10 ciclos de lectura."); + } +} + + +// lo he dejado igual que lo tenia antes ya que no me gusta catalogar el estado de las plantas del 1 al 100 +// y creo que la forma que lo he hecho es bastante correcta. +class Hilo3 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + if (Math.random()*1>0.5) { + System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es : mala" ); + } + else { + System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es :buena"); + + } + } + System.out.println("Sensor del estado de las plantas ha completado sus 10 ciclos de lectura."); + } +} diff --git a/UA1/examen/dev_3/ua1ex1ep2.java b/UA1/examen/dev_3/ua1ex1ep2.java new file mode 100644 index 00000000..cdff4358 --- /dev/null +++ b/UA1/examen/dev_3/ua1ex1ep2.java @@ -0,0 +1,47 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Sensores"); + Thread sensorTemperatura = new Thread(new Sensor("Sensor de Temperatura")); + Thread sensorHumedad = new Thread(new Sensor("Sensor de Humedad")); + Thread sensorEstadoDePlantas= new Thread(new Hilo3()); + sensorTemperatura .start(); + sensorHumedad.start(); + sensorEstadoDePlantas.start(); + } +} +// he implementado el ejemplo que nos has puesto en el sensor 1 y 2. +class Sensor implements Runnable{ + private String nombreSensor; + + public Sensor(String nombreSensor){ + this.nombreSensor = nombreSensor; + } + @Override + public void run(){ + for (int i = 0; i < 10; i++) { + System.out.println(nombreSensor+" -Checkeo "+i+" : "+Math.random()*100); + + } + System.out.println(nombreSensor + " ha completado sus 10 ciclos de lectura."); + } +} + + +// lo he dejado igual que lo tenia antes ya que no me gusta catalogar el estado de las plantas del 1 al 100 +// y creo que la forma que lo he hecho es bastante correcta. +class Hilo3 implements Runnable{ + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + if (Math.random()*1>0.5) { + System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es : mala" ); + } + else { + System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es :buena"); + + } + } + System.out.println("Sensor del estado de las plantas ha completado sus 10 ciclos de lectura."); + } +} diff --git a/UA1/examen/dev_3/ua1ex1p2.java b/UA1/examen/dev_3/ua1ex1p2.java deleted file mode 100644 index 240158d0..00000000 --- a/UA1/examen/dev_3/ua1ex1p2.java +++ /dev/null @@ -1,49 +0,0 @@ -public class Main { - public static void main(String[] args) { - System.out.println("Sensores"); - Thread hilo1 = new Thread(new Hilo1()); - Thread hilo2 = new Thread(new Hilo2()); - Thread hilo3 = new Thread(new Hilo3()); - hilo1.start(); - hilo2.start(); - hilo3.start(); - } - - -} - -class Hilo1 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - System.out.println("En el check "+(i+1)+" del sensor 1, la temperatura es de :"+Math.random()* 41); - } - } -} - -class Hilo2 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - System.out.println("En el check "+(i+1)+" del sensor 2, el porcentage de humedad es de :"+Math.random()*101+"%"); - } - } -} - -class Hilo3 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - if (Math.random()*1>0.5) { - System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es : mala" ); - } - else { - System.out.println("En el check " + (i + 1) + " del sensor 3, ¿la planta esta bien? es :buena" ); - - } - } - } -} \ No newline at end of file diff --git a/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java b/UA1/tareas/dev_3/EjecutarprogramaEnHilo.java similarity index 95% rename from UA1/tareas/dev_0/EjecutarprogramaEnHilo.java rename to UA1/tareas/dev_3/EjecutarprogramaEnHilo.java index 452ee2e0..69fcab0a 100644 --- a/UA1/tareas/dev_0/EjecutarprogramaEnHilo.java +++ b/UA1/tareas/dev_3/EjecutarprogramaEnHilo.java @@ -1,20 +1,20 @@ -public class EjecutarProgramaEnHilo implements Runnable { - - @Override - public void run() { - - LecturaCadena.main(null); - } - - public static void main(String[] args) { - - Thread hiloEjecucion = new Thread(new EjecutarProgramaEnHilo()); - hiloEjecucion.start(); - - try { - hiloEjecucion.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} +public class EjecutarProgramaEnHilo implements Runnable { + + @Override + public void run() { + + LecturaCadena.main(null); + } + + public static void main(String[] args) { + + Thread hiloEjecucion = new Thread(new EjecutarProgramaEnHilo()); + hiloEjecucion.start(); + + try { + hiloEjecucion.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/UA1/tareas/dev_0/LecturaCadena.java b/UA1/tareas/dev_3/LecturaCadena.java similarity index 95% rename from UA1/tareas/dev_0/LecturaCadena.java rename to UA1/tareas/dev_3/LecturaCadena.java index fa47092e..d0c2638f 100644 --- a/UA1/tareas/dev_0/LecturaCadena.java +++ b/UA1/tareas/dev_3/LecturaCadena.java @@ -1,51 +1,51 @@ -import java.util.Scanner; - -public class LecturaCadena implements Runnable { - private String texto; - - public LecturaCadena() { - this.texto = ""; - } - - @Override - public void run() { - Scanner scanner = new Scanner(System.in); - StringBuilder sb = new StringBuilder(); - String input; - - System.out.println("Introduce texto (termina con *):"); - - - do { - input = scanner.nextLine(); - sb.append(input).append("\n"); - } while (input.indexOf('*') == -1); - - - texto = sb.toString(); - int indexAsterisco = texto.indexOf('*'); - if (indexAsterisco != -1) { - texto = texto.substring(0, indexAsterisco); - } - - - System.out.println("Texto leído:\n" + texto); - } - - public String getTexto() { - return texto; - } - - public static void main(String[] args) { - - LecturaCadena lecturaCadena = new LecturaCadena(); - Thread hiloLectura = new Thread(lecturaCadena); - hiloLectura.start(); - - try { - hiloLectura.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} +import java.util.Scanner; + +public class LecturaCadena implements Runnable { + private String texto; + + public LecturaCadena() { + this.texto = ""; + } + + @Override + public void run() { + Scanner scanner = new Scanner(System.in); + StringBuilder sb = new StringBuilder(); + String input; + + System.out.println("Introduce texto (termina con *):"); + + + do { + input = scanner.nextLine(); + sb.append(input).append("\n"); + } while (input.indexOf('*') == -1); + + + texto = sb.toString(); + int indexAsterisco = texto.indexOf('*'); + if (indexAsterisco != -1) { + texto = texto.substring(0, indexAsterisco); + } + + + System.out.println("Texto leído:\n" + texto); + } + + public String getTexto() { + return texto; + } + + public static void main(String[] args) { + + LecturaCadena lecturaCadena = new LecturaCadena(); + Thread hiloLectura = new Thread(lecturaCadena); + hiloLectura.start(); + + try { + hiloLectura.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git "a/UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" "b/UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" similarity index 96% rename from "UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" rename to "UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" index 83dc2037..36c4ad7a 100644 --- "a/UA1/tareas/dev_0/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" +++ "b/UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" @@ -1,37 +1,37 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/wait.h> - -int main() { - int num; - pid_t pid; - - // FR2: Pedir al usuario una variable (ahora llamada num) - printf("Introduce una variable entera (num): "); - scanf("%d", &num); - - // FR1: Crear un proceso (uno padre y otro hijo) - pid = fork(); - - if (pid == -1) { - // Error al crear el proceso hijo - printf("Error al crear el proceso hijo\n"); - return 1; - } - - if (pid == 0) { - // FR4: Proceso hijo suma 4 a la variable num - num += 4; - printf("Proceso hijo (PID: %d): num + 4 = %d\n", getpid(), num); - } else { - // FR3: Proceso padre resta 5 a la variable num - num -= 5; - printf("Proceso padre (PID: %d): num - 5 = %d\n", getpid(), num); - - // Esperar a que termine el proceso hijo (FR5) - wait(NULL); - } - - return 0; +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> + +int main() { + int num; + pid_t pid; + + // FR2: Pedir al usuario una variable (ahora llamada num) + printf("Introduce una variable entera (num): "); + scanf("%d", &num); + + // FR1: Crear un proceso (uno padre y otro hijo) + pid = fork(); + + if (pid == -1) { + // Error al crear el proceso hijo + printf("Error al crear el proceso hijo\n"); + return 1; + } + + if (pid == 0) { + // FR4: Proceso hijo suma 4 a la variable num + num += 4; + printf("Proceso hijo (PID: %d): num + 4 = %d\n", getpid(), num); + } else { + // FR3: Proceso padre resta 5 a la variable num + num -= 5; + printf("Proceso padre (PID: %d): num - 5 = %d\n", getpid(), num); + + // Esperar a que termine el proceso hijo (FR5) + wait(NULL); + } + + return 0; } \ No newline at end of file diff --git "a/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" "b/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" similarity index 95% rename from "UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" rename to "UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" index b5a42c00..e352362b 100644 --- "a/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" +++ "b/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" @@ -1,22 +1,22 @@ -public class ProcesoPrincipal { - public static void main(String[] args) { - if (args.length < 1) { - System.exit(1); - } - - try { - - int num = Integer.parseInt(args[0]); - - - if (num < 0) { - System.exit(3); - } else { - System.exit(0); - } - } catch (NumberFormatException e) { - - System.exit(2); - } - } -} +public class ProcesoPrincipal { + public static void main(String[] args) { + if (args.length < 1) { + System.exit(1); + } + + try { + + int num = Integer.parseInt(args[0]); + + + if (num < 0) { + System.exit(3); + } else { + System.exit(0); + } + } catch (NumberFormatException e) { + + System.exit(2); + } + } +} diff --git "a/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" "b/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" similarity index 97% rename from "UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" rename to "UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" index b4829b36..6ecdc7ab 100644 --- "a/UA1/tareas/dev_0/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" +++ "b/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" @@ -1,36 +1,36 @@ -import java.io.IOException; - -public class EjecutarProceso { - public static void main(String[] args) { - try { - String[] comando = new String[args.length + 2]; - comando[0] = "java"; - comando[1] = "ProcesoPrincipal"; - System.arraycopy(args, 0, comando, 2, args.length); - - - Process proceso = Runtime.getRuntime().exec(comando); - int codigoSalida = proceso.waitFor(); - - switch (codigoSalida) { - case 0: - System.out.println("El argumento es un número entero válido."); - break; - case 1: - System.out.println("No se proporcionaron argumentos."); - break; - case 2: - System.out.println("El argumento es una cadena."); - break; - case 3: - System.out.println("El argumento es un número entero menor que 0."); - break; - default: - System.out.println("Código de salida desconocido: " + codigoSalida); - break; - } - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } -} +import java.io.IOException; + +public class EjecutarProceso { + public static void main(String[] args) { + try { + String[] comando = new String[args.length + 2]; + comando[0] = "java"; + comando[1] = "ProcesoPrincipal"; + System.arraycopy(args, 0, comando, 2, args.length); + + + Process proceso = Runtime.getRuntime().exec(comando); + int codigoSalida = proceso.waitFor(); + + switch (codigoSalida) { + case 0: + System.out.println("El argumento es un número entero válido."); + break; + case 1: + System.out.println("No se proporcionaron argumentos."); + break; + case 2: + System.out.println("El argumento es una cadena."); + break; + case 3: + System.out.println("El argumento es un número entero menor que 0."); + break; + default: + System.out.println("Código de salida desconocido: " + codigoSalida); + break; + } + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/UA1/tareas/dev_0/tarea0 b/UA1/tareas/dev_3/tarea0 similarity index 100% rename from UA1/tareas/dev_0/tarea0 rename to UA1/tareas/dev_3/tarea0 diff --git a/UA1/tareas/dev_0/ua1tarea1.c b/UA1/tareas/dev_3/ua1tarea1.c similarity index 100% rename from UA1/tareas/dev_0/ua1tarea1.c rename to UA1/tareas/dev_3/ua1tarea1.c From 622ee03b61a964e6d882ebd71f0bee36eca3e1fa Mon Sep 17 00:00:00 2001 From: Pablo <pazb2003@gmail.com> Date: Wed, 23 Oct 2024 19:36:39 +0200 Subject: [PATCH 26/41] eliminar --- UA1/examen/dev_3/Main.java | 47 -------------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 UA1/examen/dev_3/Main.java diff --git a/UA1/examen/dev_3/Main.java b/UA1/examen/dev_3/Main.java deleted file mode 100644 index cdff4358..00000000 --- a/UA1/examen/dev_3/Main.java +++ /dev/null @@ -1,47 +0,0 @@ -public class Main { - public static void main(String[] args) { - System.out.println("Sensores"); - Thread sensorTemperatura = new Thread(new Sensor("Sensor de Temperatura")); - Thread sensorHumedad = new Thread(new Sensor("Sensor de Humedad")); - Thread sensorEstadoDePlantas= new Thread(new Hilo3()); - sensorTemperatura .start(); - sensorHumedad.start(); - sensorEstadoDePlantas.start(); - } -} -// he implementado el ejemplo que nos has puesto en el sensor 1 y 2. -class Sensor implements Runnable{ - private String nombreSensor; - - public Sensor(String nombreSensor){ - this.nombreSensor = nombreSensor; - } - @Override - public void run(){ - for (int i = 0; i < 10; i++) { - System.out.println(nombreSensor+" -Checkeo "+i+" : "+Math.random()*100); - - } - System.out.println(nombreSensor + " ha completado sus 10 ciclos de lectura."); - } -} - - -// lo he dejado igual que lo tenia antes ya que no me gusta catalogar el estado de las plantas del 1 al 100 -// y creo que la forma que lo he hecho es bastante correcta. -class Hilo3 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - if (Math.random()*1>0.5) { - System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es : mala" ); - } - else { - System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es :buena"); - - } - } - System.out.println("Sensor del estado de las plantas ha completado sus 10 ciclos de lectura."); - } -} From 2373bea8d21884b4c35de239f2a36e470fbf7a97 Mon Sep 17 00:00:00 2001 From: Pabloazb <145365889+Pabloazb@users.noreply.github.com> Date: Wed, 23 Oct 2024 19:54:21 +0200 Subject: [PATCH 27/41] Revert "Mejora ejercicio java del examen" --- UA1/Entregas tema 1 | 1 - UA1/examen/dev_0/ua1ex1.c | 24 +++++++++ UA1/examen/dev_0/ua1ex1_teoria.txt | 16 ++++++ UA1/examen/dev_3/ua1ex1.c | 44 --------------- UA1/examen/dev_3/ua1ex1_teoria.txt | 54 ------------------- UA1/examen/dev_3/ua1ex1ep2.java | 47 ---------------- UA1/tareas/{dev_3 => dev_0}/ua1tarea1.c | 0 UA1/tareas/dev_3/EjecutarprogramaEnHilo.java | 20 ------- UA1/tareas/dev_3/LecturaCadena.java | 51 ------------------ ... - Programaci\303\263n de Procesos en C.c" | 37 ------------- ...ci\303\263n de procesos en Java (II).java" | 22 -------- ...rocesos en Java (II).segundoprograma.java" | 36 ------------- UA1/tareas/dev_3/tarea0 | 1 - 13 files changed, 40 insertions(+), 313 deletions(-) delete mode 100644 UA1/Entregas tema 1 create mode 100644 UA1/examen/dev_0/ua1ex1.c create mode 100644 UA1/examen/dev_0/ua1ex1_teoria.txt delete mode 100644 UA1/examen/dev_3/ua1ex1.c delete mode 100644 UA1/examen/dev_3/ua1ex1_teoria.txt delete mode 100644 UA1/examen/dev_3/ua1ex1ep2.java rename UA1/tareas/{dev_3 => dev_0}/ua1tarea1.c (100%) delete mode 100644 UA1/tareas/dev_3/EjecutarprogramaEnHilo.java delete mode 100644 UA1/tareas/dev_3/LecturaCadena.java delete mode 100644 "UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" delete mode 100644 "UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" delete mode 100644 "UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" delete mode 100644 UA1/tareas/dev_3/tarea0 diff --git a/UA1/Entregas tema 1 b/UA1/Entregas tema 1 deleted file mode 100644 index 8b137891..00000000 --- a/UA1/Entregas tema 1 +++ /dev/null @@ -1 +0,0 @@ - diff --git a/UA1/examen/dev_0/ua1ex1.c b/UA1/examen/dev_0/ua1ex1.c new file mode 100644 index 00000000..9c70ebfd --- /dev/null +++ b/UA1/examen/dev_0/ua1ex1.c @@ -0,0 +1,24 @@ +/* + +NOMBRE: +FECHA: + +PARTE PRÁCTICA + +FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos +FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos +FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos +FR4: Implementa el control de errores - 2 puntos +FR5: Documenta y estructura el código - 2 puntos + +Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler + +Notas: + +Los comentarios (descriptivos y concisos) en el código ... siempre son bien. +Los nombres de las variables autodescriptivos ... siempre son bien. +Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. +Los warnings del presente ... son los errores del futuro. +El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ + +*/ diff --git a/UA1/examen/dev_0/ua1ex1_teoria.txt b/UA1/examen/dev_0/ua1ex1_teoria.txt new file mode 100644 index 00000000..2ea0d591 --- /dev/null +++ b/UA1/examen/dev_0/ua1ex1_teoria.txt @@ -0,0 +1,16 @@ +NOMBRE: +FECHA: + +PARTE TEÓRICA + +a) Definición de proceso. 1 punto. + +b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. + +c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. + +d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. + +Notas: + +El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ diff --git a/UA1/examen/dev_3/ua1ex1.c b/UA1/examen/dev_3/ua1ex1.c deleted file mode 100644 index 6df09b66..00000000 --- a/UA1/examen/dev_3/ua1ex1.c +++ /dev/null @@ -1,44 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/wait.h> - -int main() -{ - int pid, pid1, pid2; - - - // La variable pid almacena el valor devuelto del fork() system call - pid = fork(); - - // Si fork() devuelve 0 indica que es un hijo - if (pid == 0) { - printf("child[1] --> pid = %d and ppid = %d\n", - getpid(), getppid()); - } - - else { - pid1 = fork(); - // segundo hijo. - if (pid1 == 0) { - printf("child[2] --> pid = %d and ppid = %d\n", - getpid(), getppid()); - } - else { - pid2 = fork(); - if (pid2 == 0) { - //tercer hijo. - printf("child[3] --> pid = %d and ppid = %d\n", - getpid(), getppid()); - } - - //Si el valor retornado por el fork() es >0 - else { - //Este código sólo lo ejecutará el Padre - printf("parent --> pid = %d\n", getpid()); - } - } - } - - return 0; -} \ No newline at end of file diff --git a/UA1/examen/dev_3/ua1ex1_teoria.txt b/UA1/examen/dev_3/ua1ex1_teoria.txt deleted file mode 100644 index 32b8644e..00000000 --- a/UA1/examen/dev_3/ua1ex1_teoria.txt +++ /dev/null @@ -1,54 +0,0 @@ -PARTE TEÓRICA - -a) Definición de proceso. Ilustra tu solución con un ejemplo. 1 punto. - -Un proceso es un progrma en ejecucion que no comparte memoria con nadie mas es decir en el caso de que haya mas de 1 proceso seran independientes uno de otros . -Un ejemplo puede ser el caso de un programa que no quiera dar varias soluciones a la vez -por ejemplo si el nos quiere dar la raiz y el numero elevado a algo a la vez podemos crear dos procesos uno para cada calculo y saldran a la vez. - -b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. Ilustra tu solución con un ejemplo. 3 puntos. - -Se relacionan en que ambos se puede usar para realizar varias acciones a la vez pero uno es diferente del otro ya que los procesos no comparten memoria con nadie mientras que los hilos si lo hacen con la clase a la que se les llama. -Un ejemplo de esto puede el programa del ejercicio anterior hecho con procesos te mostrara varios procesos y si se lo pides varias veces con distintos numeros -saldran de forma ordenada , con los hilos sera igual pero no saldran de forma ordenada ya que los hilos empiezan a funcionar de forma aleatoria. - -c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. - - -La programcion concurrente permite ejecutar varios procesos al mismo tiempo - -Las principales caracteristicas son : --Es mas eficiente. --Me velocidad de ejecución. - -Los ambitos en los que se puede aplicar son en aquellos en los que los recursos de una solo maquina no son suficientes. -Un ejemplo de programacion concurrente sería un ordenador que podría analizar datos de miles de estaciones meteorológicas, imágenes satelitales y muestras de suelo para predecir el momento óptimo de siembra para un cultivo en particular . - - -d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. - -Un programa paralelo esta distribuido entre varios nucleos de un mismo ordenador mientras que la distribuida esta distribuido entre varios ordenadores conectada a una misma red. -Paralelo -ventajas: --Ejecucion simultanea --Disminución del tiempo de ejecución --Facilita la capacidad de solucionar problemas complejos -desventajas: --Mayor complejidad. --Programas mas dificiles de desarrollar. --Mayor consumo de energía. --A la hora de querer acceder a cualquier dato sera más complicado - -Distribuida -ventajas: --Capacidad para compartir datos y recursos --Capacidad de crecimiento --Mas flexible --Alta disponibilidad - -desventajas: --Mas complejo --Problemas con las redes --Problemas de seguridad. - - diff --git a/UA1/examen/dev_3/ua1ex1ep2.java b/UA1/examen/dev_3/ua1ex1ep2.java deleted file mode 100644 index cdff4358..00000000 --- a/UA1/examen/dev_3/ua1ex1ep2.java +++ /dev/null @@ -1,47 +0,0 @@ -public class Main { - public static void main(String[] args) { - System.out.println("Sensores"); - Thread sensorTemperatura = new Thread(new Sensor("Sensor de Temperatura")); - Thread sensorHumedad = new Thread(new Sensor("Sensor de Humedad")); - Thread sensorEstadoDePlantas= new Thread(new Hilo3()); - sensorTemperatura .start(); - sensorHumedad.start(); - sensorEstadoDePlantas.start(); - } -} -// he implementado el ejemplo que nos has puesto en el sensor 1 y 2. -class Sensor implements Runnable{ - private String nombreSensor; - - public Sensor(String nombreSensor){ - this.nombreSensor = nombreSensor; - } - @Override - public void run(){ - for (int i = 0; i < 10; i++) { - System.out.println(nombreSensor+" -Checkeo "+i+" : "+Math.random()*100); - - } - System.out.println(nombreSensor + " ha completado sus 10 ciclos de lectura."); - } -} - - -// lo he dejado igual que lo tenia antes ya que no me gusta catalogar el estado de las plantas del 1 al 100 -// y creo que la forma que lo he hecho es bastante correcta. -class Hilo3 implements Runnable{ - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - if (Math.random()*1>0.5) { - System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es : mala" ); - } - else { - System.out.println("En el check " + (i + 1) + " del sensor de las plantas, ¿la planta esta bien? es :buena"); - - } - } - System.out.println("Sensor del estado de las plantas ha completado sus 10 ciclos de lectura."); - } -} diff --git a/UA1/tareas/dev_3/ua1tarea1.c b/UA1/tareas/dev_0/ua1tarea1.c similarity index 100% rename from UA1/tareas/dev_3/ua1tarea1.c rename to UA1/tareas/dev_0/ua1tarea1.c diff --git a/UA1/tareas/dev_3/EjecutarprogramaEnHilo.java b/UA1/tareas/dev_3/EjecutarprogramaEnHilo.java deleted file mode 100644 index 69fcab0a..00000000 --- a/UA1/tareas/dev_3/EjecutarprogramaEnHilo.java +++ /dev/null @@ -1,20 +0,0 @@ -public class EjecutarProgramaEnHilo implements Runnable { - - @Override - public void run() { - - LecturaCadena.main(null); - } - - public static void main(String[] args) { - - Thread hiloEjecucion = new Thread(new EjecutarProgramaEnHilo()); - hiloEjecucion.start(); - - try { - hiloEjecucion.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/UA1/tareas/dev_3/LecturaCadena.java b/UA1/tareas/dev_3/LecturaCadena.java deleted file mode 100644 index d0c2638f..00000000 --- a/UA1/tareas/dev_3/LecturaCadena.java +++ /dev/null @@ -1,51 +0,0 @@ -import java.util.Scanner; - -public class LecturaCadena implements Runnable { - private String texto; - - public LecturaCadena() { - this.texto = ""; - } - - @Override - public void run() { - Scanner scanner = new Scanner(System.in); - StringBuilder sb = new StringBuilder(); - String input; - - System.out.println("Introduce texto (termina con *):"); - - - do { - input = scanner.nextLine(); - sb.append(input).append("\n"); - } while (input.indexOf('*') == -1); - - - texto = sb.toString(); - int indexAsterisco = texto.indexOf('*'); - if (indexAsterisco != -1) { - texto = texto.substring(0, indexAsterisco); - } - - - System.out.println("Texto leído:\n" + texto); - } - - public String getTexto() { - return texto; - } - - public static void main(String[] args) { - - LecturaCadena lecturaCadena = new LecturaCadena(); - Thread hiloLectura = new Thread(lecturaCadena); - hiloLectura.start(); - - try { - hiloLectura.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git "a/UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" "b/UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" deleted file mode 100644 index 36c4ad7a..00000000 --- "a/UA1/tareas/dev_3/T1 - Tarea 1 - Programaci\303\263n de Procesos en C.c" +++ /dev/null @@ -1,37 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/wait.h> - -int main() { - int num; - pid_t pid; - - // FR2: Pedir al usuario una variable (ahora llamada num) - printf("Introduce una variable entera (num): "); - scanf("%d", &num); - - // FR1: Crear un proceso (uno padre y otro hijo) - pid = fork(); - - if (pid == -1) { - // Error al crear el proceso hijo - printf("Error al crear el proceso hijo\n"); - return 1; - } - - if (pid == 0) { - // FR4: Proceso hijo suma 4 a la variable num - num += 4; - printf("Proceso hijo (PID: %d): num + 4 = %d\n", getpid(), num); - } else { - // FR3: Proceso padre resta 5 a la variable num - num -= 5; - printf("Proceso padre (PID: %d): num - 5 = %d\n", getpid(), num); - - // Esperar a que termine el proceso hijo (FR5) - wait(NULL); - } - - return 0; -} \ No newline at end of file diff --git "a/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" "b/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" deleted file mode 100644 index e352362b..00000000 --- "a/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).java" +++ /dev/null @@ -1,22 +0,0 @@ -public class ProcesoPrincipal { - public static void main(String[] args) { - if (args.length < 1) { - System.exit(1); - } - - try { - - int num = Integer.parseInt(args[0]); - - - if (num < 0) { - System.exit(3); - } else { - System.exit(0); - } - } catch (NumberFormatException e) { - - System.exit(2); - } - } -} diff --git "a/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" "b/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" deleted file mode 100644 index 6ecdc7ab..00000000 --- "a/UA1/tareas/dev_3/Tarea 3 - Programaci\303\263n de procesos en Java (II).segundoprograma.java" +++ /dev/null @@ -1,36 +0,0 @@ -import java.io.IOException; - -public class EjecutarProceso { - public static void main(String[] args) { - try { - String[] comando = new String[args.length + 2]; - comando[0] = "java"; - comando[1] = "ProcesoPrincipal"; - System.arraycopy(args, 0, comando, 2, args.length); - - - Process proceso = Runtime.getRuntime().exec(comando); - int codigoSalida = proceso.waitFor(); - - switch (codigoSalida) { - case 0: - System.out.println("El argumento es un número entero válido."); - break; - case 1: - System.out.println("No se proporcionaron argumentos."); - break; - case 2: - System.out.println("El argumento es una cadena."); - break; - case 3: - System.out.println("El argumento es un número entero menor que 0."); - break; - default: - System.out.println("Código de salida desconocido: " + codigoSalida); - break; - } - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/UA1/tareas/dev_3/tarea0 b/UA1/tareas/dev_3/tarea0 deleted file mode 100644 index dec26c2c..00000000 --- a/UA1/tareas/dev_3/tarea0 +++ /dev/null @@ -1 +0,0 @@ -primera tarea From c83d3f618a0bc34fcef98328666132dfdb7f8c8e Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Wed, 30 Oct 2024 10:14:33 +0100 Subject: [PATCH 28/41] Mejoras examen --- .../dev_9/ejercicio2/EstadoPlantas.java | 14 +++++- UA1/examen/dev_9/ejercicio2/Humedad.java | 16 ++++++- UA1/examen/dev_9/ejercicio2/Main.java | 27 ++++++----- UA1/examen/dev_9/ejercicio2/Sensores.java | 31 ++++++++++++ UA1/examen/dev_9/ejercicio2/Temperatura.java | 11 +++-- UA1/examen/dev_9/ejercicio2/TestHilos.java | 47 ++++++++++++++++++- 6 files changed, 127 insertions(+), 19 deletions(-) create mode 100644 UA1/examen/dev_9/ejercicio2/Sensores.java diff --git a/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java b/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java index ff24d9af..9d0ceec5 100644 --- a/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java +++ b/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java @@ -4,11 +4,13 @@ public class EstadoPlantas implements Runnable{ public int contador; public String nombre; public long startTime; + public int estado; public EstadoPlantas (String nombre) { contador = 0; this.nombre = nombre; this.startTime = System.currentTimeMillis(); + this.estado = 0; } @@ -21,8 +23,12 @@ public void run() { long tiempo = (System.currentTimeMillis() -startTime); + String estadoPlanta_redondeada = String.format("%.2f",estado); + System.out.println("El estado de la planta en el sensor " + - nombre +" es de " + estado + " en " + tiempo + " milisegundos"); + nombre +" es de " + estadoPlanta_redondeada + " en " + tiempo + " milisegundos"); + + this.estado = probarTest(); //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos try { @@ -37,4 +43,10 @@ public void run() { } } + public int probarTest() { + + this.estado = 1; + + return 1; + } } diff --git a/UA1/examen/dev_9/ejercicio2/Humedad.java b/UA1/examen/dev_9/ejercicio2/Humedad.java index 722711b7..0a115443 100644 --- a/UA1/examen/dev_9/ejercicio2/Humedad.java +++ b/UA1/examen/dev_9/ejercicio2/Humedad.java @@ -6,12 +6,14 @@ public class Humedad implements Runnable{ public int contador; public String nombre; public long startTime; + public int estado; public Humedad(String nombre) { this.contador = 0; this.cantidad_humedad= 0.0f; this.nombre = nombre; this.startTime = System.currentTimeMillis(); + estado = 0; } @Override @@ -24,8 +26,12 @@ public void run() { long tiempo = (System.currentTimeMillis() -startTime); - System.out.println("La humedad en el sensor " + nombre +" es de " + humedad + - " % en el tiempo de " + tiempo); + String humedad_redondeada = String.format("%.2f",humedad); + + System.out.println("La humedad en el sensor " + nombre +" es de " + humedad_redondeada + + " % en el tiempo de " + tiempo + " milisegundos"); + + this.estado = probarTest(); //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos try { @@ -44,4 +50,10 @@ public void run() { } + public int probarTest() { + + this.estado = 1; + + return 1; + } } diff --git a/UA1/examen/dev_9/ejercicio2/Main.java b/UA1/examen/dev_9/ejercicio2/Main.java index ecf469e2..61657307 100644 --- a/UA1/examen/dev_9/ejercicio2/Main.java +++ b/UA1/examen/dev_9/ejercicio2/Main.java @@ -9,22 +9,25 @@ public static void main(String[] args) throws Exception { //Instanciamos las clases System.out.println("\t\t**COMENZAMOS**"); - Temperatura temperatura = new Temperatura("Temperatura"); - Humedad humedad = new Humedad("Humedad"); - EstadoPlantas plantas = new EstadoPlantas("Estado"); + Sensores s1 = new Sensores(); + Sensores s2 = new Sensores(); + Sensores s3 = new Sensores(); - //Creamos el hilo que extiende de Runnable - Thread t = new Thread(temperatura); - Thread h = new Thread(humedad); - Thread p = new Thread(plantas); + //iniciamos distintos sensores + Thread t = new Thread(s1); + Thread t1 = new Thread(s2); + Thread t2 = new Thread(s1); + /*Primer sensor activo*/ t.start(); - h.start(); - p.start(); - - - + t.join(); + /*Segundo sensor activo*/ + t1.start(); + t1.join(); + /*Tercer sensor activo*/ + t2.start(); + t2.join(); } } \ No newline at end of file diff --git a/UA1/examen/dev_9/ejercicio2/Sensores.java b/UA1/examen/dev_9/ejercicio2/Sensores.java new file mode 100644 index 00000000..836b419e --- /dev/null +++ b/UA1/examen/dev_9/ejercicio2/Sensores.java @@ -0,0 +1,31 @@ +package org.example; + +public class Sensores implements Runnable{ + Temperatura t; + + public Sensores() { + + } + @Override + public void run() { + Temperatura temperatura = new Temperatura("Temperatura"); + Humedad humedad = new Humedad("Humedad"); + EstadoPlantas plantas = new EstadoPlantas("Estado"); + + Thread t = new Thread(temperatura); + Thread h = new Thread(humedad); + Thread p = new Thread(plantas); + + t.start(); + h.start(); + p.start(); + + try { + t.join(); + h.join(); + p.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/UA1/examen/dev_9/ejercicio2/Temperatura.java b/UA1/examen/dev_9/ejercicio2/Temperatura.java index 0ea7cc66..e3f5e3e3 100644 --- a/UA1/examen/dev_9/ejercicio2/Temperatura.java +++ b/UA1/examen/dev_9/ejercicio2/Temperatura.java @@ -25,10 +25,15 @@ public void run() { //creamos el numero aleatorio y el tiempo en el que se ha creado int numero = (int) (Math.random() * 3000) + 1; - long tiempo = (System.currentTimeMillis() -startTime); + long tiempo = (System.currentTimeMillis() - startTime); - System.out.println("La temperatura en el sensor " + nombre_sensor + " es de " + humedad + " grados en el tiempo de " + - " en el tiempo de " + tiempo); + String temperatura_redondeada = String.format("%.2f",humedad); + + System.out.println("La temperatura en el sensor " + nombre_sensor + " es de "+ temperatura_redondeada + +" grados en el tiempo de " + + " en el tiempo de " + tiempo + " milisegundos"); + + this.estado = probarTest(); //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos try { diff --git a/UA1/examen/dev_9/ejercicio2/TestHilos.java b/UA1/examen/dev_9/ejercicio2/TestHilos.java index 3e9bd2f4..bcfce489 100644 --- a/UA1/examen/dev_9/ejercicio2/TestHilos.java +++ b/UA1/examen/dev_9/ejercicio2/TestHilos.java @@ -16,6 +16,8 @@ public void testHiloTemperatura() { //Creamos el hilo que extiende de Runnable Thread t = new Thread(temperatura); + t.start(); + try{ t.join(); @@ -25,11 +27,54 @@ public void testHiloTemperatura() { e.printStackTrace(); } - assertEquals(temperatura.probarTest(),1); + assertEquals(temperatura.estado,1); + + } + + @Test + public void testHiloHumedad() { + Humedad humedad = new Humedad("Humedad"); + + //Creamos el hilo que extiende de Runnable + Thread h = new Thread(humedad); + + h.start(); + + + try{ + h.join(); + + + }catch (Exception e) { + e.printStackTrace(); + } + + //Comprobar que lo básico lo cumple + assertEquals(humedad.estado,1); } + @Test + public void testHiloEstadoPlantas() { + EstadoPlantas estadoPlantas = new EstadoPlantas("Estado Plantas"); + + //Creamos el hilo que extiende de Runnable + Thread t = new Thread(estadoPlantas); + + t.start(); + + + try{ + t.join(); + + + }catch (Exception e) { + e.printStackTrace(); + } + + assertEquals(estadoPlantas.estado,1); + } } From c9f6a43d76283efcac9773a8632534a836c90115 Mon Sep 17 00:00:00 2001 From: juan <jdeomoya@gmail.com> Date: Wed, 30 Oct 2024 10:39:03 +0100 Subject: [PATCH 29/41] Revert "Merge pull request #10 from i12vecaj/dev_9" This reverts commit 69b3dd7d1b2411c27bff6528bb6457ffbe2fc7d8, reversing changes made to a4adb9cf91cfe9983910e5269744ce94d1dab824. --- UA1/examen/dev_0/ua1ex1.c | 24 ++++ UA1/examen/dev_0/ua1ex1_teoria.txt | 16 +++ .../dev_9/ejercicio2/EstadoPlantas.java | 52 ------- UA1/examen/dev_9/ejercicio2/Humedad.java | 59 -------- UA1/examen/dev_9/ejercicio2/Main.java | 33 ----- UA1/examen/dev_9/ejercicio2/Sensores.java | 31 ---- UA1/examen/dev_9/ejercicio2/Temperatura.java | 56 -------- UA1/examen/dev_9/ejercicio2/TestHilos.java | 80 ----------- UA1/examen/dev_9/ua1ex1.c | 134 ------------------ UA1/examen/dev_9/ua1ex1_teoria.txt | 32 ----- UA1/tareas/dev_0/ua1tarea1.c | 1 + UA1/tareas/dev_9/ua1_tarea1.c | 57 -------- UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java | 54 ------- UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java | 59 -------- .../dev_9/ua1_tarea_3_dev9/TestHilo.java | 35 ----- UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore | 38 ----- UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml | 25 ---- .../src/main/java/org/example/Hilo2Test.java | 72 ---------- .../src/main/java/org/example/Main.java | 19 --- .../src/main/java/org/example/hilo_1.java | 39 ----- .../src/main/java/org/example/hilo_2.java | 29 ---- 21 files changed, 41 insertions(+), 904 deletions(-) create mode 100644 UA1/examen/dev_0/ua1ex1.c create mode 100644 UA1/examen/dev_0/ua1ex1_teoria.txt delete mode 100644 UA1/examen/dev_9/ejercicio2/EstadoPlantas.java delete mode 100644 UA1/examen/dev_9/ejercicio2/Humedad.java delete mode 100644 UA1/examen/dev_9/ejercicio2/Main.java delete mode 100644 UA1/examen/dev_9/ejercicio2/Sensores.java delete mode 100644 UA1/examen/dev_9/ejercicio2/Temperatura.java delete mode 100644 UA1/examen/dev_9/ejercicio2/TestHilos.java delete mode 100644 UA1/examen/dev_9/ua1ex1.c delete mode 100644 UA1/examen/dev_9/ua1ex1_teoria.txt create mode 100644 UA1/tareas/dev_0/ua1tarea1.c delete mode 100644 UA1/tareas/dev_9/ua1_tarea1.c delete mode 100644 UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java delete mode 100644 UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java delete mode 100644 UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java delete mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore delete mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml delete mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java delete mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java delete mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java delete mode 100644 UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java diff --git a/UA1/examen/dev_0/ua1ex1.c b/UA1/examen/dev_0/ua1ex1.c new file mode 100644 index 00000000..9c70ebfd --- /dev/null +++ b/UA1/examen/dev_0/ua1ex1.c @@ -0,0 +1,24 @@ +/* + +NOMBRE: +FECHA: + +PARTE PRÁCTICA + +FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos +FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos +FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos +FR4: Implementa el control de errores - 2 puntos +FR5: Documenta y estructura el código - 2 puntos + +Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler + +Notas: + +Los comentarios (descriptivos y concisos) en el código ... siempre son bien. +Los nombres de las variables autodescriptivos ... siempre son bien. +Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. +Los warnings del presente ... son los errores del futuro. +El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ + +*/ diff --git a/UA1/examen/dev_0/ua1ex1_teoria.txt b/UA1/examen/dev_0/ua1ex1_teoria.txt new file mode 100644 index 00000000..2ea0d591 --- /dev/null +++ b/UA1/examen/dev_0/ua1ex1_teoria.txt @@ -0,0 +1,16 @@ +NOMBRE: +FECHA: + +PARTE TEÓRICA + +a) Definición de proceso. 1 punto. + +b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. + +c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. + +d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. + +Notas: + +El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ diff --git a/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java b/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java deleted file mode 100644 index 9d0ceec5..00000000 --- a/UA1/examen/dev_9/ejercicio2/EstadoPlantas.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.example; - -public class EstadoPlantas implements Runnable{ - public int contador; - public String nombre; - public long startTime; - public int estado; - - public EstadoPlantas (String nombre) { - contador = 0; - this.nombre = nombre; - this.startTime = System.currentTimeMillis(); - this.estado = 0; - } - - - @Override - public void run() { - while(contador < 10) { - - double estado = Math.random() * 100; - int numero = (int) (Math.random() * 3000) + 1; - - long tiempo = (System.currentTimeMillis() -startTime); - - String estadoPlanta_redondeada = String.format("%.2f",estado); - - System.out.println("El estado de la planta en el sensor " + - nombre +" es de " + estadoPlanta_redondeada + " en " + tiempo + " milisegundos"); - - this.estado = probarTest(); - - //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos - try { - - Thread.sleep(numero); - - } catch (InterruptedException e) { - e.printStackTrace(); - } - - contador++; - - } - } - public int probarTest() { - - this.estado = 1; - - return 1; - } -} diff --git a/UA1/examen/dev_9/ejercicio2/Humedad.java b/UA1/examen/dev_9/ejercicio2/Humedad.java deleted file mode 100644 index 0a115443..00000000 --- a/UA1/examen/dev_9/ejercicio2/Humedad.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.example; - -public class Humedad implements Runnable{ - - public double cantidad_humedad; - public int contador; - public String nombre; - public long startTime; - public int estado; - - public Humedad(String nombre) { - this.contador = 0; - this.cantidad_humedad= 0.0f; - this.nombre = nombre; - this.startTime = System.currentTimeMillis(); - estado = 0; - } - - @Override - public void run() { - while(contador < 10) { - - double humedad = Math.random() * 100; - - int numero = (int) (Math.random() * 3000) + 1; - - long tiempo = (System.currentTimeMillis() -startTime); - - String humedad_redondeada = String.format("%.2f",humedad); - - System.out.println("La humedad en el sensor " + nombre +" es de " + humedad_redondeada + - " % en el tiempo de " + tiempo + " milisegundos"); - - this.estado = probarTest(); - - //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos - try { - - Thread.sleep((long) numero); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - contador++; - - } - - - - - - } - public int probarTest() { - - this.estado = 1; - - return 1; - } -} diff --git a/UA1/examen/dev_9/ejercicio2/Main.java b/UA1/examen/dev_9/ejercicio2/Main.java deleted file mode 100644 index 61657307..00000000 --- a/UA1/examen/dev_9/ejercicio2/Main.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.example; - -//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or -// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter. -public class Main { - public static void main(String[] args) throws Exception { - //TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text - // to see how IntelliJ IDEA suggests fixing it. - //Instanciamos las clases - - System.out.println("\t\t**COMENZAMOS**"); - Sensores s1 = new Sensores(); - Sensores s2 = new Sensores(); - Sensores s3 = new Sensores(); - - //iniciamos distintos sensores - Thread t = new Thread(s1); - Thread t1 = new Thread(s2); - Thread t2 = new Thread(s1); - - /*Primer sensor activo*/ - t.start(); - t.join(); - - /*Segundo sensor activo*/ - t1.start(); - t1.join(); - - /*Tercer sensor activo*/ - t2.start(); - t2.join(); - } -} \ No newline at end of file diff --git a/UA1/examen/dev_9/ejercicio2/Sensores.java b/UA1/examen/dev_9/ejercicio2/Sensores.java deleted file mode 100644 index 836b419e..00000000 --- a/UA1/examen/dev_9/ejercicio2/Sensores.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.example; - -public class Sensores implements Runnable{ - Temperatura t; - - public Sensores() { - - } - @Override - public void run() { - Temperatura temperatura = new Temperatura("Temperatura"); - Humedad humedad = new Humedad("Humedad"); - EstadoPlantas plantas = new EstadoPlantas("Estado"); - - Thread t = new Thread(temperatura); - Thread h = new Thread(humedad); - Thread p = new Thread(plantas); - - t.start(); - h.start(); - p.start(); - - try { - t.join(); - h.join(); - p.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/UA1/examen/dev_9/ejercicio2/Temperatura.java b/UA1/examen/dev_9/ejercicio2/Temperatura.java deleted file mode 100644 index e3f5e3e3..00000000 --- a/UA1/examen/dev_9/ejercicio2/Temperatura.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.example; - -public class Temperatura implements Runnable{ - - public float temperature; - public String nombre_sensor; - public int contador; - public long startTime; - public int estado; - - public Temperatura(String nombre_sensor) { - this.temperature = temperature; - this.contador = 0; - this.nombre_sensor = nombre_sensor; - this.startTime = System.currentTimeMillis(); - estado = 0; - } - - - @Override - public void run() { - while(contador < 10) { - - double humedad = Math.random() * 100; - - //creamos el numero aleatorio y el tiempo en el que se ha creado - int numero = (int) (Math.random() * 3000) + 1; - long tiempo = (System.currentTimeMillis() - startTime); - - String temperatura_redondeada = String.format("%.2f",humedad); - - System.out.println("La temperatura en el sensor " + nombre_sensor + " es de "+ temperatura_redondeada - +" grados en el tiempo de " + - " en el tiempo de " + tiempo + " milisegundos"); - - this.estado = probarTest(); - - //simulamos que la lectura tarda un tiempo aleatorio en realizarse en milisegundos - try { - - Thread.sleep(numero); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - contador++; - - } - } - public int probarTest() { - - this.estado = 1; - - return 1; - } -} diff --git a/UA1/examen/dev_9/ejercicio2/TestHilos.java b/UA1/examen/dev_9/ejercicio2/TestHilos.java deleted file mode 100644 index bcfce489..00000000 --- a/UA1/examen/dev_9/ejercicio2/TestHilos.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.example; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class TestHilos { - /* - * Implementamos un test que no recibe argumentos - * */ - - @Test - public void testHiloTemperatura() { - Temperatura temperatura = new Temperatura("Temperatura"); - - //Creamos el hilo que extiende de Runnable - Thread t = new Thread(temperatura); - - t.start(); - - - try{ - t.join(); - - - }catch (Exception e) { - e.printStackTrace(); - } - - assertEquals(temperatura.estado,1); - - } - - @Test - public void testHiloHumedad() { - Humedad humedad = new Humedad("Humedad"); - - //Creamos el hilo que extiende de Runnable - Thread h = new Thread(humedad); - - h.start(); - - - try{ - h.join(); - - - }catch (Exception e) { - e.printStackTrace(); - } - - //Comprobar que lo básico lo cumple - assertEquals(humedad.estado,1); - - } - - @Test - public void testHiloEstadoPlantas() { - EstadoPlantas estadoPlantas = new EstadoPlantas("Estado Plantas"); - - //Creamos el hilo que extiende de Runnable - Thread t = new Thread(estadoPlantas); - - t.start(); - - - try{ - t.join(); - - - }catch (Exception e) { - e.printStackTrace(); - } - - assertEquals(estadoPlantas.estado,1); - - } - - -} diff --git a/UA1/examen/dev_9/ua1ex1.c b/UA1/examen/dev_9/ua1ex1.c deleted file mode 100644 index f657c93e..00000000 --- a/UA1/examen/dev_9/ua1ex1.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - -NOMBRE: Juan Deogracias Moya -FECHA: 16/10/2024 - -PARTE PRÁCTICA - -FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos -FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos -FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos -FR4: Implementa el control de errores - 2 puntos -FR5: Documenta y estructura el código - 2 puntos - -Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler - -Notas: - -Los comentarios (descriptivos y concisos) en el código ... siempre son bien. -Los nombres de las variables autodescriptivos ... siempre son bien. -Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. -Los warnings del presente ... son los errores del futuro. -El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ - -*/ - - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/wait.h> - - -/* -* Creamos una funcion que nos permite mostrar por pantalla el numero de hijo que es -* el pid de el proceso y el pid de el proceso padre -*/ -void imprimir(int numero,int pid_hijo, int pid_padre) { - printf("Soy el hijo %d , PID_Hijo : %d, PID_Padre :%d\n",numero, getpid(),getppid()); -} - - -/* IMPORTANTE -* fork == -1 Nos devolvería un error -* fork == 0 Estamos en el proceso hijo -* fork == 1 Estamos en el proceso padre -*/ -int main() -{ - /* - * Definimos cada una de los procesos que vamos ha tener en este caso como - * tenemos tres hijos tendremos tres variables de los distintos 3 hijos. - */ - pid_t pid_1,pid_2,pid_3; - - printf("\t\t**BIENVENIDO**\n\n"); - /* - * Mediante fork() estamos haciendo una copia exacta de el proceso padre - * y mediante las condiciones if-else podemos decirle a cada una de las copias o - * procesos que es lo que tiene que hacer en cada momento. - */ - pid_1 = fork(); - - /* - * Aplicamos el control de errores - */ - if(pid_1 < 0 ) { - printf("Error"); - return -1; - } - - if(pid_1 == 0) { - - imprimir(1,getpid(),getppid()); - - }else { - /* - * obligamos al proceso padre a que espere la ejecucion de los hijos - */ - wait(NULL); - - pid_2 = fork(); - - /* - * Implementamos control de errores de modo que si devulve un numero que no - * es ni cero ni uno estaríamos en un Error - */ - if(pid_2 < 0 ) { - printf("Error"); - return -1; - } - - if(pid_2 == 0) { - /* - * Creamos un proceso hijo denominado pid_2 dentro de el proceso main - */ - imprimir(2,getpid(),getppid()); - - }else { - - /* - * Creamos un proceso hijo denominado pid_3 dentro de el proceso main - */ - pid_3 = fork(); - - if(pid_3 < 0 ) { - printf("Error"); - return -1; - } - - if(pid_3 == 0) { - /* - * Llamamos a la funcion para imprimir por pantalla el pid de hijo y padre - */ - imprimir(3,getpid(),getppid()); - - } else { - /* - * implementamos wait(NULL) de modo que el proceso padre espere - * la finalización de la ejecución de los procesos hijos - */ - - wait(NULL); - - /* - * Mostramos en pantalla el pid de el proceso padre de todos el cual es el main - */ - printf("Soy el proceso padre de todos (main) con PID %d\n", getpid()); - - printf("\n\t**EL PROGRAMA A FINALIZADO**\n\n"); - } - } - } -} diff --git a/UA1/examen/dev_9/ua1ex1_teoria.txt b/UA1/examen/dev_9/ua1ex1_teoria.txt deleted file mode 100644 index fe53bd87..00000000 --- a/UA1/examen/dev_9/ua1ex1_teoria.txt +++ /dev/null @@ -1,32 +0,0 @@ -NOMBRE: Juan Deogracias Moya -FECHA: 16/10/2024 - -PARTE TEÓRICA - -a) Definición de proceso. 1 punto. - -Un proceso es un programa que tiene su propio espacio en memoria. Por tanto los procesos son independientes y no comparten memoria directamente ni recursos del sistema. - -Para ejecutar programas externos en Java se pueden usar las clases `Process` y ProcessBuilder. - -Un ejemplo de un proceso es una cadena de restaurantes en los cuales tenemos que tener diferentes procesos para poder obtener la información de los distintos programas. Es decir cada proceso va a tener una función específica para obtener las comandas que se han realizado en x restaurante y otro programa el cual es independiente como comenté anteriormente para analizar la rentabilidad de cada restaurante. - -b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. - -En primer lugar vamos a definir un hilo el cual es un subproceso independiente dentro de un programa. Estos hilos trabajan con programación concurrente (no secuencial) es decir que de forma simultánea cada uno de estos subprocesos (hilos) realizan una tarea específica dentro de un programa mejorando la eficiencia. Es necesario comentar que los hilos comparten espacio de memoria dentro de un programa. - -En resumen, cual es la relación entre hilo y proceso, que un hilo es un subproceso que comparte memoria con el resto de hilos de dentro de un programa y el proceso a diferencia de el hilo alberga su propio espacio y no necesita compartir nada. - -Un ejemplo de hilo sería un banco donde varias personas necesitan acceder a los recursos de el banco, una persona sacará dinero de ese banco, esa misma persona puede añadir dinero a su cuenta bancaria, etc. En este caso el hilo persona tendría que acceder al recurso de el banco y a la misma vez otra persona realiza saca dinero de ese mismo banco esto sería concurrencia. - -c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. - -El concepto de programación concurrente quiere decir la realización de varias tareas de forma simultanea así como por ejemplo los hilos que utilizan dicho concepto. Cuando hablamos de programación concurrente tenemos que comentar que no todo es bueno ya que si accedemos a el mismo recurso a la misma vez desde distintos hilos surge el concepto de condición de carrera. Pero todo esto puede ser controlado de diferentes formas usando conceptos como el sync, el orden de prioridad de cada hilo... No obstante en java se pueden crear hilos de dos formas distintas extendiendo de la clase Thread o implementando la clase Runnable (es la más utilizada), runnable permite extender de otra clase obtener sus métodos y aparte implementar los métodos de la clase Thread en cambio con Thread no puedes extender de otra clase que no sea Thread. - -Por otra parte este concepto es utilizado por la programación paralela y distribuida ambas aplican este concepto. ¿La pregunta es donde se utiliza la programación concurrente? La banca es uno de los mejores ejemplos en dicho ámbito hay frameworks que se especializan y utilizan este concepto como COBOL. - -d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. - -La programación paralela es un tipo de programación concurrente donde se ejecutan simultáneamente diferentes tareas en diferentes núcleos de un procesador o en diferentes equipos (se suele utilizar el mismo equipo). En conclusión dividimos una tarea en diferentes subtareas y las podemos resolver de forma simultánea para mejorar el rendimiento a diferencia de la programación distribuida el coste de este tipo de programación es menor ya que se utilizan únicamente los recursos de un equipo. El inconveniente es que necesitas de el mismo equipo donde se encuentra el proceso para poder ejecutarlo. En Big Data o en inteligencia artificial se utiliza este concepto. - -La programación distribuida ejecuta diferentes tareas utilizando en concepto de concurrencia pero en distintas máquinas que están conectadas en la misma red. Es decir podemos ejecutar diferentes procesos en diferentes ubicaciones lo cual es una clara ventaja. A pesar de ello el coste de este tipo de programación es claramente más alto debido a la necesidad de diferentes equipos. diff --git a/UA1/tareas/dev_0/ua1tarea1.c b/UA1/tareas/dev_0/ua1tarea1.c new file mode 100644 index 00000000..1b2cfd02 --- /dev/null +++ b/UA1/tareas/dev_0/ua1tarea1.c @@ -0,0 +1 @@ +Ya os gustaría \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua1_tarea1.c b/UA1/tareas/dev_9/ua1_tarea1.c deleted file mode 100644 index 321a0415..00000000 --- a/UA1/tareas/dev_9/ua1_tarea1.c +++ /dev/null @@ -1,57 +0,0 @@ -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> - -void main() { - //Definimos las variables que vamos a utilizar - pid_t pid; - int variable; - int suma; - int resultado_final; - - printf("\t\t**BIENVENIDO**\n"); - printf("-Hola!! me puedes introducir el valor de tu variable: "); - scanf("%d", &variable); - - //Creamos un clon de el proceso padre(main) - pid = fork(); - - //Aplicamos un control de errores - if (pid == -1 ) - { - printf("No se ha podido crear el proceso hijo..."); - exit(-1); - } - - //Comprobamos si estamos en el proceso hijo de ser asi le sumamos a variable 4 - if(pid == 0) { - variable += 4; - - printf("Variable en el proceso hijo con valor de %d\n", variable); - - exit(0); - - - } else{ - //Comprobamos si estamos en el proceso padre de ser asi le restamos a variable 5 - - /* Mediante wait(NULL) lo que hacemos es esperar a que el proceso hijo termine y luego - * ejecutar el proceso padre - */ - pid = wait(NULL); - variable -= 5; - - printf("Variable en el proceso padre con valor de %d", variable); - printf("\n\t**FINALIZADO**"); - exit(1); - } - - /* EJECUCIÓN DE EJEMPLO - * **BIENVENIDO** - * -Hola!! me puedes introducir el valor de tu variable: (5) - * Variable en el proceso hijo con valor de 9 - * Variable en el proceso padre con valor de 0 - * **FINALIZADO** - */ - -} diff --git a/UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java b/UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java deleted file mode 100644 index 083acf60..00000000 --- a/UA1/tareas/dev_9/ua1_tarea_3_dev9/Hilo.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.example; - -public class Hilo implements Runnable{ - - /* - * Creamos dos variables una que recibe los argumentos y otra que retorna el codigo de acceso - * */ - private String [] argumentos; - public int exitCode; - - public Hilo(String [] argumentos) { - this.argumentos = argumentos; - this.exitCode = 0; - } - - @Override - public void run() { - if(argumentos.length < 1) { - establecerExitCode(1); - } - for(String arg : argumentos) { - try { - int esNumero = Integer.parseInt(arg); - - if(esNumero < 0 ) { - //Numero negativo - establecerExitCode(3); - } - - } catch(Exception e) { - //Estamos hablando de una cadena de texto - establecerExitCode(2); - } - } - } - - public void establecerExitCode(int exitCode) { - this.exitCode = exitCode; - } - - public int getExitCode() { - return this.exitCode; - } - - /* - * Esta funcion retorna un objeto que esta formado por una variable result que tiene el valor de exitCode - * */ - public Object[] probarTest() { - - Object[] result = {getExitCode()}; - - return result; - } -} diff --git a/UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java b/UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java deleted file mode 100644 index 267af95e..00000000 --- a/UA1/tareas/dev_9/ua1_tarea_3_dev9/Main.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.example; - -import java.util.ArrayList; -import java.util.List; - - -public class Main { - public static void main(String[] args) { - - /* - * Creamos la instancia de la clase hilo y creamos una instancia de la clase thread que contiene la clase hilo - * que va a ser ejecutada y recibirá como argumento args que será lo que recibe de la terminal a la hora de crear - * el programa. - * */ - - Hilo hilo = new Hilo(args); - - Thread proceso = new Thread(hilo); - - proceso.start(); - - /* - * Hacemos un join para poder escribir texto después de que finalize la ejecución de el hilo - * */ - try{ - proceso.join(); - - }catch (Exception e) { - e.printStackTrace(); - } - - - /* - * Comprobamos el exitCode de la clase hilo y el funcion de lo que haga hacemos una cosa u otraº - * */ - switch (hilo.getExitCode()) { - case 0: - System.out.println("Has introducido un resultado que no teniamos contemplado"); - System.exit(hilo.exitCode); - - case 1: - System.out.println("No has introducido nada. Vuelve a intentarlo"); - System.exit(hilo.exitCode); - case 2: - System.out.println("Has introducido una cadena de texto"); - System.exit(hilo.exitCode); - - case 3: - System.out.println("El numero es negativo"); - System.exit(hilo.exitCode); - default: - System.out.println("No entiendo lo que has introducido. Vuelve a intentarlo"); - System.exit(hilo.exitCode); - } - - System.out.println("Ha finalizado el programa"); - - } -} \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java b/UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java deleted file mode 100644 index 15f35dc0..00000000 --- a/UA1/tareas/dev_9/ua1_tarea_3_dev9/TestHilo.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.example; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class TestHilo { - - /* - * Implementamos un test que no recibe argumentos - * */ - @Test - public void testHilo() { - String [] args = {}; - Hilo hilo = new Hilo(args); - - Thread proceso = new Thread(hilo); - - proceso.start(); - - try{ - - proceso.join(); - - } catch(InterruptedException e){ - e.printStackTrace(); - } - - Object contenidoHilo[] = hilo.probarTest(); - assertEquals(1,contenidoHilo[0]); - - System.out.println("El test ha funcionado correctamente"); - - } -} diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore b/UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore deleted file mode 100644 index 5ff6309b..00000000 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### IntelliJ IDEA ### -.idea/modules.xml -.idea/jarRepositories.xml -.idea/compiler.xml -.idea/libraries/ -*.iws -*.iml -*.ipr - -### Eclipse ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ - -### Mac OS ### -.DS_Store \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml b/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml deleted file mode 100644 index dae6a12d..00000000 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <groupId>org.example</groupId> - <artifactId>ua2_tarea2_dev9</artifactId> - <version>1.0-SNAPSHOT</version> - - <properties> - <maven.compiler.source>21</maven.compiler.source> - <maven.compiler.target>21</maven.compiler.target> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - <dependencies> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.13.2</version> - <scope>compile</scope> - </dependency> - </dependencies> - -</project> \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java deleted file mode 100644 index c87b903b..00000000 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Hilo2Test.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.example; - -import org.junit.Test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - -import static org.junit.Assert.assertTrue; - -/* -* He creado una clase que va a testear las respuestas de el hilo 2 de modo que puedo ejecutar esto de -* forma independiente y verificar que el hilo 2 funciona. Lo he hecho en el mismo directorio pero también -* se puede hacer en la parte de test. -* */ -public class Hilo2Test { - @Test - public void testHiloOpcion1() throws InterruptedException { - String input = "1\n"; - ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); - System.setIn(in); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - System.setOut(new PrintStream(out)); - - hilo_2 hilo = new hilo_2(); - hilo.start(); - - hilo.join(); //espero a que termine el hilo y luego compruebo la salida - - String output = out.toString(); - assertTrue(output.contains("Perfecto ejecutemos el siguiente hilo")); - } - - @Test - public void testHiloOpcion2() throws InterruptedException { - String input = "2\n"; - ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); - System.setIn(in); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - System.setOut(new PrintStream(out)); - - hilo_2 hilo = new hilo_2(); - hilo.start(); - - hilo.join(); //espero a que termine el hilo y luego compruebo la salida - - String output = out.toString(); - assertTrue(output.contains("Si pones * te saldrás")); - } - - @Test - public void testHiloOpcionIncorrecta() throws InterruptedException { - String input = "3\n"; - ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); - System.setIn(in); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - System.setOut(new PrintStream(out)); - - hilo_2 hilo = new hilo_2(); - hilo.start(); - - hilo.join(); //espero a que termine el hilo y luego compruebo la salida - - - String output = out.toString(); - assertTrue(output.contains("Opción incorrecta. Seleccione un número entre 1 y 2.")); //aqui compruebo que la opcion es correcta - } -} - diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java deleted file mode 100644 index 8a2221a0..00000000 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/Main.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.example; - -//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or -// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter. -public class Main { - public static void main(String[] args) throws Exception { - - - /*Creamos las instancias de los hilos*/ - hilo_2 h2 = new hilo_2(); - hilo_1 h1 = new hilo_1(); - - /*Ejecutamos y ponemos orden a los hilos*/ - h2.start(); - h2.join(); - h1.start(); - h1.join(); - } -} \ No newline at end of file diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java deleted file mode 100644 index 9e7c7ae3..00000000 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_1.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.example; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -public class hilo_1 extends Thread{ - - public boolean condition = false; - /* - * Definimos una lista que recoga lo introducido por el usuario - * */ - List<String> frases = new ArrayList<>(); - - - /* - * HILO QUE EJECUTA LEE Y SE SALA SEGUN LO QUE INTRODUCE EL USUARIO - * */ - public void run() { - Scanner sc = new Scanner(System.in); - - do { - System.out.println("Introduce un valor"); - - String input = sc.nextLine(); - - if (input.equals("*")) { - condition = true; - System.out.println("Ha sido un placer estar contigo"); - - System.out.println("Te dejo por aqui el historial de tus respuestas :) {\n\t\t" - + String.join("\n\t\t", frases) +"\n\t}"); - } else { - // Agregar la frase a la lista - frases.add(input); - } - } while (!condition); - } -} diff --git a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java b/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java deleted file mode 100644 index 6496e4dc..00000000 --- a/UA1/tareas/dev_9/ua2_tarea2_dev9/src/main/java/org/example/hilo_2.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.example; - -import java.util.Scanner; - -public class hilo_2 extends Thread{ - - /* - * HILO INTRODUCCION QUE VA A DEVOLVER INSTRUCCIONES - * */ - public void run() { - Scanner scanner = new Scanner(System.in); - - System.out.println("Te dejo aqui dos opciones: \n\t1.Ejecutar el segundo hilo\n\t" + - "2.Leer manual de instrucciones"); - - int opciones = scanner.nextInt(); - - switch (opciones) { - case 1: - System.out.println("Perfecto ejecutemos el siguiente hilo"); - break; - case 2: - System.out.println("Si pones * te saldrás"); - break; - default: - System.out.println("Opción incorrecta. Seleccione un número entre 1 y 2."); - } - } -} From d9ff3317d1b5f20c3a9fb71321c1acba379dcf57 Mon Sep 17 00:00:00 2001 From: albertomarbells <albertomarbells@gmail.com> Date: Wed, 30 Oct 2024 18:54:35 +0100 Subject: [PATCH 30/41] Correcciones y errores cambiados --- UA1/Examen/dev_16/ua1ex1.c | 57 ++++++++++ UA1/Examen/dev_16/ua1ex1_teoria.txt | 40 +++++++ UA1/Examen/dev_16/ua1ex1p2.java | 76 +++++++++++++ UA1/Tareas/dev_16/ua1tarea1.c | 26 +++++ .../dev_16/ua1tarea2/LanzarProcesos.java | 26 +++++ UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java | 47 ++++++++ UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java | 28 +++++ UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java | 14 +++ UA1/ejemplos/c/ejemWriteRead.c | 42 ------- UA1/ejemplos/c/ejemplo1Fork.c | 41 ------- UA1/ejemplos/c/ejemplo1_2Fork.c | 46 -------- UA1/ejemplos/c/ejemplo2Fork.c | 34 ------ UA1/ejemplos/c/ejemplo3Fork.c | 38 ------- UA1/ejemplos/c/ejemplo4Fork.c | 48 -------- UA1/ejemplos/c/ejemploExec.c | 9 -- UA1/ejemplos/c/ejemploForkPipe.c | 103 ------------------ UA1/ejemplos/c/ejemploPadres.c | 27 ----- UA1/ejemplos/c/ejemploPipe1.c | 47 -------- UA1/ejemplos/c/ejemploPipe2.c | 44 -------- UA1/ejemplos/c/ejemploPipe3-2.c | 47 -------- UA1/ejemplos/c/ejemploPipe3.c | 45 -------- UA1/ejemplos/c/ejemploSystem.c | 12 -- UA1/ejemplos/c/fifocrea.c | 31 ------ UA1/ejemplos/c/fifoescribe.c | 20 ---- UA1/ejemplos/c/procesosActivos.c | 10 -- UA1/ejemplos/c/sigkill.c | 79 -------------- UA1/ejemplos/c/sincronizar-1.c | 36 ------ UA1/ejemplos/c/sincronizar.c | 73 ------------- .../com/ceslopedevega/hilos/HiloSimple1.java | 30 ----- .../com/ceslopedevega/hilos/HiloSimple2.java | 30 ----- .../ceslopedevega/hilos/LanzaHiloSimple1.java | 15 --- .../ceslopedevega/hilos/LanzaHiloSimple2.java | 20 ---- .../com/ceslopedevega/procesos/Ejemplo1.java | 13 --- .../com/ceslopedevega/procesos/Ejemplo2.java | 32 ------ .../ceslopedevega/procesos/Ejemplo2Error.java | 47 -------- .../com/ceslopedevega/procesos/Ejemplo3.java | 31 ------ .../com/ceslopedevega/procesos/Ejemplo4.java | 51 --------- .../com/ceslopedevega/procesos/Ejemplo5.java | 36 ------ .../com/ceslopedevega/procesos/Ejemplo6.java | 16 --- .../com/ceslopedevega/procesos/Ejemplo7.java | 19 ---- .../com/ceslopedevega/procesos/Ejemplo8.java | 14 --- .../procesos/EjemploLectura.java | 16 --- .../ceslopedevega/procesos/LeerNombre.java | 14 --- .../com/ceslopedevega/procesos/Unsaludo.java | 11 -- UA1/examen/dev_0/ua1ex1.c | 24 ---- UA1/examen/dev_0/ua1ex1_teoria.txt | 16 --- UA1/tareas/dev_0/ua1tarea1.c | 1 - 47 files changed, 314 insertions(+), 1268 deletions(-) create mode 100644 UA1/Examen/dev_16/ua1ex1.c create mode 100644 UA1/Examen/dev_16/ua1ex1_teoria.txt create mode 100644 UA1/Examen/dev_16/ua1ex1p2.java create mode 100644 UA1/Tareas/dev_16/ua1tarea1.c create mode 100644 UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java create mode 100644 UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java create mode 100644 UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java create mode 100644 UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java delete mode 100644 UA1/ejemplos/c/ejemWriteRead.c delete mode 100644 UA1/ejemplos/c/ejemplo1Fork.c delete mode 100644 UA1/ejemplos/c/ejemplo1_2Fork.c delete mode 100644 UA1/ejemplos/c/ejemplo2Fork.c delete mode 100644 UA1/ejemplos/c/ejemplo3Fork.c delete mode 100644 UA1/ejemplos/c/ejemplo4Fork.c delete mode 100644 UA1/ejemplos/c/ejemploExec.c delete mode 100644 UA1/ejemplos/c/ejemploForkPipe.c delete mode 100644 UA1/ejemplos/c/ejemploPadres.c delete mode 100644 UA1/ejemplos/c/ejemploPipe1.c delete mode 100644 UA1/ejemplos/c/ejemploPipe2.c delete mode 100644 UA1/ejemplos/c/ejemploPipe3-2.c delete mode 100644 UA1/ejemplos/c/ejemploPipe3.c delete mode 100644 UA1/ejemplos/c/ejemploSystem.c delete mode 100644 UA1/ejemplos/c/fifocrea.c delete mode 100644 UA1/ejemplos/c/fifoescribe.c delete mode 100644 UA1/ejemplos/c/procesosActivos.c delete mode 100644 UA1/ejemplos/c/sigkill.c delete mode 100644 UA1/ejemplos/c/sincronizar-1.c delete mode 100644 UA1/ejemplos/c/sincronizar.c delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple1.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple2.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple1.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple2.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo1.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2Error.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo3.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo4.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo5.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo6.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo7.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo8.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/EjemploLectura.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/LeerNombre.java delete mode 100644 UA1/ejemplos/java/src/com/ceslopedevega/procesos/Unsaludo.java delete mode 100644 UA1/examen/dev_0/ua1ex1.c delete mode 100644 UA1/examen/dev_0/ua1ex1_teoria.txt delete mode 100644 UA1/tareas/dev_0/ua1tarea1.c diff --git a/UA1/Examen/dev_16/ua1ex1.c b/UA1/Examen/dev_16/ua1ex1.c new file mode 100644 index 00000000..ada4b854 --- /dev/null +++ b/UA1/Examen/dev_16/ua1ex1.c @@ -0,0 +1,57 @@ +/*Examen hecho por Alberto Mármol Bello a día 15 de Ocutbre para la asignatura de Programación de servicios y procesos. +PARTE PRÁCTICA 1/2 +FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos +FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos +FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos +FR4: Implementa el control de errores - 2 puntos +FR5: Documenta y estructura el código - 2 puntos*/ + +//Incluyo las librerias que me vayan a hacer falta. +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +//Creo una función para que imprima la información del proceso hijo. +void imprimirHijo(int IdHijo) { + printf("Hola soy el hijo %d, mi PID es %d y el de mi padre es %d.\n", IdHijo, getpid(), getppid()); +} + +int main(){ + //Creo 3 procesos hijos. + for (int i = 1;i <= 3; i++) { + pid_t pid = fork(); //Se crea un nuevo proceso. + + //He creado un control de erroes por si algo sale mal, notificarlo al usuario. + if(pid < 0){ + perror("Error al crear el proceso hijo :("); + exit(EXIT_FAILURE); + } + + //Si es el proceso hijo. + if (pid == 0) { + imprimirHijo(i); //Imprimo la infórmacion del hijo. + exit(0); //Termina el hijo. + } + + //Tendremos que esperar a que todos los procesos hijos terminen ya que puede llevar algun tiempo. + for(int i = 0; i < 3; i++) { + wait(NULL); //Con "wait(NULL)" indico al programa que espere a un hijo. + } + + //Por último imprimo el PID del padre. + printf("El PID del padre es %d.\n", getpid()); + + //Termina el programa. + return 0; + + /*En Visual Studio Code no me compila, pero desde un compilador online si que lo hace. + Compilador: https://www.onlinegdb.com/online_c_compiler + El resultado se debe ver algo asi (el PID va cambiando): + Soy el hijo 1. Mi PID es 936 y el PID de mi padre es 932. + Soy el hijo 2. Mi PID es 937 y el PID de mi padre es 932. + Soy el hijo 3. Mi PID es 938 y el PID de mi padre es 932. + PID del padre: 932*/ + } +} \ No newline at end of file diff --git a/UA1/Examen/dev_16/ua1ex1_teoria.txt b/UA1/Examen/dev_16/ua1ex1_teoria.txt new file mode 100644 index 00000000..4effa3b8 --- /dev/null +++ b/UA1/Examen/dev_16/ua1ex1_teoria.txt @@ -0,0 +1,40 @@ +Exámen de Alberto Mármol Bello hecho el día 16 de Octubre de 2024, para la asignatura de Programación de servicios y procesos. + +PARTE TEÓRICA + +A-Definición de proceso. Ilustra tu solución con un ejemplo. 1 punto. +Un proceso es la instancia de un programa en ejecución, que incluye su código, datos y recursos necesarios. +Cada proceso tiene su propio espacio de memoria. +Ejemplo: +Una persona abre un word, al abrirlo se genera un proceso, este proceso incluye: +El propipo código ejecutable, el estado del proceso, si está abierto, cerrado, etc, y los recursos de memoria utilizados para ello. + +B-Utilizando tus propias palabras, indica la relación entre hilos y procesos. Ilustra tu solución con un ejemplo. 3 puntos. +Los hilos son sub-unidades dentro de un proceso oo que quiere decir que hay varios apartados aparate del principal. +Un proceso puede tener varios hilos que comparten el mismo espacio de memoria, lo que les permite comunicarse de manera +más eficiente que un solo proceso. +Ejemplo: +Un ejemplo sencillo puede ser el de estar escuchando musica mientras trabajo, ya que el hilo1 puede ser trabajar y el hilo2 escuchar música, +ya que hago las dos acciones al mismo tiempo y de forma intercalada, mejorando mi efectividad en el trabajo. + +C-Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. +Las principales características de la Programación Concurrente: +Multitarea: que permite la ejecución simultánea de múltiples tareas. +Sincronización: se requieren mecanismos para evitar conflictos en el acceso a recursos compartidos. +Escabilidad: se mejora el rendimiento al agregar más recursos. +Interacción: las tareas pueden comunicarse y compartir recursos. +Aislamiento: las tareas son independientes, lo que reduce el impacto de fallos. + +Sus Ámbitos de Aplicación son: +Sistemas operativos: gestión de múltiples procesos y hilos. +Desarrollo web: manejo simultáneo de solicitudes de usuarios. +Aplicaciones de red: atención a múltiples conexiones de clientes. +Juegos: gestión de elementos como inteligencia artificial y físicas en tiempo real. +Procesamiento de datos: análisis y cálculos paralelos en big data y machine learning. + +D-Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. +La diferencia entre la Programación Paralela y la Programación Distribuida, es que la Paralela tiene todo el trabajo para un solo equipo, +lo que mejora en eficiencia, pero empeora la sincronización con el equipo, y la Distribuida trata de lo mismo pero que esta vez se ocupan +varios equipos de un mismo trabajo, lo que permite que el trabajo sea escalable, pero también puede haber problemas de lantecia y comunicación +entre los equipos debido a la unión de varios equipos en remoto. +En resumen la Programación Paralela trabaja sola y la Programación Distribuida trabaja en equipo y cada uno tiene sus ventajas y desventajas. \ No newline at end of file diff --git a/UA1/Examen/dev_16/ua1ex1p2.java b/UA1/Examen/dev_16/ua1ex1p2.java new file mode 100644 index 00000000..c9b6abfe --- /dev/null +++ b/UA1/Examen/dev_16/ua1ex1p2.java @@ -0,0 +1,76 @@ +/*Examen hecho por Alberto Mármol Bello a día 15 de Ocutbre para la asignatura de Programación de servicios y procesos.*/ + +//Añadimos las librerias útlies para nuestros sensores. +import java.util.Random; + +//Esta clase representa un sensor y implementa la interfaz Runnable para permitir su ejecución en un hilo. +class Sensor implements Runnable { + private String tipo; //Tipo de sensor (ejemplo: temperatura, humedad). + private int ciclos; //Número de ciclos de medición. + private Random random; //Con esto generamos números aleatorios. + + //Hacemos un constructor de la clase Sensor que inicializa los atributos tipo, ciclos y el generador de números aleatorios. + public Sensor(String tipo, int ciclos) { + this.tipo = tipo; + this.ciclos = ciclos; + this.random = new Random(); //Se inicia el generador de números aleatorios. + } + + //Tengo un método que se ejecuta al iniciar el hilo, este realiza las mediciones del sensor. + @Override + public void run() { + for(int i = 0;i < ciclos; i++){ + //Genero un valor aleatorio. + int valor = generarValor(); //Genera una valor que mide aleatoriamente. + + //Obtengo el tiempo actual. + long tiempoActual = System.currentTimeMillis(); //Con esto obtengo la marca de tiempo actual. + + //Ahora voy a imprimir el valor y marcar del tiempo. + System.out.println(tipo + "Medición: " + valor + "(Timestamp: " + tiempoActual + ")"); + + //Dormir durante un tiempo aleatorio entre 1 y 3 segundos. + try{ + int tiempoEspera = random.nextInt(3000) + 1000; //Se genera un tiempo de espera de entre 1000 y 3000 ms. + Thread.sleep(tiempoEspera); //El hilo se detiene por el tiempo generado. + } catch (InterruptedException e) { + //Si el hilo es interrumpido, se restaura el estado de interrupción. + Thread.currentThread().interrupt(); + break; //Sale del bucle si se interrumpe el hilo. + } + } + } + + //Creo otro método que genera un valor aleatorio para la medición del sensor. + private int generarValor() { + //Generar un valor aleatorio entre 0 y 100. + return random.nextInt(101); //Retorna un valor entre 0 y 100. + } +} + +//Creo la clase principal que simula el monitoreo de varios sensores (la he llamado con el nomvre del examen para que no de problemas al compilar). +public class ua1ex1p2 { + public static void main(String[] args) { + int ciclos = 10; //Número de ciclos de medición para cada sensor. + + //Creo los hilos para cada tipo de sensor. + Thread sensorTemperatura = new Thread(new Sensor("Sensor de Temperatura", ciclos)); + Thread sensorHumedad = new Thread(new Sensor("Sensor de Humedad", ciclos)); + Thread sensorEstadoPlantas = new Thread(new Sensor("Sensor de Estado de Plantas", ciclos)); + + //Justo debajo digo que se inicien los hilos. + sensorTemperatura.start(); //Aquí se inicia el hilo del sensor de temperatura. + sensorHumedad.start(); //Aquí se inicia el hilo del sensor de humedad. + sensorEstadoPlantas.start(); //Y por últmo aquí se inicia el hilo del sensor de estado de plantas. + + //Seguramente tengamos que esperar a que terminen los hilos. + try { + sensorTemperatura.join(); //Espera a que termine el hilo del sensor de temperatura. + sensorHumedad.join(); //Espera a que termine el hilo del sensor de humedad. + sensorEstadoPlantas.join(); //Espera a que termine el hilo del sensor de estado de plantas. + } catch (InterruptedException e) { + e.printStackTrace(); //Pongo esto aquí por si hay algun problema con algun hilo. + } + System.out.println("Monitoreo de sensores finalizado."); //Imprimo el mensaje que indica que el monitoreo ha terminado :). + } +} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea1.c b/UA1/Tareas/dev_16/ua1tarea1.c new file mode 100644 index 00000000..12522cbc --- /dev/null +++ b/UA1/Tareas/dev_16/ua1tarea1.c @@ -0,0 +1,26 @@ +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> + +int main() { + pid_t pid; + int num; + + printf("Introduzca un número: "); + scanf("%d", &num); + + pid = fork(); //Crea el proceso hijo. + + if (pid == -1) { //Error al crear el fork. + printf("No se pudo crear el proceso.\n"); + exit(-1); + } + + if (pid == 0) { + printf("Proceso Hijo, PID: %d. Sumando 4 a %d, el resultado es: %d.\n", getpid(), num, num + 4); + } else { + wait(NULL); // Espera a que termine el hijo + printf("Proceso Padre, PID: %d. Restando 5 a %d, el resultado es: %d.\n", getpid(), num, num - 5); + } + return 0; +} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java b/UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java new file mode 100644 index 00000000..c7adbacd --- /dev/null +++ b/UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java @@ -0,0 +1,26 @@ +package UA1.Tareas.dev_16.ua1tarea2; +import java.io.IOException; + +//La clase "LanzarProcesos" ejecuta el programa llamado "MainProcesos". +public class LanzarProcesos { + public static void main(String[] args) { + try { + //Dentro del ProcessBuilder ejecutamos el codigo "MainProcesos", para que defina el comando a ejecutar y sus argumentos. + //"java" es el que lanza el programa y "MainProcesos" es el programa que queremos que se lance. + ProcessBuilder processBuilder = new ProcessBuilder("java", "MainProcesos"); + processBuilder.inheritIO(); + Process process = processBuilder.start(); + + //Ahora esperamos a que el subproceso termine de ejecutarse. + //El método waitFor() detiene el programa pricipal hasta que el subproceso termine (para no saturar el programa). + int exitCode = process.waitFor(); + + //Muestro el código de salida del subproceso para indicar si terminó correctamente o si hubo algún error. + System.out.println("El programa MainProcesos terminó con exito :) " + exitCode); + } catch (IOException | InterruptedException e) { + + //Si hay algun error al intentar ejecutar el subproceso, mostramos un mensaje de error. + System.err.println("Hay un error el en programa :( " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java b/UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java new file mode 100644 index 00000000..34fa2bcf --- /dev/null +++ b/UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java @@ -0,0 +1,47 @@ +package UA1.Tareas.dev_16.ua1tarea2; +import java.util.Scanner; + +public class MainProcesos { + public static void main(String[] args) { //Creo un objeto Scanner para poder leer lo que el usuario escribe en el programa. + Scanner scanner = new Scanner(System.in); + + //Uso un objeto de tipo StringBuilder que sirve para guardar todo el texto que el usuario escriba. + StringBuilder inputText = new StringBuilder(); + + //Le decimos al usuario que puede escribir lo que el quiera pero cuando ponga un asterico (*) el programa se acaba. + System.out.println("Escribe lo que quieras, cuando desees terminar pon un asterisco (*):"); + + try { + //Meto un buce While que es un bucle infinito que lee todas lineas de texto hasta que el usuario escriba un asterisco. + while (true) { + //Leo la linea completa que el usuario ha escrito y se guarda en una variable llamada 'input'. + String input = scanner.nextLine(); + + //En este if si alguna línea de texto contiene un asterisco '*' se detien el programa. + if (input.contains("*")) { + //Aqui añadimos el texto que hay antes del asterisco, quitando todo lo que hay despues del asterisco. + //La instruccion input.indexOf("*") nos dice donde esta puesto el asterisco. + inputText.append(input, 0, input.indexOf("*")); + break; //Por ultimo salimos del bucle porque ya hemos encontrado el asterisco. + } + + //Si no encontramos el asterisco, agregamos toda la linea al resto del texto. + inputText.append(input).append("\n"); //Tambien añadimos un salto de linea para separar el texto. + } + + //Mostramos por pantalla todo el texto que el usuario ha escrito antes del asterisco. + System.out.println("Texto escrito:"); + System.out.println(inputText.toString()); + } + + catch (Exception e) { + //Si hay algun error durnate la lectura del texto, mostramos un mensaje explicando el problema. + System.err.println("Se produjo un error al leer su texto :( " + e.getMessage()); + } + + finally { + //Por ultimo cerramos el objeto Scanner para liberar los recursos utilizados, independientemente de si se hay un error o no. + scanner.close(); + } + } +} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java b/UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java new file mode 100644 index 00000000..03d23645 --- /dev/null +++ b/UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java @@ -0,0 +1,28 @@ +import java.util.Scanner; // Importar la clase Scanner + +public class LeerProcesos implements Runnable { + public LeerProcesos() { // Constructor sin parámetros + // Inicializaciones si son necesarias + } + + public void run() { + Scanner scanner = new Scanner(System.in); // Crear un objeto Scanner + System.out.println("Pido al usuario un número:"); + + try { + int numero = scanner.nextInt(); // Leer un número entero del usuario + if (numero < 0) { // Comprobar si es menor que cero + System.out.println("El argumento es un número menor que cero: " + numero); + System.exit(3); + } + System.out.println("El número ingresado es válido: " + numero); + } catch (Exception e) { // Manejar la excepción por entrada no válida + System.out.println("El argumento es una cadena o un número inválido."); + System.exit(2); + } finally { + scanner.close(); // Cerrar el scanner + } + + System.exit(0); // Salir con código 0 si todo es correcto + } +} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java b/UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java new file mode 100644 index 00000000..c5574f14 --- /dev/null +++ b/UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java @@ -0,0 +1,14 @@ +public class MainProcesos { + public static void main(String[] args) { + LeerProcesos lector = new LeerProcesos(); // Sin argumentos + Thread hilo = new Thread(lector); // Crear un hilo con el lector + + hilo.start(); // Iniciar el hilo + + try { + hilo.join(); // Esperar a que el hilo termine + } catch (InterruptedException e) { + System.out.println("El hilo se ha interrumpido."); + } + } +} \ No newline at end of file diff --git a/UA1/ejemplos/c/ejemWriteRead.c b/UA1/ejemplos/c/ejemWriteRead.c deleted file mode 100644 index a30bb37d..00000000 --- a/UA1/ejemplos/c/ejemWriteRead.c +++ /dev/null @@ -1,42 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -void main(void) -{ - char saludo[] = "Un saludo!!!\n"; - char buffer[10]; - int fd, bytesleidos; - - fd=open("texto.txt",1);//fichero se abre solo para escritura - if( fd == -1 ) - { - printf("ERROR AL ABRIR EL FICHERO...\n"); - exit(-1); - } - - printf("Escribo el saludo...\n"); - write(fd,saludo, strlen(saludo)); - close(fd); //cierro el fichero - - fd=open("texto.txt",0);//el fichero se abre solo para lectura - printf("Contenido del Fichero: \n"); - - //leo bytes de uno en uno y lo guardo en buffer - bytesleidos= read(fd, buffer, 1); - while (bytesleidos!=0){ - printf("%1c", buffer[0]); //pinto el byte leido - bytesleidos= read(fd, buffer, 1);//leo otro byte - } - close(fd); - -} -/* -administrador@ubuntu1:~$ gcc ejemWriteRead.c -o ejemWriteRead -administrador@ubuntu1:~$ ./ejemWriteRead -Escribo el saludo... -Contenido del Fichero: -Un saludo!!! -administrador@ubuntu1:~$ - -*/ - diff --git a/UA1/ejemplos/c/ejemplo1Fork.c b/UA1/ejemplos/c/ejemplo1Fork.c deleted file mode 100644 index 23460ff3..00000000 --- a/UA1/ejemplos/c/ejemplo1Fork.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -void main() { - pid_t pid, Hijo_pid; - pid = fork(); - - if (pid == -1 ) //Ha ocurrido un error - { - printf("No se ha podido crear el proceso hijo..."); - exit(-1); - } - if (pid == 0 ) //Nos encontramos en Proceso hijo - { - printf("Soy el proceso hijo \n\t Mi PID es %d, El PID de mi padre es: %d.\n", - getpid(), getppid() ); - } - else //Nos encontramos en Proceso padre - { - Hijo_pid = wait(NULL); //espera la finalización del proceso hijo - printf("Soy el proceso padre:\n\t Mi PID es %d, El PID de mi padre es: %d.\n\t Mi hijo: %d terminó.\n", getpid(), getppid(), pid); - } - exit(0); -} - -/* -mj@mj-ubuntu12:~/Escritorio/ProgramasC$ gcc ejemplo1Fork.c -o ejemplo1Fork -mj@mj-ubuntu12:~/Escritorio/ProgramasC$ ./ejemplo1Fork -Soy el proceso hijo - Mi PID es 4037, El PID de mi padre es: 4036. -Soy el proceso padre: - Mi PID es 4036, El PID de mi padre es: 3586. - Mi hijo: 4037 terminó. -mj@mj-ubuntu12:~/Escritorio/ProgramasC$ ps - PID TTY TIME CMD - 3586 pts/2 00:00:01 bash - 4044 pts/2 00:00:00 ps -mj@mj-ubuntu12:~/Escritorio/ProgramasC$ - - -*/ diff --git a/UA1/ejemplos/c/ejemplo1_2Fork.c b/UA1/ejemplos/c/ejemplo1_2Fork.c deleted file mode 100644 index eb398eea..00000000 --- a/UA1/ejemplos/c/ejemplo1_2Fork.c +++ /dev/null @@ -1,46 +0,0 @@ -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -//ABUELO-HIJO-NIETO -void main() { - pid_t pid, Hijo_pid,pid2,Hijo2_pid; - - pid = fork(); //Soy el Abuelo, creo a Hijo - - if (pid == -1 ) //Ha ocurrido un error - { - printf("No se ha podido crear el proceso hijo..."); - exit(-1); - } - - if (pid == 0 ) //Nos encontramos en Proceso hijo { - { - pid2 = fork();//Soy el Hijo, creo a Nieto - switch(pid2) - { - case -1: // error - printf("No se ha podido crear el proceso hijo - en el HIJO..."); - exit(-1); - break; - case 0: // proceso hijo - printf("\t\tSoy el proceso NIETO %d; Mi padre es = %d \n", - getpid(), getppid()); - break; - default: // proceso padre - Hijo2_pid=wait(NULL); - printf("\tSoy el proceso HIJO %d, Mi padre es: %d.\n", - getpid(), getppid()); - printf("\tMi hijo: %d termin�.\n", Hijo2_pid); - } - - } - - else //Nos encontramos en Proceso padre - { - Hijo_pid = wait(NULL); //espera la finalizaci�n del proceso hijo - printf("Soy el proceso ABUELO: %d, Mi HIJO: %d termin�.\n", - getpid(), pid); - } - exit(0); -} diff --git a/UA1/ejemplos/c/ejemplo2Fork.c b/UA1/ejemplos/c/ejemplo2Fork.c deleted file mode 100644 index 80c93752..00000000 --- a/UA1/ejemplos/c/ejemplo2Fork.c +++ /dev/null @@ -1,34 +0,0 @@ -#include <sys/types.h> -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> - -int main(int argc, char *argv[]) -{ - pid_t pid; - int status; - - if ( (pid=fork()) == 0 ) - { /* hijo */ - printf("Soy el hijo (%d, hijo de %d)\n", getpid(),getppid()); - } - else - { /* padre */ - wait(&status); - printf("Soy el padre (%d, hijo de %d)\n", getpid(),getppid()); - } - - return 0; -} -/* -mj@ubuntu-mj:~$ gcc ejemplo2Fork.c -o ejemplo2Fork -mj@ubuntu-mj:~$ ./ejemplo2Fork -Soy el hijo (3112, hijo de 3111) -Soy el padre (3111, hijo de 1923) -mj@ubuntu-mj:~$ ps - PID TTY TIME CMD - 1923 pts/0 00:00:00 bash - 3113 pts/0 00:00:00 ps -mj@ubuntu-mj:~$ - -*/ diff --git a/UA1/ejemplos/c/ejemplo3Fork.c b/UA1/ejemplos/c/ejemplo3Fork.c deleted file mode 100644 index b49cc61f..00000000 --- a/UA1/ejemplos/c/ejemplo3Fork.c +++ /dev/null @@ -1,38 +0,0 @@ -#include <sys/types.h> -#include <stdio.h> -#include <unistd.h> -#include <sys/wait.h> - -void main(void) -{ - pid_t pid; - int status; - - pid = fork(); - switch(pid) - { - case -1: /* error del fork() */ - perror("fork"); - break; - case 0: /* proceso hijo */ - printf("Este es el Proceso Hijo %d; padre = %d \n", getpid(), getppid()); - break; - default: /* padre */ - wait(&status); - printf("Este es el Proceso Padre %d; Mi padre es = %d \n", getpid(), getppid()); - } -} -/* -mj@ubuntu-mj:~$ gcc ejemplo3Fork.c -o ejemplo3Fork -mj@ubuntu-mj:~$ ./ejemplo3Fork -Este es el Proceso Hijo 3130; padre = 3129 -Este es el Proceso Padre 3129; Mi padre es = 2920 -mj@ubuntu-mj:~$ sh -$ exit -mj@ubuntu-mj:~$ ps - PID TTY TIME CMD - 2920 pts/1 00:00:00 bash - 3132 pts/1 00:00:00 ps -mj@ubuntu-mj:~$ - -*/ diff --git a/UA1/ejemplos/c/ejemplo4Fork.c b/UA1/ejemplos/c/ejemplo4Fork.c deleted file mode 100644 index 61c3658c..00000000 --- a/UA1/ejemplos/c/ejemplo4Fork.c +++ /dev/null @@ -1,48 +0,0 @@ -#include <sys/types.h> -#include <unistd.h> -#include <stdio.h> - -int main(int argc, char *argv[]) -{ - pid_t pid1, pid2; - int status1, status2; - - if ( (pid1=fork()) == 0 ) - { /* hijo (1a generacion) = padre */ - if ( (pid2=fork()) == 0 ) - { /* hijo (2a generacion) = nieto */ - printf("Soy el nieto (%d, hijo de %d)\n", -getpid(), getppid()); - } - else - { /* padre (2a generacion) = padre */ - -wait(&status2); - printf("Soy el padre (%d, hijo de %d)\n", -getpid(), getppid()); - } - } - else - { /* padre (1a generacion) = abuelo */ - wait(&status1); - printf("Soy el abuelo (%d, hijo de %d)\n", getpid(), -getppid()); - } - - return 0; -} -/* -mj@ubuntu-mj:~$ gcc ejemplo4Fork.c -o ejemplo4Fork -mj@ubuntu-mj:~$ ./ejemplo4Fork -Soy el nieto (3161, hijo de 3160) -Soy el padre (3160, hijo de 3159) -Soy el abuelo (3159, hijo de 2920) -mj@ubuntu-mj:~$ ps - PID TTY TIME CMD - 2920 pts/1 00:00:00 bash - 3162 pts/1 00:00:00 ps -mj@ubuntu-mj:~$ - -*/ - - diff --git a/UA1/ejemplos/c/ejemploExec.c b/UA1/ejemplos/c/ejemploExec.c deleted file mode 100644 index dbdb77fe..00000000 --- a/UA1/ejemplos/c/ejemploExec.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <unistd.h> -#include <stdio.h> -void main() -{ - printf("Ejemplo de uso de exec():"); - printf("Los archivos en el directorio son:\n"); - execl("/bin/ls", "ls", "-l",(char *)NULL); - printf("��� Esto no se ejecuta !!!\n"); -} diff --git a/UA1/ejemplos/c/ejemploForkPipe.c b/UA1/ejemplos/c/ejemploForkPipe.c deleted file mode 100644 index 07b32bee..00000000 --- a/UA1/ejemplos/c/ejemploForkPipe.c +++ /dev/null @@ -1,103 +0,0 @@ -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -#include <string.h> -//ABUELO-HIJO-NIETO -void main() { - pid_t pid, Hijo_pid,pid2,Hijo2_pid; - - int fd1[2]; //padre-hijo - int fd2[2]; //hijo-padre - - char saludoAbuelo[]="Saludos del Abuelo.\0"; - char saludoPadre[]= "Saludos del Padre..\0"; - char saludoHijo[]= "Saludos del Hijo...\0"; - char saludoNieto[]= "Saludos del Nieto..\0"; - - char buffer[80]=""; - - pipe(fd1); //pipe para comunicaci�n de padre a hijo - pipe(fd2); //pipe para comunicaci�n de hijo a padre - - pid = fork(); //Soy el Abuelo, creo a Hijo - - if (pid == -1 ) //Ha ocurrido un error - { - printf("No se ha podido crear el proceso hijo..."); - exit(-1); - } - - if (pid == 0 ) //Nos encontramos en Proceso hijo { - { - pid2 = fork();//Soy el Hijo, creo a Nieto - switch(pid2) - { - case -1: // error - printf("No se ha podido crear el proceso hijo en el HIJO..."); - exit(-1); - break; - case 0: // proceso hijo - //NIETO RECIBE - close(fd2[1]);//cierra el descriptor de entrada - read(fd2[0], buffer, sizeof(buffer)); //leo el pipe - printf("\t\tNIETO RECIBE mensaje de su padre: %s\n",buffer); - - //NIETO ENVIA - printf("\t\tNIETO ENVIA MENSAJE a su padre...\n"); - close(fd1[0]); - write(fd1[1], saludoNieto, strlen(saludoNieto)); - - break; - default: // proceso padre - //HIJO RECIBE - close(fd1[1]);//cierra el descriptor de entrada - read(fd1[0], buffer, sizeof(buffer)); //leo el pipe - printf("\tHIJO recibe mensaje de ABUELO: %s\n",buffer); - - //HIJO ENVIA a su hijo - close(fd2[0]); - write(fd2[1], saludoPadre, strlen(saludoPadre));//escribo en pipe - Hijo2_pid=wait(NULL); //espero al hijo - - //RECIBE de su hijo - close(fd1[1]);//cierra el descriptor de entrada - read(fd1[0], buffer, sizeof(buffer)); //leo el pipe - printf("\tHIJO RECIBE mensaje de su hijo: %s\n",buffer); - - //HIJO ENVIA a su PADRE - printf("\tHIJO ENVIA MENSAJE a su padre...\n",buffer); - close(fd2[0]); - write(fd2[1], saludoHijo, strlen(saludoHijo));//escribo en pipe - - } - - } - - else //Nos encontramos en Proceso padre - { - //PADRE ENVIA - printf("ABUELO ENVIA MENSAJE AL HIJO...\n"); - close(fd1[0]); - write(fd1[1], saludoAbuelo, strlen(saludoAbuelo));//escribo en pipe - Hijo_pid = wait(NULL); //espera la finalizaci�n del proceso hijo - - //PADRE RECIBE - close(fd2[1]);//cierra el descriptor de entrada - read(fd2[0], buffer, sizeof(buffer)); //leo el pipe - printf("El ABUELO RECIBE MENSAJE del HIJO: %s\n", buffer); - - } - exit(0); -} -/* -administrador@ubuntu1:~$ gcc ejemploForkPipe.c -o ejemploForkPipe -administrador@ubuntu1:~$ ./ejemploForkPipe -ABUELO ENVIA MENSAJE AL HIJO... - HIJO recibe mensaje de ABUELO: Saludos del Abuelo. - NIETO RECIBE mensaje de su padre: Saludos del Padre.. - NIETO ENVIA MENSAJE a su padre... - HIJO RECIBE mensaje de su hijo: Saludos del Nieto.. - HIJO ENVIA MENSAJE a su padre... -El ABUELO RECIBE MENSAJE del HIJO: Saludos del Hijo... - -*/ diff --git a/UA1/ejemplos/c/ejemploPadres.c b/UA1/ejemplos/c/ejemploPadres.c deleted file mode 100644 index 500a58b3..00000000 --- a/UA1/ejemplos/c/ejemploPadres.c +++ /dev/null @@ -1,27 +0,0 @@ -//#include <sys/types.h> -#include <stdio.h> -#include <unistd.h> - -void main(void) -{ - pid_t id_proceso; - pid_t id_padre; - - id_proceso = getpid(); - id_padre = getppid(); - - printf("Identificador de este proceso: %d\n", id_proceso); - printf("Identificador del proceso padre: %d\n", id_padre); -} -/* -mj@ubuntu-mj:~$ gcc ejemploPadres.c -o ejemploPadres -mj@ubuntu-mj:~$ ./ejemploPadres -Identificador de este proceso: 2833 -Identificador del proceso padre: 1923 -mj@ubuntu-mj:~$ ps - PID TTY TIME CMD - 1923 pts/0 00:00:00 bash - 2834 pts/0 00:00:00 ps -mj@ubuntu-mj:~$ - -*/ diff --git a/UA1/ejemplos/c/ejemploPipe1.c b/UA1/ejemplos/c/ejemploPipe1.c deleted file mode 100644 index 74568048..00000000 --- a/UA1/ejemplos/c/ejemploPipe1.c +++ /dev/null @@ -1,47 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -int main() -{ - int fd[2]; - char buffer[30]; - pid_t pid; - - pipe(fd); - - pid=fork(); - - switch(pid) { - case -1 : //ERROR - printf("NO SE HA PODIDO CREAR HIJO..."); - exit(-1); - break; - case 0 : //HIJO - printf("El HIJO escribe en el pipe...\n"); - write(fd[1], "Hola papi", 10); - break; - default : //PADRE - wait(NULL); - printf("El PADRE lee del pipe...\n"); - read(fd[0], buffer, 10); - printf("\tMensaje leido: %s\n",buffer); - break; - } -} -/* -//con wait(NULL) antes -administrador@ubuntu1:~$ gcc ejemploPipe1.c -o ejemploPipe1 -administrador@ubuntu1:~$ ./ejemploPipe1 -El HIJO escribe en el pipe... -El PADRE lee del pipe... - Mensaje leido: Hola papi -administrador@ubuntu1:~$ - -//con wait(NULL) al funal -administrador@ubuntu1:~$ gcc ejemploPipe1.c -o ejemploPipe1 -administrador@ubuntu1:~$ ./ejemploPipe1 -El PADRE lee del pipe... -El HIJO escribe en el pipe... - Mensaje leido: Hola papi - -*/ diff --git a/UA1/ejemplos/c/ejemploPipe2.c b/UA1/ejemplos/c/ejemploPipe2.c deleted file mode 100644 index 21e813e8..00000000 --- a/UA1/ejemplos/c/ejemploPipe2.c +++ /dev/null @@ -1,44 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#include <unistd.h> -int main() -{ - int descF[2]; - char buffer[30]; - pid_t pid; - - pipe(descF); - - pid=fork(); - - switch(pid) { - case -1 : //ERROR - printf("NO SE HA PODIDO CREAR HIJO..."); - exit(-1); - break; - case 0 : //HIJO - printf("El HIJO escribe en el pipe...\n"); - write(descF[1], "Hola papi", 10); - break; - default : //PADRE - wait(NULL); - printf("El PADRE lee del pipe...\n"); - read(descF[0], buffer, 10); - printf("\tMensaje leido: %s\n",buffer); - - break; - } -} -/* -//con wait(NULL) antes -administrador@ubuntu1:~$ gcc ejemploPipe1.c -o ejemploPipe1 -administrador@ubuntu1:~$ ./ejemploPipe1 -El HIJO escribe en el pipe... -El PADRE lee del pipe... - Mensaje leido: Hola papi -administrador@ubuntu1:~$ - - - -*/ diff --git a/UA1/ejemplos/c/ejemploPipe3-2.c b/UA1/ejemplos/c/ejemploPipe3-2.c deleted file mode 100644 index 83b43e73..00000000 --- a/UA1/ejemplos/c/ejemploPipe3-2.c +++ /dev/null @@ -1,47 +0,0 @@ -#include <stdio.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -int main(void) -{ -//informacion fluye de hijo a padre - int fd[2]; - pid_t pid; - - char saludoHijo[]="Hola papi.\0"; - char buffer[80]; - - pipe(fd); //creo pipe - pid=fork(); //creo proceso - - switch(pid) { - case -1 : //ERROR - printf("NO SE HA PODIDO CREAR HIJO..."); - exit(-1); - case 0 : //HIJO - //HIJO ENVIA - printf("\tEl HIJO envia algo al pipe.\n"); - close(fd[0]); - write(fd[1], saludoHijo, strlen(saludoHijo)); //escribo en pipe - break; - default : //PADRE - wait(NULL); //espero al proceso hijo - //PADRE RECIBE - close(fd[1]);//cierra el descriptor de salida - read(fd[0], buffer, sizeof(buffer));//leo el pipe - printf("El PADRE recibe algo del pipe: %s\n", buffer); - break; - } - return 0; -} -/* -administrador@ubuntu1:~$ gcc ejemploPipe3-2.c -o ejemploPipe3-2 -administrador@ubuntu1:~$ ./ejemploPipe3-2 - El HIJO envia algo al pipe. -El PADRE recibe algo del pipe: Hola papi. -administrador@ubuntu1:~$ - - - -*/ - diff --git a/UA1/ejemplos/c/ejemploPipe3.c b/UA1/ejemplos/c/ejemploPipe3.c deleted file mode 100644 index d6b40415..00000000 --- a/UA1/ejemplos/c/ejemploPipe3.c +++ /dev/null @@ -1,45 +0,0 @@ -#include <stdio.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -//informacion de padre a hijo -int main(void) -{ - int fd[2]; - pid_t pid; - char saludoPadre[]="Buenos dias hijo.\0"; - char buffer[80]; - - pipe(fd); //creo pipe - pid=fork(); //creo proceso - - switch(pid) { - case -1 : //ERROR - printf("NO SE HA PODIDO CREAR HIJO..."); - exit(-1); - case 0 : //HIJO RECIBE - close(fd[1]);//cierra el descriptor de entrada - read(fd[0], buffer, sizeof(buffer)); //leo el pipe - printf("\tEl HIJO recibe algo del pipe: %s\n",buffer); - - break; - default ://PADRE ENVIA - close(fd[0]); - write(fd[1], saludoPadre, strlen(saludoPadre));//escribo en pipe - printf("El PADRE ENVIA MENSAJE AL HIJO...\n"); - wait(NULL); //espero al proceso hijo - break; - } - return 0; -} -/* -administrador@ubuntu1:~$ gcc ejemploPipe3.c -o ejemploPipe3 -administrador@ubuntu1:~$ ./ejemploPipe3 -El PADRE ENVIA MENSAJE AL HIJO... - El HIJO recibe algo del pipe: Buenos dias hijo. -administrador@ubuntu1:~$ - - - -*/ - diff --git a/UA1/ejemplos/c/ejemploSystem.c b/UA1/ejemplos/c/ejemploSystem.c deleted file mode 100644 index ae91fe04..00000000 --- a/UA1/ejemplos/c/ejemploSystem.c +++ /dev/null @@ -1,12 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -void main() -{ - printf("Ejemplo de uso de system():"); - printf("\n\tListado del directorio actual y envio a un fichero:"); - printf("%d",system("ls > ficsalida")); - printf("\n\tAbrimos con el gedit el fichero..."); - printf("%d",system("gedit ficsalida")); - printf("\n\tEste comando es err�neo: %d",system("ged")); - printf("\nFin de programa....\n"); -} diff --git a/UA1/ejemplos/c/fifocrea.c b/UA1/ejemplos/c/fifocrea.c deleted file mode 100644 index 721b99d6..00000000 --- a/UA1/ejemplos/c/fifocrea.c +++ /dev/null @@ -1,31 +0,0 @@ -//fifocrea.c -#include <stdio.h> -#include <stdlib.h> -#include <fcntl.h> - -int main(void) -{ - int fp; - int p, bytesleidos; - char saludo[] = "Un saludo!!!\n", buffer[10]; - - p=mkfifo("FIFO2", S_IFIFO|0666);//permiso de lectura y escritura - - if (p==-1) { - printf("HA OCURRIDO UN ERROR...\n"); - exit(0); - } - - while(1) { - fp = open("FIFO2", 0); - bytesleidos= read(fp, buffer, 1); - printf("OBTENIENDO Información..."); - while (bytesleidos!=0){ - printf("%1c", buffer[0]); //leo un caracter - bytesleidos= read(fp, buffer, 1);//leo otro byte - } - close(fp); - } - return(0); -} - diff --git a/UA1/ejemplos/c/fifoescribe.c b/UA1/ejemplos/c/fifoescribe.c deleted file mode 100644 index 79540272..00000000 --- a/UA1/ejemplos/c/fifoescribe.c +++ /dev/null @@ -1,20 +0,0 @@ -//fifoescribe2.c -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -int main() -{ - int fp; - char saludo[] = "Un saludo!!!\n"; - fp = open("FIFO2", 1); - - if(fp == -1) { - printf("ERROR AL ABRIR EL FICHERO..."); - exit(1); - } - printf("Mandando información al FIFO...\n"); - write(fp,saludo, strlen(saludo)); - close(fp); - return 0; -} diff --git a/UA1/ejemplos/c/procesosActivos.c b/UA1/ejemplos/c/procesosActivos.c deleted file mode 100644 index eaa6875e..00000000 --- a/UA1/ejemplos/c/procesosActivos.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <unistd.h> -#include <stdio.h> -#include <errno.h> -void main() { - printf ("Lista de procesos\n"); - if (execl ("/bin/ps", "ps", "-f", (char *)NULL) < 0) - printf("Error en exec %d\n", errno); - else - printf ("Fin de la lista de procesos\n"); -} diff --git a/UA1/ejemplos/c/sigkill.c b/UA1/ejemplos/c/sigkill.c deleted file mode 100644 index 63097837..00000000 --- a/UA1/ejemplos/c/sigkill.c +++ /dev/null @@ -1,79 +0,0 @@ -#include <stdio.h> -#include <signal.h> -#include <stdlib.h> -#include <fcntl.h> -// To avoid WARNINGS -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> -#include <stdbool.h> - -int contador_padre = 0; -bool end = false; - -// Gestion de senyales en proceso padre -void gestion_padre (int segnal) -{ - contador_padre++; - switch(segnal) - { - case SIGUSR1: - printf ("\t...Padre recibe senyal SIGUSR1 (%d) (contador padre: %d)", segnal, contador_padre); - break; - - case SIGTERM: - printf ("\t...Padre recibe senyal SIGTERM (%d) (contador padre: %d)", segnal, contador_padre); - printf ("\n\n\t\t\tOh no! It's TIME TO DIE!\n\n"); - end=true; - break; - - default: // JIC - printf ("\tPadre recibe senyal ... %d (contador padre: %d) \n", segnal, contador_padre); - break; - } -} - - -int main () -{ - int iterations = 3; - int pid_padre, pid_hijo; - - pid_padre = getpid (); - pid_hijo = fork (); // Creamos el Proceso Hijo - - switch (pid_hijo) - { - case -1: - printf ("Error al crear el proceso hijo...\n"); - exit (-1); - - case 0: // Proceso Hijo - for(int i=0; i<iterations; i++) - { - sleep(2); - kill (pid_padre, SIGUSR1); // Proceso Hijo envía senyal SIGUSR1 al Proceso Padre - } - printf ("\n\t\t\tFather ... Your time has reached to the end ...\n\n"); - kill (pid_padre, SIGTERM); // Proceso Hijo envía senyal SIGKILL al Proceso Padre - sleep(2); - break; - - default: // Proceso Padre - // tratamiento de la senyal en proceso padre - signal (SIGUSR1, gestion_padre); - signal (SIGTERM, gestion_padre); - - // Bucle Infinito hasta recibir SIGTERM ... - while (!end) - { - printf ("\nProceso Padre esperando senyal ... "); - pause(); // Proceso Padre espera hasta recibir una senyal del hijo - } - printf ("\t\t\t ... I am going to die ...\n\n"); - break; - } - - return 0; -} - diff --git a/UA1/ejemplos/c/sincronizar-1.c b/UA1/ejemplos/c/sincronizar-1.c deleted file mode 100644 index c35f56b9..00000000 --- a/UA1/ejemplos/c/sincronizar-1.c +++ /dev/null @@ -1,36 +0,0 @@ -#include <stdio.h> -#include <signal.h> -#include <stdlib.h> -#include <fcntl.h> -/*-------------------------------------------*/ -/* gesti�n de se�ales en proceso padre */ -void manejador( int segnal ) -{ - printf("Hijo recibe se�al..%d\n", segnal); -} -/*-------------------------------------------*/ -int main() -{ - int pid_hijo; - pid_hijo = fork(); //creamos hijo - - switch(pid_hijo) - { - case -1: - printf( "Error al crear el proceso hijo...\n"); - exit( -1 ); - case 0: //HIJO - signal( SIGUSR1, manejador); //MANEJADOR DE SE�AL EN HIJO - while(1) { - }; - break; - default: //PADRE envia 2 se�ales - sleep(1); - kill(pid_hijo, SIGUSR1);//ENVIA SE�AL AL HIJO - sleep(1); - kill(pid_hijo, SIGUSR1);//ENVIA SE�AL AL HIJO - sleep(1); - break; - } - return 0; -} diff --git a/UA1/ejemplos/c/sincronizar.c b/UA1/ejemplos/c/sincronizar.c deleted file mode 100644 index 135ed4df..00000000 --- a/UA1/ejemplos/c/sincronizar.c +++ /dev/null @@ -1,73 +0,0 @@ -#include <stdio.h> -#include <signal.h> -#include <stdlib.h> -#include <fcntl.h> -// To avoid WARNINGS -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> - -int contador_padre = 0; -int contador_hijo = 0; - -// Gestion de senyales en proceso padre -void gestion_padre (int segnal) -{ - contador_padre++; - printf ("\t...Padre recibe senyal..%d (contador padre: %d) \n", segnal, contador_padre); -} - -// Gestion de senyales en proceso hijo */ -void gestion_hijo (int segnal) -{ - contador_hijo++; - printf ("\t...Hijo recibe senyal..%d (contador hijo: %d) \n", segnal, contador_hijo); -} - -int main () -{ - int iterations = 3; - int pid_padre, pid_hijo; - - pid_padre = getpid (); - pid_hijo = fork (); // Creamos el Proceso Hijo - - switch (pid_hijo) - { - case -1: - printf ("Error al crear el proceso hijo...\n"); - exit (-1); - - case 0: // Proceso Hijo - // tratamiento de la senyal en proceso hijo - signal (SIGUSR1, gestion_hijo); - while (contador_hijo < iterations) - { // bucle infinito - sleep(1); - kill (pid_padre, SIGUSR1); // Proceso Hijo env�a senyal al Proceso Padre - printf ("Proceso Hijo esperando senyal ..."); - pause(); // Proceso Hijo espera hasta que llegue una senyal de respuesta - } - break; - - default: // Proceso Padre - // tratamiento de la senyal en proceso padre - signal (SIGUSR1, gestion_padre); - while (contador_padre < iterations) - { - printf ("Proceso Padre esperando senyal ... "); - pause(); // Proceso Padre espera hasta recibir una senyal del hijo - sleep(1); - kill (pid_hijo, SIGUSR1); // Proceso Padre env�a senyal al Proceso Hijo - } - break; - } - - return 0; -} - - - - - - diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple1.java b/UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple1.java deleted file mode 100644 index 49005257..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple1.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ceslopedevega.hilos; - -public class HiloSimple1 extends Thread { - private int id; - private int iter; - - public HiloSimple1 (int id, int iter) - { - this.id = id; - this.iter = iter; - } - - public void run() - { - for (int i = 0; i < iter; i++) - { - System.out.println("Iteraci�n " + i + " dentro del hilo " + id); - try - { - Thread.sleep(1000); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - System.out.println("El hilo " + id + " ha terminado su ejecuci�n"); - } -} diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple2.java b/UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple2.java deleted file mode 100644 index 6dd9528d..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/HiloSimple2.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ceslopedevega.hilos; - -public class HiloSimple2 implements Runnable { - private int id; - private int iter; - - public HiloSimple2 (int id, int iter) - { - this.id = id; - this.iter = iter; - } - - public void run() - { - for (int i = 0; i < iter; i++) - { - System.out.println("Iteraci�n " + i + " dentro del hilo " + id); - try - { - Thread.sleep(1000); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - System.out.println("El hilo " + id + " ha terminado su ejecuci�n"); - } -} diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple1.java b/UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple1.java deleted file mode 100644 index f2a7026d..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple1.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ceslopedevega.hilos; - -public class LanzaHiloSimple1 { - public static void main (String[] args) - { - HiloSimple1 hilo1 = new HiloSimple1(1, 10); - HiloSimple1 hilo2 = new HiloSimple1(2, 4); - HiloSimple1 hilo3 = new HiloSimple1(3, 5); - - // Se lanzan los hilos - hilo1.start(); - hilo2.start(); - hilo3.start(); - } -} diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple2.java b/UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple2.java deleted file mode 100644 index 96d5aaf8..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/hilos/LanzaHiloSimple2.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ceslopedevega.hilos; - -public class LanzaHiloSimple2 { - public static void main (String[] args) - { - HiloSimple2 hilo1 = new HiloSimple2(1, 10); - HiloSimple2 hilo2 = new HiloSimple2(2, 4); - HiloSimple2 hilo3 = new HiloSimple2(3, 5); - - // Se crean los hilos (no extienden Thread directamente) - Thread t1 = new Thread(hilo1); - Thread t2 = new Thread(hilo2); - Thread t3 = new Thread(hilo3); - - // Se lanzan los hilos - t1.start(); - t2.start(); - t3.start(); - } -} diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo1.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo1.java deleted file mode 100644 index a7cab8a8..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo1.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.IOException; - -public class Ejemplo1 { - public static void main(String[] args) throws IOException { - ProcessBuilder pb = new ProcessBuilder("EXPLORER.exe"); - for(int i=0; i<1;i++) - { - Process p = pb.start(); - } - } -}//Ejemplo1 - diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2.java deleted file mode 100644 index 30f102aa..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.*; - -public class Ejemplo2 { - public static void main(String[] args) throws IOException { - - Process p = new ProcessBuilder("CMD", "/C", "DIR").start(); - try { - - InputStream is = p.getInputStream(); - - // mostramos en pantalla caracter a caracter - int c; - while ((c = is.read()) != -1) - System.out.print((char) c); - is.close(); - - - } catch (Exception e) { - e.printStackTrace(); - } - - // COMPROBACION DE ERROR - 0 bien - 1 mal - int exitVal; - try { - exitVal = p.waitFor(); - System.out.println("Valor de Salida: " + exitVal); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -}// Ejemplo2 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2Error.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2Error.java deleted file mode 100644 index 78739ca8..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo2Error.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -public class Ejemplo2Error { - public static void main(String[] args) throws IOException { - - Process p = new ProcessBuilder("CMD", "/C", "DIRR").start(); - try { - - InputStream is = p.getInputStream(); - - // mostramos en pantalla caracter a caracter - int c; - while ((c = is.read()) != -1) - System.out.print((char) c); - is.close(); - - - } catch (Exception e) { - e.printStackTrace(); - } - - // COMPROBACION DE ERROR - 0 bien - 1 mal - int exitVal; - try { - exitVal = p.waitFor(); - System.out.println("Valor de Salida: " + exitVal); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - try { - InputStream er = p.getErrorStream(); - BufferedReader brer = new BufferedReader(new InputStreamReader(er)); - String liner = null; - while ((liner = brer.readLine()) != null) - System.out.println("ERROR >" + liner); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - - } - }// Ejemplo2 - diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo3.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo3.java deleted file mode 100644 index bdfb389a..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo3.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.*; - -// Enviar datos al stream de entrada del proceso -public class Ejemplo3 { - public static void main(String[] args) throws IOException { - Process p = new ProcessBuilder("CMD", "/C", "DATE").start(); - - // escritura -- envia entrada a DATE - OutputStream os = p.getOutputStream(); - os.write("20-05-20".getBytes()); - os.flush(); // vac�a el buffer de salida - - // lectura -- obtiene la salida de DATE - InputStream is = p.getInputStream(); - int c; - while ((c = is.read()) != -1) - System.out.print((char) c); - is.close(); - - // COMPROBACION DE ERROR - 0 bien - 1 mal - int exitVal; - try { - exitVal = p.waitFor(); - System.out.println("Valor de Salida: " + exitVal); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - -}//Ejemplo4 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo4.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo4.java deleted file mode 100644 index 010eb13d..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo4.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.*; - -public class Ejemplo4 { - - public static void main(String[] args) throws IOException { - final String dir = System.getProperty("user.dir"); - System.out.println("current dir = " + dir); - - File directorio = new File("bin"); - ProcessBuilder pb = new ProcessBuilder("java", "com.ceslopedevega.procesos.EjemploLectura"); - pb.directory(directorio); - - - - // se ejecuta el proceso - Process p = pb.start(); - - // escritura -- envia entrada - OutputStream os = p.getOutputStream(); - os.write("Hola Manuel\n".getBytes()); - os.flush(); // vacía el buffer de salida - - // lectura -- obtiene la salida - InputStream is = p.getInputStream(); - int c; - while ((c = is.read()) != -1) - System.out.print((char) c); - is.close(); - - // COMPROBACION DE ERROR - 0 bien - 1 mal - int exitVal; - try { - exitVal = p.waitFor(); - System.out.println("Valor de Salida: " + exitVal); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - try { - InputStream er = p.getErrorStream(); - BufferedReader brer = new BufferedReader(new InputStreamReader(er)); - String liner = null; - while ((liner = brer.readLine()) != null) - System.out.println("ERROR >" + liner); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - -}// Ejemplo5 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo5.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo5.java deleted file mode 100644 index 39e50576..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo5.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ceslopedevega.procesos; - -import java.io.*; -import java.util.*; - -public class Ejemplo5 { - public static void main(String args[]) throws IOException { - - File directorio = new File(".\\bin"); - - ProcessBuilder test = new ProcessBuilder(); - Map entorno = test.environment(); - System.out.println("Variables de entorno:"); - System.out.println(entorno); - - //test = new ProcessBuilder("java", "LeerNombre", "Luis"); - test = new ProcessBuilder("java", "com.ceslopedevega.procesos.LeerNombre", "Luis"); - - // devuelve el nombre del proceso y sus argumentos - List l = test.command(); - Iterator iter = l.iterator(); - System.out.println("\nArgumentos del comando:"); - while (iter.hasNext()) - System.out.println(iter.next()); - - - // Se lanza el proceso - ProcessBuilder pb = new ProcessBuilder("java", "com.ceslopedevega.procesos.LeerNombre", "Luis"); - pb.directory(directorio); - pb.redirectOutput(ProcessBuilder.Redirect.INHERIT); - - // se ejecuta el proceso - Process p = pb.start(); - - } -}// Ejemplo6 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo6.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo6.java deleted file mode 100644 index 85353d08..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo6.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.File; -import java.io.IOException; - -public class Ejemplo6 { - public static void main(String args[]) throws IOException { - ProcessBuilder pb = new ProcessBuilder("CMD","/C" ,"DIRR"); - - File fOut = new File("salida.txt"); - File fErr = new File("error.txt"); - - pb.redirectOutput(fOut); - pb.redirectError(fErr); - pb.start(); - } -}// Ejemplo7 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo7.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo7.java deleted file mode 100644 index 46ebe140..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo7.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.File; -import java.io.IOException; - -public class Ejemplo7 { - public static void main(String args[]) throws IOException { - ProcessBuilder pb = new ProcessBuilder("CMD"); - - File fBat = new File("fichero.bat"); - File fOut = new File("salida.txt"); - File fErr = new File("error.txt"); - - pb.redirectInput(fBat); - pb.redirectOutput(fOut); - pb.redirectError(fErr); - pb.start(); - - } -}// Ejemplo8 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo8.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo8.java deleted file mode 100644 index 4e49e012..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Ejemplo8.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.IOException; - -public class Ejemplo8 { - public static void main(String args[]) throws IOException { - ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "DIR"); - - // Salida a consola - // Redirect.INHERIT indica que la entrada y salida del proceso - // ser� la misma que el proceso actual (padre) - pb.redirectOutput(ProcessBuilder.Redirect.INHERIT); - Process p = pb.start(); - } -}// Ejemplo9 diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/EjemploLectura.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/EjemploLectura.java deleted file mode 100644 index 26111e82..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/EjemploLectura.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ceslopedevega.procesos; -import java.io.*; -public class EjemploLectura{ - public static void main (String [] args) - { - InputStreamReader in = new InputStreamReader(System.in); - BufferedReader br = new BufferedReader (in); - String texto; - try { - System.out.println("Introduce una cadena...."); - texto= br.readLine(); - System.out.println("Cadena escrita: "+texto); - in.close(); - }catch (Exception e) { e.printStackTrace();} - } -}//EjemploLectura diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/LeerNombre.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/LeerNombre.java deleted file mode 100644 index 0061bbc1..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/LeerNombre.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ceslopedevega.procesos; - -public class LeerNombre { - - public static void main(String[] args) { - if(args.length!=1){ - System.out.println("Argumentos incorrectos en main()"); - System.exit(-1); - } - System.out.printf("Nombre: %s %n", args[0]); - System.exit(1); - } - -} diff --git a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Unsaludo.java b/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Unsaludo.java deleted file mode 100644 index 7c03ee3f..00000000 --- a/UA1/ejemplos/java/src/com/ceslopedevega/procesos/Unsaludo.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.ceslopedevega.procesos; -public class Unsaludo { - public static void main(String[] args) { - if (args.length < 1) { - System.out.println("SE NECESITA UN SALUDO..."); - System.exit(1); - } - for(int i=0; i<5; i++) - System.out.println(i+1 +". "+args[0]); - } -}//Unsaludo diff --git a/UA1/examen/dev_0/ua1ex1.c b/UA1/examen/dev_0/ua1ex1.c deleted file mode 100644 index 9c70ebfd..00000000 --- a/UA1/examen/dev_0/ua1ex1.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - -NOMBRE: -FECHA: - -PARTE PRÁCTICA - -FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos -FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos -FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos -FR4: Implementa el control de errores - 2 puntos -FR5: Documenta y estructura el código - 2 puntos - -Para evitar complicaciones con máquinas virtuales, si lo prefieres puedes utilizar el compilador online: https://www.onlinegdb.com/online_c_compiler - -Notas: - -Los comentarios (descriptivos y concisos) en el código ... siempre son bien. -Los nombres de las variables autodescriptivos ... siempre son bien. -Las impresión por pantalla, correctamente indentada y verticalmente espaciada ... siempre es bien. -Los warnings del presente ... son los errores del futuro. -El nombre del fichero .c a entregar debe ser: examen\dev_X\ua1ex1.c , es decir, el fichero ua1ex1.cdebe estar ubicado en tu carpeta dev_X\ - -*/ diff --git a/UA1/examen/dev_0/ua1ex1_teoria.txt b/UA1/examen/dev_0/ua1ex1_teoria.txt deleted file mode 100644 index 2ea0d591..00000000 --- a/UA1/examen/dev_0/ua1ex1_teoria.txt +++ /dev/null @@ -1,16 +0,0 @@ -NOMBRE: -FECHA: - -PARTE TEÓRICA - -a) Definición de proceso. 1 punto. - -b) Utilizando tus propias palabras, indica la relación entre hilos y procesos. 3 puntos. - -c) Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. - -d) Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. - -Notas: - -El nombre del fichero .txt a entregar debe ser: examen\dev_X\ua1ex1_teoria.txt , es decir, el fichero ua1ex1_teoria.txt debe estar ubicado en tu carpeta examen\dev_X\ diff --git a/UA1/tareas/dev_0/ua1tarea1.c b/UA1/tareas/dev_0/ua1tarea1.c deleted file mode 100644 index 1b2cfd02..00000000 --- a/UA1/tareas/dev_0/ua1tarea1.c +++ /dev/null @@ -1 +0,0 @@ -Ya os gustaría \ No newline at end of file From 6f1d56623a7eb0472d309bd257ad619960e42f9a Mon Sep 17 00:00:00 2001 From: albertomarbells <albertomarbells@gmail.com> Date: Wed, 30 Oct 2024 18:56:23 +0100 Subject: [PATCH 31/41] . --- UA1/Examen/dev_16/ua1ex1.c | 57 -------------- UA1/Examen/dev_16/ua1ex1_teoria.txt | 40 ---------- UA1/Examen/dev_16/ua1ex1p2.java | 76 ------------------- UA1/Tareas/dev_16/ua1tarea1.c | 26 ------- .../dev_16/ua1tarea2/LanzarProcesos.java | 26 ------- UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java | 47 ------------ UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java | 28 ------- UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java | 14 ---- 8 files changed, 314 deletions(-) delete mode 100644 UA1/Examen/dev_16/ua1ex1.c delete mode 100644 UA1/Examen/dev_16/ua1ex1_teoria.txt delete mode 100644 UA1/Examen/dev_16/ua1ex1p2.java delete mode 100644 UA1/Tareas/dev_16/ua1tarea1.c delete mode 100644 UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java delete mode 100644 UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java delete mode 100644 UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java delete mode 100644 UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java diff --git a/UA1/Examen/dev_16/ua1ex1.c b/UA1/Examen/dev_16/ua1ex1.c deleted file mode 100644 index ada4b854..00000000 --- a/UA1/Examen/dev_16/ua1ex1.c +++ /dev/null @@ -1,57 +0,0 @@ -/*Examen hecho por Alberto Mármol Bello a día 15 de Ocutbre para la asignatura de Programación de servicios y procesos. -PARTE PRÁCTICA 1/2 -FR1: Haz un programa en C que genere una estructura de procesos con un PADRE y 3 HIJOS, del mismo padre se entiende - 2 puntos -FR2: Visualiza por cada hijo su identificador (si es el hijo 1, 2 ó 3), su PID y el del padre, utilizando para ello una función definida por ti a la que llamen los procesos hijos - 2 puntos -FR3: Justo antes de finalizar el programa PADRE, se debe imprimir por pantalla el PID del padre de todos una única vez. Debe hacerlo el programa PADRE - 2 puntos -FR4: Implementa el control de errores - 2 puntos -FR5: Documenta y estructura el código - 2 puntos*/ - -//Incluyo las librerias que me vayan a hacer falta. -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/wait.h> - -//Creo una función para que imprima la información del proceso hijo. -void imprimirHijo(int IdHijo) { - printf("Hola soy el hijo %d, mi PID es %d y el de mi padre es %d.\n", IdHijo, getpid(), getppid()); -} - -int main(){ - //Creo 3 procesos hijos. - for (int i = 1;i <= 3; i++) { - pid_t pid = fork(); //Se crea un nuevo proceso. - - //He creado un control de erroes por si algo sale mal, notificarlo al usuario. - if(pid < 0){ - perror("Error al crear el proceso hijo :("); - exit(EXIT_FAILURE); - } - - //Si es el proceso hijo. - if (pid == 0) { - imprimirHijo(i); //Imprimo la infórmacion del hijo. - exit(0); //Termina el hijo. - } - - //Tendremos que esperar a que todos los procesos hijos terminen ya que puede llevar algun tiempo. - for(int i = 0; i < 3; i++) { - wait(NULL); //Con "wait(NULL)" indico al programa que espere a un hijo. - } - - //Por último imprimo el PID del padre. - printf("El PID del padre es %d.\n", getpid()); - - //Termina el programa. - return 0; - - /*En Visual Studio Code no me compila, pero desde un compilador online si que lo hace. - Compilador: https://www.onlinegdb.com/online_c_compiler - El resultado se debe ver algo asi (el PID va cambiando): - Soy el hijo 1. Mi PID es 936 y el PID de mi padre es 932. - Soy el hijo 2. Mi PID es 937 y el PID de mi padre es 932. - Soy el hijo 3. Mi PID es 938 y el PID de mi padre es 932. - PID del padre: 932*/ - } -} \ No newline at end of file diff --git a/UA1/Examen/dev_16/ua1ex1_teoria.txt b/UA1/Examen/dev_16/ua1ex1_teoria.txt deleted file mode 100644 index 4effa3b8..00000000 --- a/UA1/Examen/dev_16/ua1ex1_teoria.txt +++ /dev/null @@ -1,40 +0,0 @@ -Exámen de Alberto Mármol Bello hecho el día 16 de Octubre de 2024, para la asignatura de Programación de servicios y procesos. - -PARTE TEÓRICA - -A-Definición de proceso. Ilustra tu solución con un ejemplo. 1 punto. -Un proceso es la instancia de un programa en ejecución, que incluye su código, datos y recursos necesarios. -Cada proceso tiene su propio espacio de memoria. -Ejemplo: -Una persona abre un word, al abrirlo se genera un proceso, este proceso incluye: -El propipo código ejecutable, el estado del proceso, si está abierto, cerrado, etc, y los recursos de memoria utilizados para ello. - -B-Utilizando tus propias palabras, indica la relación entre hilos y procesos. Ilustra tu solución con un ejemplo. 3 puntos. -Los hilos son sub-unidades dentro de un proceso oo que quiere decir que hay varios apartados aparate del principal. -Un proceso puede tener varios hilos que comparten el mismo espacio de memoria, lo que les permite comunicarse de manera -más eficiente que un solo proceso. -Ejemplo: -Un ejemplo sencillo puede ser el de estar escuchando musica mientras trabajo, ya que el hilo1 puede ser trabajar y el hilo2 escuchar música, -ya que hago las dos acciones al mismo tiempo y de forma intercalada, mejorando mi efectividad en el trabajo. - -C-Utilizando tus propias palabras, indica las características de la programación concurrente y sus ámbitos de aplicación. 3 puntos. -Las principales características de la Programación Concurrente: -Multitarea: que permite la ejecución simultánea de múltiples tareas. -Sincronización: se requieren mecanismos para evitar conflictos en el acceso a recursos compartidos. -Escabilidad: se mejora el rendimiento al agregar más recursos. -Interacción: las tareas pueden comunicarse y compartir recursos. -Aislamiento: las tareas son independientes, lo que reduce el impacto de fallos. - -Sus Ámbitos de Aplicación son: -Sistemas operativos: gestión de múltiples procesos y hilos. -Desarrollo web: manejo simultáneo de solicitudes de usuarios. -Aplicaciones de red: atención a múltiples conexiones de clientes. -Juegos: gestión de elementos como inteligencia artificial y físicas en tiempo real. -Procesamiento de datos: análisis y cálculos paralelos en big data y machine learning. - -D-Utilizando tus propias palabras, indica las diferencias entre programación paralela y programación distribuida, sus ventajas e inconvenientes. 3 puntos. -La diferencia entre la Programación Paralela y la Programación Distribuida, es que la Paralela tiene todo el trabajo para un solo equipo, -lo que mejora en eficiencia, pero empeora la sincronización con el equipo, y la Distribuida trata de lo mismo pero que esta vez se ocupan -varios equipos de un mismo trabajo, lo que permite que el trabajo sea escalable, pero también puede haber problemas de lantecia y comunicación -entre los equipos debido a la unión de varios equipos en remoto. -En resumen la Programación Paralela trabaja sola y la Programación Distribuida trabaja en equipo y cada uno tiene sus ventajas y desventajas. \ No newline at end of file diff --git a/UA1/Examen/dev_16/ua1ex1p2.java b/UA1/Examen/dev_16/ua1ex1p2.java deleted file mode 100644 index c9b6abfe..00000000 --- a/UA1/Examen/dev_16/ua1ex1p2.java +++ /dev/null @@ -1,76 +0,0 @@ -/*Examen hecho por Alberto Mármol Bello a día 15 de Ocutbre para la asignatura de Programación de servicios y procesos.*/ - -//Añadimos las librerias útlies para nuestros sensores. -import java.util.Random; - -//Esta clase representa un sensor y implementa la interfaz Runnable para permitir su ejecución en un hilo. -class Sensor implements Runnable { - private String tipo; //Tipo de sensor (ejemplo: temperatura, humedad). - private int ciclos; //Número de ciclos de medición. - private Random random; //Con esto generamos números aleatorios. - - //Hacemos un constructor de la clase Sensor que inicializa los atributos tipo, ciclos y el generador de números aleatorios. - public Sensor(String tipo, int ciclos) { - this.tipo = tipo; - this.ciclos = ciclos; - this.random = new Random(); //Se inicia el generador de números aleatorios. - } - - //Tengo un método que se ejecuta al iniciar el hilo, este realiza las mediciones del sensor. - @Override - public void run() { - for(int i = 0;i < ciclos; i++){ - //Genero un valor aleatorio. - int valor = generarValor(); //Genera una valor que mide aleatoriamente. - - //Obtengo el tiempo actual. - long tiempoActual = System.currentTimeMillis(); //Con esto obtengo la marca de tiempo actual. - - //Ahora voy a imprimir el valor y marcar del tiempo. - System.out.println(tipo + "Medición: " + valor + "(Timestamp: " + tiempoActual + ")"); - - //Dormir durante un tiempo aleatorio entre 1 y 3 segundos. - try{ - int tiempoEspera = random.nextInt(3000) + 1000; //Se genera un tiempo de espera de entre 1000 y 3000 ms. - Thread.sleep(tiempoEspera); //El hilo se detiene por el tiempo generado. - } catch (InterruptedException e) { - //Si el hilo es interrumpido, se restaura el estado de interrupción. - Thread.currentThread().interrupt(); - break; //Sale del bucle si se interrumpe el hilo. - } - } - } - - //Creo otro método que genera un valor aleatorio para la medición del sensor. - private int generarValor() { - //Generar un valor aleatorio entre 0 y 100. - return random.nextInt(101); //Retorna un valor entre 0 y 100. - } -} - -//Creo la clase principal que simula el monitoreo de varios sensores (la he llamado con el nomvre del examen para que no de problemas al compilar). -public class ua1ex1p2 { - public static void main(String[] args) { - int ciclos = 10; //Número de ciclos de medición para cada sensor. - - //Creo los hilos para cada tipo de sensor. - Thread sensorTemperatura = new Thread(new Sensor("Sensor de Temperatura", ciclos)); - Thread sensorHumedad = new Thread(new Sensor("Sensor de Humedad", ciclos)); - Thread sensorEstadoPlantas = new Thread(new Sensor("Sensor de Estado de Plantas", ciclos)); - - //Justo debajo digo que se inicien los hilos. - sensorTemperatura.start(); //Aquí se inicia el hilo del sensor de temperatura. - sensorHumedad.start(); //Aquí se inicia el hilo del sensor de humedad. - sensorEstadoPlantas.start(); //Y por últmo aquí se inicia el hilo del sensor de estado de plantas. - - //Seguramente tengamos que esperar a que terminen los hilos. - try { - sensorTemperatura.join(); //Espera a que termine el hilo del sensor de temperatura. - sensorHumedad.join(); //Espera a que termine el hilo del sensor de humedad. - sensorEstadoPlantas.join(); //Espera a que termine el hilo del sensor de estado de plantas. - } catch (InterruptedException e) { - e.printStackTrace(); //Pongo esto aquí por si hay algun problema con algun hilo. - } - System.out.println("Monitoreo de sensores finalizado."); //Imprimo el mensaje que indica que el monitoreo ha terminado :). - } -} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea1.c b/UA1/Tareas/dev_16/ua1tarea1.c deleted file mode 100644 index 12522cbc..00000000 --- a/UA1/Tareas/dev_16/ua1tarea1.c +++ /dev/null @@ -1,26 +0,0 @@ -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> - -int main() { - pid_t pid; - int num; - - printf("Introduzca un número: "); - scanf("%d", &num); - - pid = fork(); //Crea el proceso hijo. - - if (pid == -1) { //Error al crear el fork. - printf("No se pudo crear el proceso.\n"); - exit(-1); - } - - if (pid == 0) { - printf("Proceso Hijo, PID: %d. Sumando 4 a %d, el resultado es: %d.\n", getpid(), num, num + 4); - } else { - wait(NULL); // Espera a que termine el hijo - printf("Proceso Padre, PID: %d. Restando 5 a %d, el resultado es: %d.\n", getpid(), num, num - 5); - } - return 0; -} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java b/UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java deleted file mode 100644 index c7adbacd..00000000 --- a/UA1/Tareas/dev_16/ua1tarea2/LanzarProcesos.java +++ /dev/null @@ -1,26 +0,0 @@ -package UA1.Tareas.dev_16.ua1tarea2; -import java.io.IOException; - -//La clase "LanzarProcesos" ejecuta el programa llamado "MainProcesos". -public class LanzarProcesos { - public static void main(String[] args) { - try { - //Dentro del ProcessBuilder ejecutamos el codigo "MainProcesos", para que defina el comando a ejecutar y sus argumentos. - //"java" es el que lanza el programa y "MainProcesos" es el programa que queremos que se lance. - ProcessBuilder processBuilder = new ProcessBuilder("java", "MainProcesos"); - processBuilder.inheritIO(); - Process process = processBuilder.start(); - - //Ahora esperamos a que el subproceso termine de ejecutarse. - //El método waitFor() detiene el programa pricipal hasta que el subproceso termine (para no saturar el programa). - int exitCode = process.waitFor(); - - //Muestro el código de salida del subproceso para indicar si terminó correctamente o si hubo algún error. - System.out.println("El programa MainProcesos terminó con exito :) " + exitCode); - } catch (IOException | InterruptedException e) { - - //Si hay algun error al intentar ejecutar el subproceso, mostramos un mensaje de error. - System.err.println("Hay un error el en programa :( " + e.getMessage()); - } - } -} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java b/UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java deleted file mode 100644 index 34fa2bcf..00000000 --- a/UA1/Tareas/dev_16/ua1tarea2/MainProcesos.java +++ /dev/null @@ -1,47 +0,0 @@ -package UA1.Tareas.dev_16.ua1tarea2; -import java.util.Scanner; - -public class MainProcesos { - public static void main(String[] args) { //Creo un objeto Scanner para poder leer lo que el usuario escribe en el programa. - Scanner scanner = new Scanner(System.in); - - //Uso un objeto de tipo StringBuilder que sirve para guardar todo el texto que el usuario escriba. - StringBuilder inputText = new StringBuilder(); - - //Le decimos al usuario que puede escribir lo que el quiera pero cuando ponga un asterico (*) el programa se acaba. - System.out.println("Escribe lo que quieras, cuando desees terminar pon un asterisco (*):"); - - try { - //Meto un buce While que es un bucle infinito que lee todas lineas de texto hasta que el usuario escriba un asterisco. - while (true) { - //Leo la linea completa que el usuario ha escrito y se guarda en una variable llamada 'input'. - String input = scanner.nextLine(); - - //En este if si alguna línea de texto contiene un asterisco '*' se detien el programa. - if (input.contains("*")) { - //Aqui añadimos el texto que hay antes del asterisco, quitando todo lo que hay despues del asterisco. - //La instruccion input.indexOf("*") nos dice donde esta puesto el asterisco. - inputText.append(input, 0, input.indexOf("*")); - break; //Por ultimo salimos del bucle porque ya hemos encontrado el asterisco. - } - - //Si no encontramos el asterisco, agregamos toda la linea al resto del texto. - inputText.append(input).append("\n"); //Tambien añadimos un salto de linea para separar el texto. - } - - //Mostramos por pantalla todo el texto que el usuario ha escrito antes del asterisco. - System.out.println("Texto escrito:"); - System.out.println(inputText.toString()); - } - - catch (Exception e) { - //Si hay algun error durnate la lectura del texto, mostramos un mensaje explicando el problema. - System.err.println("Se produjo un error al leer su texto :( " + e.getMessage()); - } - - finally { - //Por ultimo cerramos el objeto Scanner para liberar los recursos utilizados, independientemente de si se hay un error o no. - scanner.close(); - } - } -} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java b/UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java deleted file mode 100644 index 03d23645..00000000 --- a/UA1/Tareas/dev_16/ua1tarea3/LeerProcesos.java +++ /dev/null @@ -1,28 +0,0 @@ -import java.util.Scanner; // Importar la clase Scanner - -public class LeerProcesos implements Runnable { - public LeerProcesos() { // Constructor sin parámetros - // Inicializaciones si son necesarias - } - - public void run() { - Scanner scanner = new Scanner(System.in); // Crear un objeto Scanner - System.out.println("Pido al usuario un número:"); - - try { - int numero = scanner.nextInt(); // Leer un número entero del usuario - if (numero < 0) { // Comprobar si es menor que cero - System.out.println("El argumento es un número menor que cero: " + numero); - System.exit(3); - } - System.out.println("El número ingresado es válido: " + numero); - } catch (Exception e) { // Manejar la excepción por entrada no válida - System.out.println("El argumento es una cadena o un número inválido."); - System.exit(2); - } finally { - scanner.close(); // Cerrar el scanner - } - - System.exit(0); // Salir con código 0 si todo es correcto - } -} \ No newline at end of file diff --git a/UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java b/UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java deleted file mode 100644 index c5574f14..00000000 --- a/UA1/Tareas/dev_16/ua1tarea3/MainProcesos.java +++ /dev/null @@ -1,14 +0,0 @@ -public class MainProcesos { - public static void main(String[] args) { - LeerProcesos lector = new LeerProcesos(); // Sin argumentos - Thread hilo = new Thread(lector); // Crear un hilo con el lector - - hilo.start(); // Iniciar el hilo - - try { - hilo.join(); // Esperar a que el hilo termine - } catch (InterruptedException e) { - System.out.println("El hilo se ha interrumpido."); - } - } -} \ No newline at end of file From 0b7b884a97a6e6a926c3b9c42d005189de0efda2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Mon, 4 Nov 2024 14:22:38 +0100 Subject: [PATCH 32/41] Update README.md --- UA2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UA2/README.md b/UA2/README.md index 210999a7..5df99d37 100644 --- a/UA2/README.md +++ b/UA2/README.md @@ -73,7 +73,7 @@ Por favor, leed el documento [INSTRUCCIONES_ENTREGAS.md](..\INSTRUCCIONES_ENTREG ### **T1 - Tarea 1 - Programación y sincronización de hilos en Java 1** ##### **Criterios a), b), c), d), e), f), g) y h)** ``` -Fecha de Entrega: 09/11/2022 - 14:00:00 +Fecha de Entrega: 06/11/2024 - 20:00:00 ``` * FR1: Crea un programa en Java que lance 5 hilos. Cada hilo incrementará una variable contador de tipo entero en 1000 unidades. Esta variable estará compartida por todos los hilos. Comprueba el resultado final de la variable y reflexiona sobre el resultado. ¿Se obtiene el resultado esperado? - 3 puntos * FR2: Modifica el programa anterior para sincronizar el acceso a dicha varaible. Lanza primero los hilos mediante la clase Thread y después mediante el interfaz Runnable. Comprueba los resultados e indica las variaciones - 3 puntos From 57b8ec9e006cb544b07679f3013190945d54156a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Mon, 11 Nov 2024 11:28:18 +0100 Subject: [PATCH 33/41] Update README.md --- UA2/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/UA2/README.md b/UA2/README.md index 5df99d37..c3d3a38a 100644 --- a/UA2/README.md +++ b/UA2/README.md @@ -89,7 +89,7 @@ Fecha de Entrega: 06/11/2024 - 20:00:00 ### **T2 - Tarea 2 - Programación y sincronización de hilos en Java 2** ##### **Criterios a), b), c), d), e), f), g) y h)** ``` -Fecha de Entrega: 16/11/2022 - 14:00:00 +Fecha de Entrega: 13/11/2024 - 21:00:00 ``` * FR1: Crea una clase CuentaCorriente, con un atributo que indique el saldo de la cuenta, el constructor que le da un valor inicial al saldo y después los métodos setter y getter. En estos métodos deberás añadir un sleep() aleatorio, que duerma al hilo durante un número de milisegundos que oscile entre 250 y 2000 (0,25s y 2s respectivamente). Añade también otro método que reciba una cantidad y la añada al saldo, indicando por pantalla el estado previo del saldo, el estado final y quién realiza el ingreso. Deberás definir los parámetros que reciba este método y deberás definirlo como synchronized - 2 puntos. * FR2: Crea una clase que extienda de Thread, y desde el método run() usará el método de la clase CuentaCorriente que permite añadir saldo a la cuenta - 2 puntos. @@ -104,7 +104,7 @@ Fecha de Entrega: 16/11/2022 - 14:00:00 ### **T3 - Tarea 3 - Programación y sincronización de hilos en Java 3** ##### **Criterios a), b), c), d), e), f), g) y h)** ``` -Fecha de Entrega: 23/11/2022 - 14:00:00 +Fecha de Entrega: xx/11/2024 - xx:00:00 ``` * FR1: Crea un programa que reciba a través de sus argumentos una lista de ficheros de texto (procura que sean de un cierto tamaño, por ejemplo [El Quijote.txt](https://gist.githubusercontent.com/jsdario/6d6c69398cb0c73111e49f1218960f79/raw/8d4fc4548d437e2a7203a5aeeace5477f598827d/el_quijote.txt)) y cuente el número de caracteres que hay en cada fichero (ejecución secuencial). Ayuda en este [enlace](https://javiergarciaescobedo.es/programacion-en-java/15-ficheros/42-leer-un-fichero-caracter-a-caracter) - 2 puntos. * FR2: Modifica el programa para que cree un hilo para cada fichero (ejecución concurrente) - 2 puntos. @@ -127,20 +127,20 @@ long t_total = t_fin - t_comienzo; ### **EX2 - Examen UA2 - Programación Multihilo** ##### **Criterios a), b), c), d), e), f), g) y h)** ``` -Fecha de Examen: 23/11/2022 - 17:45:00 +Fecha de Examen: xx/12/2024 - xx:xx:00 ``` ## Recursos -- [Canal SLACK](https://psp-2223.slack.com/) -- [Repositorio Asignatura](https://github.com/daniteleco/psp-22-23) +- [Canal SLACK](https://psp-2024-2025.slack.com/) +- [Repositorio Asignatura](https://github.com/i12vecaj/psp-24-25/) - Apuntes del Profesorado //TODO - Bibliografía Recomendada - **Programación de servicios y procesos - Técnico Superior en DAM.** *Mª Jesús Ramos Martín. Editorial Garceta. 2ª Edición. 2018. ISBN: 978-84-1728-931-7.* ## Autor -Creado por [Daniel Pérez Rodríguez](https://twitter.com/daniteleco) e inspirado en el trabajo de [José Luis González Sánchez](https://github.com/joseluisgs/ProgServiciosProcesos-00-2021-2022) +Creado por José David Vela e inspirado en el trabajo de [Daniel Pérez Rodríguez](https://twitter.com/daniteleco) y [José Luis González Sánchez](https://github.com/joseluisgs/ProgServiciosProcesos-00-2021-2022) ## Contacto -- Email: [dperez@ceslopedevega.com](mailto:dperez@ceslopedevega.com) +- Email: [jdvela@ceslopedevega.com](mailto:jdvela@ceslopedevega.com) From cda3ab24aafa2457aeba67552b01d27dc2a3cb6c Mon Sep 17 00:00:00 2001 From: Pakitoh0 <162631375+Pakitoh0@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:00:22 +0100 Subject: [PATCH 34/41] Add files via upload --- UA2/tareas/dev_0/tarea_2/cuentacorriente.java | 64 +++++++++++++++++++ UA2/tareas/dev_0/tarea_2/fr2.java | 2 + UA2/tareas/dev_0/tarea_2/fr3.java | 2 + 3 files changed, 68 insertions(+) create mode 100644 UA2/tareas/dev_0/tarea_2/cuentacorriente.java create mode 100644 UA2/tareas/dev_0/tarea_2/fr2.java create mode 100644 UA2/tareas/dev_0/tarea_2/fr3.java diff --git a/UA2/tareas/dev_0/tarea_2/cuentacorriente.java b/UA2/tareas/dev_0/tarea_2/cuentacorriente.java new file mode 100644 index 00000000..3a7097a0 --- /dev/null +++ b/UA2/tareas/dev_0/tarea_2/cuentacorriente.java @@ -0,0 +1,64 @@ +import java.util.Random; +import java.util.Scanner; + +public class cuentacorriente{ + + private double saldo; + + + public cuentacorriente(double saldo) { + this.saldo = 0; + } + + + + public double getSaldo() { + dormir(); + return saldo; + } + + + public void setSaldo(double saldo) { + dormir(); + this.saldo = saldo; + } + + + private void dormir() { + Random random = new Random(); + int tiempoDeEspera = 250 + random.nextInt(2000); + try { + Thread.sleep(tiempoDeEspera); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + + public synchronized void realizarIngreso(double cantidad, String nombrePersona) { + + System.out.println(nombrePersona + " está realizando un ingreso."); + System.out.println("Saldo previo: " + saldo); + + + saldo += cantidad; + + + System.out.println("Saldo final después del ingreso de " + cantidad + ": " + saldo); + } + + public static void main(String[] args) { + + cuentacorriente cuenta = new cuentacorriente(0); + Scanner escaner = new Scanner(System.in); + + System.out.println("Ingrese su nombre :"); + String nombre = escaner.nextLine(); + System.out.println("Ingrese el dinero a ingresar:"); + double cantidad = escaner.nextDouble(); + + Thread h1 = new Thread(() -> cuenta.realizarIngreso(cantidad,nombre )); + + h1.start(); + } +} diff --git a/UA2/tareas/dev_0/tarea_2/fr2.java b/UA2/tareas/dev_0/tarea_2/fr2.java new file mode 100644 index 00000000..b75e53bb --- /dev/null +++ b/UA2/tareas/dev_0/tarea_2/fr2.java @@ -0,0 +1,2 @@ +public class fr2 { +} diff --git a/UA2/tareas/dev_0/tarea_2/fr3.java b/UA2/tareas/dev_0/tarea_2/fr3.java new file mode 100644 index 00000000..496f2e55 --- /dev/null +++ b/UA2/tareas/dev_0/tarea_2/fr3.java @@ -0,0 +1,2 @@ +public class fr3 { +} From f4696460960b0c0f02e920d34d0e6eb7dc7ef977 Mon Sep 17 00:00:00 2001 From: Pakitoh0 <162631375+Pakitoh0@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:28:16 +0100 Subject: [PATCH 35/41] Delete UA2/tareas/dev_0/tarea_2/cuentacorriente.java equivocacion --- UA2/tareas/dev_0/tarea_2/cuentacorriente.java | 64 ------------------- 1 file changed, 64 deletions(-) delete mode 100644 UA2/tareas/dev_0/tarea_2/cuentacorriente.java diff --git a/UA2/tareas/dev_0/tarea_2/cuentacorriente.java b/UA2/tareas/dev_0/tarea_2/cuentacorriente.java deleted file mode 100644 index 3a7097a0..00000000 --- a/UA2/tareas/dev_0/tarea_2/cuentacorriente.java +++ /dev/null @@ -1,64 +0,0 @@ -import java.util.Random; -import java.util.Scanner; - -public class cuentacorriente{ - - private double saldo; - - - public cuentacorriente(double saldo) { - this.saldo = 0; - } - - - - public double getSaldo() { - dormir(); - return saldo; - } - - - public void setSaldo(double saldo) { - dormir(); - this.saldo = saldo; - } - - - private void dormir() { - Random random = new Random(); - int tiempoDeEspera = 250 + random.nextInt(2000); - try { - Thread.sleep(tiempoDeEspera); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - - public synchronized void realizarIngreso(double cantidad, String nombrePersona) { - - System.out.println(nombrePersona + " está realizando un ingreso."); - System.out.println("Saldo previo: " + saldo); - - - saldo += cantidad; - - - System.out.println("Saldo final después del ingreso de " + cantidad + ": " + saldo); - } - - public static void main(String[] args) { - - cuentacorriente cuenta = new cuentacorriente(0); - Scanner escaner = new Scanner(System.in); - - System.out.println("Ingrese su nombre :"); - String nombre = escaner.nextLine(); - System.out.println("Ingrese el dinero a ingresar:"); - double cantidad = escaner.nextDouble(); - - Thread h1 = new Thread(() -> cuenta.realizarIngreso(cantidad,nombre )); - - h1.start(); - } -} From 8ebfd1e3d92cdd00f732e77361f83e44172ee51b Mon Sep 17 00:00:00 2001 From: Pakitoh0 <162631375+Pakitoh0@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:28:32 +0100 Subject: [PATCH 36/41] Delete UA2/tareas/dev_0/tarea_2/fr2.java --- UA2/tareas/dev_0/tarea_2/fr2.java | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 UA2/tareas/dev_0/tarea_2/fr2.java diff --git a/UA2/tareas/dev_0/tarea_2/fr2.java b/UA2/tareas/dev_0/tarea_2/fr2.java deleted file mode 100644 index b75e53bb..00000000 --- a/UA2/tareas/dev_0/tarea_2/fr2.java +++ /dev/null @@ -1,2 +0,0 @@ -public class fr2 { -} From 3409266033c1014a39f8befb12b487207200cdc9 Mon Sep 17 00:00:00 2001 From: Pakitoh0 <162631375+Pakitoh0@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:28:44 +0100 Subject: [PATCH 37/41] Delete UA2/tareas/dev_0/tarea_2/fr3.java --- UA2/tareas/dev_0/tarea_2/fr3.java | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 UA2/tareas/dev_0/tarea_2/fr3.java diff --git a/UA2/tareas/dev_0/tarea_2/fr3.java b/UA2/tareas/dev_0/tarea_2/fr3.java deleted file mode 100644 index 496f2e55..00000000 --- a/UA2/tareas/dev_0/tarea_2/fr3.java +++ /dev/null @@ -1,2 +0,0 @@ -public class fr3 { -} From 8f524ccb90238e913e357b42b2a788e104488a6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Wed, 20 Nov 2024 19:04:23 +0100 Subject: [PATCH 38/41] Update README.md --- UA2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UA2/README.md b/UA2/README.md index c3d3a38a..5c62c8b0 100644 --- a/UA2/README.md +++ b/UA2/README.md @@ -104,7 +104,7 @@ Fecha de Entrega: 13/11/2024 - 21:00:00 ### **T3 - Tarea 3 - Programación y sincronización de hilos en Java 3** ##### **Criterios a), b), c), d), e), f), g) y h)** ``` -Fecha de Entrega: xx/11/2024 - xx:00:00 +Fecha de Entrega: 26/11/2024 - 23:59:00 ``` * FR1: Crea un programa que reciba a través de sus argumentos una lista de ficheros de texto (procura que sean de un cierto tamaño, por ejemplo [El Quijote.txt](https://gist.githubusercontent.com/jsdario/6d6c69398cb0c73111e49f1218960f79/raw/8d4fc4548d437e2a7203a5aeeace5477f598827d/el_quijote.txt)) y cuente el número de caracteres que hay en cada fichero (ejecución secuencial). Ayuda en este [enlace](https://javiergarciaescobedo.es/programacion-en-java/15-ficheros/42-leer-un-fichero-caracter-a-caracter) - 2 puntos. * FR2: Modifica el programa para que cree un hilo para cada fichero (ejecución concurrente) - 2 puntos. From bba1023af7acf0720d033079325462c54206a018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Mon, 6 Jan 2025 16:39:11 +0100 Subject: [PATCH 39/41] Update README.md --- UA3/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/UA3/README.md b/UA3/README.md index f99c40da..c88d8514 100644 --- a/UA3/README.md +++ b/UA3/README.md @@ -2,7 +2,7 @@ # UA3 - Programacion de Comunicaciones en Red -- Temporalización: **1T** +- Temporalización: **1T y 2T** - Duración: **12 horas** - Ponderación respecto a la asignatura: **20%** @@ -69,7 +69,7 @@ Por favor, leed el documento [INSTRUCCIONES_ENTREGAS.md](..\INSTRUCCIONES_ENTREG Crea un programa en Java que admita desde la línea de comandos una URL y visualice información sobre esta. Modifica el programa para que admita continuamente nuevas IP o URL y muestre la información hasta que el usuario inserte "localhost". ``` -Fecha de Entrega: 07/12/2022 +Fecha de Entrega: 08/01/2025 ``` ### **Tarea 2 - Programación de Sockets 2** @@ -80,7 +80,7 @@ Realiza un programa servidor TCP que acepte dos clientes. Muestra por cada clie Crea también el programa cliente que se conecte a dicho servidor. Muestra los puertos locales y remotos a los que está conectado su socket y la dirección IP de la máquina remota a la que se conecta. ``` -Fecha de Entrega: 14/12/2022 +Fecha de Entrega: 15/01/2025 ``` ### **Tarea 3 - Programación de Sockets 3** ##### **Criterios a), f), g), h)** @@ -88,7 +88,7 @@ Fecha de Entrega: 14/12/2022 Crea un cliente que pida un mensaje al usuario por pantalla y lo mande al servidor. El servidor deberá recibir el mensaje, convertirlo todo a mayúsculas y devolvérselo al cliente, que lo imprimirá por pantalla. ``` -Fecha de Entrega: 21/12/2022 +Fecha de Entrega: 22/01/2025 ``` ### **Tarea 4 - Programación de Sockets 4** @@ -99,7 +99,7 @@ Crea un programa cliente usando sockets UDP que envíe el texto escrito desde la Deberás establecer un tiempo de espera de varios segundos para que el método receive() del cliente se bloquee. Controlas las excepciones de IO e indica si los paquetes se han perdido. Haz varias pruebas de la aplicación sin ejecutar el servidor y ejecutando varios clientes a la vez. ``` -Fecha de Entrega: 11/01/2023 +Fecha de Entrega: 29/01/2025 ``` ### **Tarea 5 - Programación de Sockets 5** @@ -112,7 +112,7 @@ Después, envía este objeto a un proceso servidor para que calcule el cuadrado Deberás controlar todos los errores posibles (que el servidor no esté iniciado, que se produzcan excepciones o cortes abruptos del cliente o servidor, que el número introducido por pantalla por el clientea sea menor que 0, etcétera). ``` -Fecha de Entrega: 11/01/2023 +Fecha de Entrega: 29/01/2025 ``` ### **Actividad Evaluable UA3 - Programacion de Comunicaciones en Red** @@ -122,19 +122,19 @@ Enunciado disponible en [actividad/README.md](actividad/README.md) *¡¡ Preparad Presentación para el día 21 !!* ``` -Fecha de Examen: 14/12/2022 - Fecha Defensa: 21/12/2021 +Fecha de Examen: 05/02/2025 - Fecha Defensa: 29/01/2025 ``` ### **Examen UA3 - Programacion de Comunicaciones en Red** ##### **Criterios a), b), c), d), e) f), g) y h)** ``` -Fecha de Examen: 11/01/2023 +Fecha de Examen: 05/02/2025 ``` ## Recursos -- [Repositorio Asignatura](https://github.com/daniteleco/psp-22-23) +- [Repositorio Asignatura](https://github.com/daniteleco/psp-22-23](https://github.com/i12vecaj/psp-24-25/) - Apuntes del Profesorado //TODO - Bibliografía Recomendada - **Programación de servicios y procesos - Técnico Superior en DAM.** *Mª Jesús Ramos Martín. Editorial Garceta. 2ª Edición. 2018. ISBN: 978-84-1728-931-7.* @@ -142,7 +142,7 @@ Fecha de Examen: 11/01/2023 ## Autor -Creado por [Daniel Pérez Rodríguez](https://twitter.com/daniteleco) e inspirado en el trabajo de [José Luis González Sánchez](https://github.com/joseluisgs/ProgServiciosProcesos-00-2021-2022) +Creado por José David Vela Castro, basado en [Daniel Pérez Rodríguez](https://twitter.com/daniteleco) e inspirado en el trabajo de [José Luis González Sánchez](https://github.com/joseluisgs/ProgServiciosProcesos-00-2021-2022) ## Contacto -- Email: [dperez@ceslopedevega.com](mailto:dperez@ceslopedevega.com) +- Email: [jdvela@ceslopedevega.com](mailto:jdvela@ceslopedevega.com) From 366982d164a7bb76d3c68e9de88d697eff2401e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Mon, 6 Jan 2025 16:45:48 +0100 Subject: [PATCH 40/41] Update README.md --- UA3/actividad/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UA3/actividad/README.md b/UA3/actividad/README.md index 352f3db5..99a6508f 100644 --- a/UA3/actividad/README.md +++ b/UA3/actividad/README.md @@ -1,7 +1,7 @@ ![lope_logo](https://www.ceslopedevega.com/wp-content/uploads/2020/03/pruebalogo.svg_.png) # UA3 - Actividad Evaluable -## 14/12/2022 +## 29/01/2025 Vamos a simular el comportamiento de una red [TOKEN RING](https://es.wikipedia.org/wiki/Token_Ring) con, inicialmente, 3 miembros en dicha red. @@ -93,4 +93,4 @@ psp-22-23\UA3\actividad\team_X * No hagáis paquetes de trabajo si no los domináis. Simplemente ejecutad vuestra clase principal como en los ejemplos. Para ello tenéis el fichero ya iniciado *MiembroToken.java*. -* Es (más que) probable, que haya que utilizar variables auxiliares, métodos ya vistos o usados en los ejemplos, stackoverflow, ... para resolver los pequeños problemas en los que se debe descomponer el problema general. \ No newline at end of file +* Es (más que) probable, que haya que utilizar variables auxiliares, métodos ya vistos o usados en los ejemplos, stackoverflow, ... para resolver los pequeños problemas en los que se debe descomponer el problema general. From 3f30845fd4818ed2d8addba4dcca09f26b64ad22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20David=20Vela=20Castro?= <josedavidvela@gmail.com> Date: Mon, 6 Jan 2025 16:46:31 +0100 Subject: [PATCH 41/41] Update README.md --- UA3/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UA3/README.md b/UA3/README.md index c88d8514..8bd011df 100644 --- a/UA3/README.md +++ b/UA3/README.md @@ -119,7 +119,7 @@ Fecha de Entrega: 29/01/2025 ##### **Criterios a), b), c), d), e) f), g) y h)** Enunciado disponible en [actividad/README.md](actividad/README.md) -*¡¡ Preparad Presentación para el día 21 !!* +*¡¡ Preparad Presentación para el día 29 !!* ``` Fecha de Examen: 05/02/2025 - Fecha Defensa: 29/01/2025