Conceptos de Programación y Sistemas Distribuidos


Conceptos Previos

  • Programa: Conjunto de órdenes diseñadas y almacenadas en ficheros que siguen la sintaxis de un lenguaje de programación específico, ejecutando tareas en un ordenador.

  • Proceso: Programa en ejecución que incluye el código, los datos y todo lo necesario para su ejecución, como el contador del programa, una imagen de memoria y el estado del procesador.

Ejecución y Sistemas

  • Ejecutable: Fichero necesario para crear un proceso y ponerlo en ejecución.

  • Demonio: Proceso no interactivo que se ejecuta en segundo plano, ofreciendo servicios básicos para otros procesos.

  • Sistema Operativo: Programa intermediario entre el usuario y el hardware del ordenador, facilitando la ejecución de programas, la gestión de procesos y la eficiencia en el uso de recursos.

Programación Multiproceso

  • Concurrencia: Ejecución simultánea de múltiples tareas.

  • Multiprogramación: Un solo procesador ejecuta un proceso a la vez, intercambiándolos sin mejorar el tiempo global de ejecución.

  • Multitarea: Un procesador con varios núcleos ejecuta varias instrucciones simultáneamente del mismo programa, mejorando el rendimiento.

  • Programación Distribuida: Ordenadores conectados en red, cada uno con su procesador y memoria, mejorando el rendimiento sin compartir memoria.


Procesos y Planificación

  • Estados de un Proceso: Creación, listo, ejecución, espera y finalización.

  • Creación y Terminación: Procesos se crean durante el arranque del sistema, por llamadas al sistema o por petición del usuario, y terminan por salida normal o errores.

  • Planificación de Procesos: El sistema operativo gestiona procesos en colas y selecciona su ejecución según algoritmos de planificación a corto y largo plazo.

Comunicación y Sincronización

  • Cambio de Contexto: Guardado y restauración del estado de un proceso al cambiar de uno a otro, lo cual implica un tiempo perdido por el procesador.

  • Árbol de Procesos: Jerarquía de procesos formada por procesos padre e hijo, identificados por un PID único.

  • Comunicación entre Procesos: Utilizando flujos de entrada y salida (stdin, stdout, stderr) y otras técnicas como memoria compartida o archivos.

Multiproceso en Java

  • Clase Process: Representa un proceso en Java, permitiendo su creación, gestión y comunicación.

  • ProcessBuilder y Runtime.exec(): Métodos para crear procesos nativos en el sistema operativo y controlarlos desde Java.

  • Comunicación de Procesos: A través de flujos de datos (OutputStream, InputStream, ErrorStream), permitiendo la interacción entre procesos padre e hijo.


Conceptos Básicos

  • Hilo (Thread): Es la unidad básica de ejecución de CPU dentro de un proceso, permitiendo que un programa realice múltiples tareas simultáneamente. Los hilos de un mismo proceso comparten recursos y espacio de memoria.

Ventajas de los Hilos

  • Respuesta y Eficiencia: Los hilos mejoran la capacidad de respuesta de los programas y permiten una gestión eficiente de recursos, al compartir memoria y otros recursos del proceso al que pertenecen.

  • Paralelismo Real: Aprovechan arquitecturas multicore para ejecutar múltiples hilos en paralelo, mejorando significativamente el rendimiento del programa.

Estados de un Hilo

  • Los hilos, al igual que los procesos, pasan por varios estados durante su ciclo de vida, incluyendo Nuevo (New), Ejecutable (Runnable), Bloqueado, y Muerto (Dead).

Hilos en Java

  • Clase Thread y Interfaz Runnable: Java incorpora la programación de hilos a través de la clase Thread y la interfaz Runnable, ofreciendo métodos para crear, ejecutar y gestionar hilos.


Gestión de Hilos

  • Creación y Ejecución: Los hilos pueden crearse implementando la interfaz Runnable o extendiendo la clase Thread, iniciando su ejecución con el método start().

  • Espera y Suspensión: Las operaciones join() y sleep() permiten gestionar la ejecución de hilos, ya sea esperando a que un hilo termine o suspendiendo su ejecución temporalmente.

  • Interrupción: La interrupción de hilos se maneja con el método interrupt(), permitiendo alterar el flujo normal de ejecución de un hilo.

Planificación y Sincronización de Hilos

  • Planificación: El SO y la JVM deciden cuándo y cómo se ejecutan los hilos, a menudo utilizando algoritmos basados en prioridades.

  • Sincronización: Es crucial para evitar problemas como condiciones de carrera e inconsistencias de memoria. Java ofrece mecanismos como semáforos, monitores y bloques sincronizados (synchronized) para gestionar el acceso a recursos compartidos.

Problemas Comunes en la Programación de Hilos

  • Se discuten varios problemas potenciales en la programación concurrente, incluyendo condiciones de carrera, interbloqueo (deadlock), y otros, junto con estrategias para manejarlos efectivamente.

Este resumen capta los aspectos esenciales de la programación de hilos, proporcionando una base sólida para comprender cómo diseñar y desarrollar aplicaciones concurrentes en Java de manera eficiente y segura.


Conceptos Básicos de Sistemas Distribuidos

  • Se introducen los sistemas distribuidos, donde múltiples ordenadores colaboran y se comunican a través de una red. La computación distribuida es esencial para el funcionamiento de internet y los servicios basados en la nube, permitiendo que los recursos y servicios sean accesibles de manera transparente.

Fundamentos de la Comunicación en Red

  • Se explican los elementos básicos de la comunicación, incluyendo el emisor, receptor, canal, mensaje, paquete, y protocolo. Estos conceptos son fundamentales para entender cómo se intercambia información entre aplicaciones a través de una red.

Redes de Ordenadores

  • Se describen los tipos de redes (LAN, MAN, WAN), que varían en extensión y propósito, desde redes de área local hasta redes de área extensa utilizadas para conectar dispositivos a gran escala geográfica.

Protocolos de Comunicaciones

  • Se discute la organización de redes en capas o niveles para simplificar su diseño y funcionamiento, destacando la jerarquía de protocolos que permite la interoperabilidad entre dispositivos y aplicaciones.

Programación con Sockets

  • Se introducen los sockets como mecanismo fundamental para la programación de comunicaciones en red, explicando cómo facilitan la transferencia de información entre aplicaciones, ya sea dentro de una LAN o a través de internet.


TCP y UDP

  • Se comparan los protocolos TCP (Protocolo de Control de Transmisión) y UDP (Protocolo de Datagrama de Usuario), subrayando sus diferencias en términos de confiabilidad, orden de entrega, y orientación a la conexión.

Direcciones IP y Puertos

  • Se explica el uso de direcciones IP y puertos para identificar dispositivos y aplicaciones en una red, permitiendo el enrutamiento preciso de mensajes y datos.

Tipos de Sockets

  • Se distinguen entre sockets de flujo (stream) y sockets de datagrama, resaltando sus aplicaciones y características según el protocolo de transporte utilizado (TCP o UDP).

Modelos de Comunicación

  • Se presentan diferentes modelos de comunicación en red, como el modelo cliente/servidor y el modelo de comunicación en grupo, junto con sus aplicaciones y ventajas.

Modelos Híbridos y Redes P2P

  • Se discuten los modelos híbridos de comunicación, incluyendo las redes peer-to-peer (P2P), que combinan aspectos de los modelos cliente/servidor y comunicación en grupo para crear sistemas más robustos y tolerantes a fallos.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *