Etapas de Desarrollo de la Programación Concurrente
Describe brevemente las diferentes etapas de desarrollo de la Programación Concurrente:
- Reto de Hardware: Consiste en compartir, de forma eficiente, un procesador con los periféricos lentos.
- Crisis de Software: Surgió de la necesidad de presentar al usuario una interfaz secuencial.
- Innovación Conceptual: Surge para dividir programas concurrentes en pequeños módulos asíncronos, independientes del tiempo.
- Desarrollo de Lenguajes: Se caracteriza por el desarrollo de una tecnología y notación precisa de los conceptos recurrentes.
- Entendimiento Formal: Surge como la idea de verificación de programas.
- Refinamiento de Hardware: Surge como la idea de soportar conceptos de proceso y monitor en hardware.
- Redes de Computadoras: Surge como idea de Redes de Computadoras, en las cuales la comunicación no se realiza por medio de memoria compartida, sino por Entrada/Salida (E/S).
Concepto y Estados de un Proceso
Concepto de Proceso
Explica el concepto de proceso y proporciona un ejemplo:
El lugar de control de un procedimiento que está siendo ejecutado. Es, esencialmente, un programa que se está ejecutando.
Estados de un Proceso
Describe los diferentes estados que puede tener un proceso:
- En ejecución (Running): El procesador está ejecutando las instrucciones del proceso.
- Listo (Ready): El proceso está listo para ser ejecutado, pero el procesador todavía no está disponible para dicha ejecución.
- Bloqueado (Blocked): El proceso no puede ejecutarse debido a la ocurrencia de algún evento externo (ej. espera de E/S).
Bloque de Control de Proceso (PCB) y Operaciones
El Bloque de Control de Proceso (PCB)
¿Qué es el PCB y cuál es la información que contiene?
Es la manifestación de un proceso en un Sistema Operativo (S.O.). Incluye:
- Estado actual del proceso.
- Identificación única del proceso.
- Prioridad del proceso.
- Apuntadores para localizar la memoria del proceso.
- Apuntadores para asignar recursos.
- Área para preservar registros.
Cuando el S.O. cambia la atención de la CPU entre procesos, utiliza las áreas de preservación del PCB para mantener la información necesaria para reiniciar el proceso.
Operaciones sobre Procesos
Menciona las operaciones posibles que se pueden hacer sobre los procesos:
- Crear
- Destruir
- Suspender
- Reanudar
- Cambiar prioridad
- Bloquear
- Despertar (desbloquear)
- Despachar un proceso.
Descripción de las Operaciones
Describe cada una de las operaciones del punto anterior:
- Crear:
- Dar nombre al proceso.
- Insertar el proceso en la lista de procesos conocidos del sistema.
- Determinar la prioridad inicial del proceso.
- Crear el Bloque de Control de Proceso (PCB).
- Asignar recursos iniciales del proceso.
- Destruir:
- Borrarlo del sistema.
- Devolver sus recursos al sistema.
- Purgarlo de listas y tablas del sistema.
- Borrar su Bloque de Control de Procesos.
- Suspender: El proceso no puede proseguir hasta que otro proceso lo reanude.
- Reanudar: Implica reiniciar el proceso al punto donde fue suspendido.
- Cambio de prioridad: Consiste en modificar el atributo de prioridad dentro del PCB.
- Bloqueo: Quita el procesador al proceso. El proceso se inserta en la cola de bloqueados.
- Despertar: Al ocurrir un evento esperado, el proceso se inserta en la cola de Listos.
- Despacho: Se asigna un procesador al proceso.
El Kernel del Sistema Operativo
¿Qué es el Kernel y cuáles son sus funciones?
Es el núcleo del Sistema Operativo. Controla todas las operaciones que implican procesos y representa solo una pequeña porción del código de todo el S.O.
Funciones del Kernel
- Manipulación de interrupciones.
- Creación y destrucción de procesos.
- Cambio de estados de procesos.
- Despacho.
- Suspensión y reanudación de procesos.
- Sincronización de procesos.
- Comunicación entre procesos.
- Manipulación de bloques de control de proceso.
- Soporte de las actividades de Entrada/Salida.
- Soporte de la asignación y desasignación de almacenamiento.
- Soporte del sistema de archivos.
- Soporte de un mecanismo de llamada y regreso al procedimiento.
- Soporte de ciertas funciones contables (estadísticas) del sistema.
Interacción y Modelos de Concurrencia
Interacción entre Procesos
¿Cómo interactúan los procesos? Explica las diferentes categorías:
- Comunicación: Los procesos se comunican por medio del paso de mensajes (programación distribuida) o por medio de memoria compartida, que es accesible por diferentes procesos.
- Sincronización: Un proceso (Pr1) espera a que otro proceso (Pr2) realice una tarea antes de reanudar su ejecución.
Razones de la Programación Concurrente
Menciona tres razones de la Programación Concurrente:
- Uso de arquitecturas paralelas.
- Reducción de tiempos de ejecución de procesos.
- Desarrollo de sistemas en tiempo real.
- Desarrollo de nuevos lenguajes de Programación Concurrente y Distribuida.
Modelos de Programación Concurrente
Describe los diferentes modelos de Programación Concurrente:
- Memoria Compartida: Permite crear zonas de memoria accesibles por varios procesos.
- Paso de Mensajes Asíncronos (sin bloqueo): El proceso emisor no espera a que el mensaje sea recibido y sigue ejecutándose para enviar más mensajes.
- Paso de Mensajes Síncronos (con bloqueo): El proceso emisor envía el mensaje y espera a que un proceso lo reciba para seguir ejecutándose.
Formas de Implantación de la Programación Concurrente
Arquitecturas de Implantación
Menciona las diferentes formas de implantar la Programación Concurrente:
Pueden ser implantados en arquitecturas uniprocesador, multiprocesador o en procesadores conectados a una red (distribuidos).
Tipos de Implantación
- Multiprogramación: Ejecución de programas concurrentes por tiempo compartido en un solo procesador.
- Multiprocesamiento: Ejecución de procesos concurrentes corriendo en procesadores separados y que pueden acceder a una memoria compartida.
- Procesamiento Distribuido: Ejecución de procesos concurrentes corriendo en procesadores separados, que se comunican por mecanismos de mensajes. Cada procesador cuenta con memoria local, pero sin memoria compartida.
Comparativa de Implantación
Realiza una comparación de las diferentes formas de implantación de la Programación Concurrente mencionando ventajas y desventajas de cada una:
Multiprogramación
- Ventaja: La ejecución de programas es por tiempo compartido, optimizando el uso del único procesador.
- Desventaja: Solo dispone de un procesador.
Multiprocesamiento
- Ventaja: Ejecuta procesos en procesadores separados y pueden acceder a una memoria compartida.
- Desventaja: Carece de la flexibilidad del tiempo compartido (si se implementa sin un planificador de tiempo compartido adicional).
Procesamiento Distribuido
- Ventaja: Ejecución de procesos en procesadores separados, comunicación por mensajes, cada procesador cuenta con memoria local.
- Desventaja: No existe memoria compartida, lo que puede complicar la comunicación de datos grandes.
Tipos de Concurrencia
Concurrencia Real o Física
Se da cuando la ejecución de los procesos ocurre simultáneamente en procesadores separados (arquitectura multiprocesador).
Pseudoconcurrencia
Se da cuando la ejecución de los procesos se realiza con un solo procesador (simulación de concurrencia). Características:
- Solo un proceso se ejecuta en un instante dado.
- La conmutación de la ejecución entre procesos está fuera del control de los procesos (gestionada por el S.O.).
Cuasiconcurrencia
En este caso, los procesos se ejecutan en un mismo procesador. Características:
- Solo un proceso se ejecuta en un tiempo dado.
- La conmutación de procesos ocurre a petición de los procesos activos.
- El programador transfiere la conmutación entre procesos.
Tipos de Concurrencia por Arquitectura
- Arquitectura Uniprocesador: Se puede implantar la Pseudoconcurrencia o la Cuasiconcurrencia.
- Arquitectura Multiprocesador: Se puede implantar la Concurrencia Real o Física.
Mecanismos de Programación Concurrente
Estatutos FORK y JOIN
Explica los estatutos FORK y JOIN, proporciona un ejemplo y menciona los lenguajes que lo soportan:
- Fork: Especifica que una corrutina debe iniciar su ejecución. La rutina llamada y la rutina llamadora se ejecutan en forma concurrente.
- Join: Retarda la rutina llamadora hasta que la rutina invocada haya terminado.
Ejemplo: La ejecución de A2 es iniciada cuando el fork en A1 es ejecutado. A1 y A2 en este momento se ejecutan concurrentemente hasta que A1 ejecute el estatuto Join o A2 termine. Después de que A1 alcanza a Join y A2 termina, A1 continúa su ejecución en el estatuto siguiente a Join.
Lenguajes que lo soportan: UNIX (como llamada al sistema).
Estatutos COBEGIN y COEND
Explica los estatutos COBEGIN y COEND, proporciona un ejemplo y menciona los lenguajes que lo soportan:
Es una forma estructurada de denotar la ejecución concurrente de un conjunto de procesos.
Ejemplo: La ejecución de COBEGIN S1; S2; S3 COEND causa la ejecución concurrente de los procesos S1, S2, S3, los cuales pueden ser un estatuto o un conjunto de ellos. La ejecución de un cobegin termina cuando todos los procesos Sj han terminado de ejecutarse.
Lenguajes que lo soportan: ALGOL, EDISON y Aarhus.
Corrutinas
Explica qué es una Corrutina y menciona los lenguajes que soportan dicho esquema:
Son similares a las subrutinas (Fortran) o procedimientos o funciones (Pascal o C). Sin embargo, las corrutinas transfieren el control de una corrutina a otra, dentro de un programa, permitiendo múltiples puntos de entrada y salida.
Lenguajes que lo soportan: SIMULA, SL5 y MODULA-2.
Conceptos Finales
Diferencia entre Síncrono y Asíncrono
Síncrono: Lleva un orden preestablecido o requiere una confirmación antes de continuar.
Asíncrono: No requiere un orden estricto y el emisor no espera la respuesta para continuar su ejecución.
Arquitectura Paralela
¿Qué es una Arquitectura Paralela?
Es un grupo de técnicas usadas para proporcionar tareas simultáneas de procesamiento de datos para aumentar la velocidad de procesamiento.
