Programación Concurrente

Programación concurrente, introducción conceptos

Comienza Ya. Es Gratis
ó regístrate con tu dirección de correo electrónico
Programación Concurrente por Mind Map: Programación Concurrente

1. DIFERENCIAS

1.1. Es mas simpley rápido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro

1.2. •Los procesos son –generalmente– independientes, VS •Los hilos generalmente comparten otros recursos de forma directa.

1.3. • Al cambiar de un proceso a otro, el sistema operativo, (mediante el dispatcher) genera lo que se conoce como overhead, que es tiempo desperdiciado por el procesador para realizar un cambio de contexto (context switch), VS •El tiempo de espera del cambio de hilos es despreciable

1.4. Si bien los hilos son generados a partir de la creación de un proceso, podemos decir que un proceso LIVIANO es un hilo de ejecución, conocido como Monohilo. O un proceso puede tener multiples hilos en ejecución que pueden ser cooperativas o no entre sí

1.5. La comunicación entre procesos debe intervenir el núcleo para ofrecer protección de los recursos y realizar la comunicación misma, la comunicación entre hilos no requiere nucleo.

2. PROCESO

2.1. "Una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados“

2.2. Un proceso es un programa en ejecución

2.3. Un proceso simple TIENE un hilo de ejecución (concepto de hilo)

2.3.1. El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo.

2.4. un proceso es una ACTIVIDAD de cierto tipo que contiene: un PROGRAMA, ENTRADAS Y SALIDAS Y ESTADOS

2.5. ESTADO

2.5.1. Inactivo

2.5.1.1. Suspendido bloqueado:

2.5.1.1.1. Es el proceso que fue suspendido en espera de un evento, sin que hayan desaparecido las causas de su bloqueo.

2.5.1.2. Suspendido programado:

2.5.1.2.1. Es el proceso que han sido suspendido, pero no tiene causa parta estar bloqueado.

2.5.2. Activo

2.5.2.1. Ejecución/Running

2.5.2.1.1. Estado en el que se encuentra un proceso cuando tiene el control del procesador. En un sistema monoprocesador este estado sólo lo puede tener un proceso.

2.5.2.2. Preparado/Ready

2.5.2.2.1. Aquellos procesos que están dispuestos para ser ejecutados, pero no están en ejecución por alguna causa (Interrupción, haber entrado en cola estando otro proceso en ejecución, etc.).

2.5.2.3. Bloqueado/waiting:

2.5.2.3.1. Son los procesos que no pueden ejecutarse de momento por necesitar algún recurso no disponible (generalmente recursos de entrada/salida).

2.5.3. new

2.5.3.1. el proceso esta siendo creado

2.5.4. Terminated

2.5.4.1. el proceso terminó

2.6. CONTROL

2.6.1. Es un registro especial BCP (bloque de control de procesos)donde el sistema operativo agrupa toda la información que necesita conocer respecto a un proceso particular

2.6.2. Identificador del proceso (Process Identificator -PID-, de sus siglas en Inglés).

2.6.3. Estado del proceso. Por ej. listo, en espera, bloqueado.

2.6.4. Contador de Programa: Dirección de la próxima instrucción a ejecutar.

2.6.5. Valores de registro de CPU. Se utilizan también en el cambio de contexto.

2.6.6. Espacio de direcciones de memoria.

2.6.7. Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.

2.6.8. Lista de recursos asignados (incluyendo descriptores de archivos y sockets abiertos).

2.6.9. Estadísticas del proceso.

2.6.10. Datos del propietario (owner).

2.6.11. Permisos asignados.

2.6.12. Signals pendientes de ser servidos. (Almacenados en un mapa de bits)

3. Dijikstra

3.1. "No hay que apresurarse a codificar, eso lo vuelve muy costoso, primero hay que pensar"

3.2. Software= Producto abstracto

3.3. (ALGOL60), escribió el primer compilador

3.4. 1965 introdujo el "problema de la exclusión mutua" Y "La sección crítica"

3.5. diseñaron e implementaron el sistema operativo THE, que estaba organizado en capas claramente identificadas.

3.6. 1968 Dijkstra publicó su famoso artículo "Procesos secuenciales de cooperación"

3.7. Propuso el semáforo

3.8. • Identificó el "problema del dead-lock" y propuso un elegante "algoritmo de Banker"

3.9. Ilustro el problema del dead-lock con el problema de los filósofos que Condujo al concepto del monitor

3.10. • Dio origen a uno de los principales enfoques de la computación tolerante a las fallas "Sistemas autoestabilizadores a pesar del control distribuido

3.11. En 1976 publicó A Discipline of Programming (Una disciplina de programación), que presentaba su método de desarrollo sistemático de programas junto con sus pruebas de corrección

4. SISTEMAS

4.1. TIPOS

4.1.1. SISTEMAS REACTIVOS

4.1.1.1. Interactúan con el ambiente en el tiempo

4.1.1.2. En muchos casos, éstos no computan resultados, y suele no requerirse que terminen. O Ejemplos de sistemas reactivos son: sistemas operativos, software de control, hardware, etc.

4.1.2. SISTEMAS FUNCIONALES O TRANSORMACIONALES

4.1.2.1. no interactúan con el ambiente

4.2. MODELOS

4.2.1. MAQUINA DE ESTADOS

4.2.1.1. • Hay que notar que la representación gráfica de las máquinas de estado, limita seriamente la complejidad de los problemas que se pueden abordar.

4.2.2. REDES DE PETRI

4.3. Testing y Simulación

4.3.1. “El testing puede confirmar la presencia de errores pero nunca garantizar su ausencia”

4.3.2. VERIFICACIÓN SEMI AUTOMÁTICA

4.3.2.1. Existen serias limitaciones en lo que respecta a la verificación automática de software.

4.3.2.1.1. Por ejemplo, el problema de decidir si un programa dado termina o no o no es computable.

4.3.2.2. Sin embargo, si imponemos algunas restricciones sobre las propiedades que queremos verificar, algunas tareas podrán verificarse automáticamente sobre el sistema

4.3.2.2.1. eJ: MODELCHEKING

4.4. Semantica

4.4.1. sistemas de transición de estados

4.4.1.1. Un sistema de transición de estados es un grafo dirigido (S,S0,->)

4.4.1.2. 𝑆 𝑒𝑠 𝑒𝑙 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑑𝑒 𝑒𝑠𝑡𝑎𝑑𝑜𝑠/nodos • 𝑠0 𝑒𝑠 𝑒𝑙 𝑒𝑠𝑡𝑎𝑑𝑜/nodo 𝑖𝑛𝑖𝑐𝑖𝑎𝑙 • 𝑅𝑒𝑙𝑎𝑐𝑖𝑜𝑛 𝑑𝑒 𝑇𝑟𝑎𝑛𝑠𝑖𝑐𝑖ó/ aristas

4.5. SISTEMAS CRÍTICOS

4.5.1. Son sistemas, cuyas fallas pueden ocasionar daños de gran importancia, incluyendo pérdida de vidas humanas, catástrofes ecológicas, grandes pérdidas financieras, etc.

5. PROGRAMAS CONCURRENTES

5.1. Los programas concurrentes deben, en general, colaborar para llegar a un objetivo común, para lo cual la sincronización entre procesos es crucial.

5.2. problemas comunes

5.2.1. Violación de propiedades universales (invariantes)

5.2.2. Starvation (inanición): Uno o más procesos quedanesperando indefinidamente un mensaje o la liberación de un recurso

5.2.3. Deadlock: dos o más procesos esperan mutuamente el avance del otro

5.2.4. Problemas de uso no exclusivo de recursos compartidos

5.2.5. Livelock: Dos o más procesos no pueden avanzar en su ejecución porque continuamente responden a los cambios en el estado de otros procesos

5.3. INTERLEAVING

5.3.1. ¿COMO SE EJECUTAN LOS PROCESOS CONCURRENTES? Los procesos concurrentes se ejecutan intercalando las acciones atómicas que los componen.

5.3.1.1. (A,1)-> (A,2) ó (B,1) -> (B,2)

5.3.1.2. El orden en que se ejecutan las acciones atómicas no puede decidirse en general, y un mismo par de procesos puede tener diferentes ejecuciones

5.3.1.3. Por cada sentencia atómica tenemos una transición.

5.3.1.4. El espacio de estados crece exponencialmente con el número de componentes y variables.

5.3.2. El número de interleavings posibles, por su parte, es en general muy grande POR LO QUE ES AVECES ES IMPOSIBLE DE TEATEAR Y LLEGAR AL OVERFLOW

6. HILOS

6.1. COMPARTEN

6.1.1. Si un mismo proceso compartan los recursos hace que cualquiera de sus hilos pueda modificarlos

6.1.2. Los hilos de ejecución que comparten los mismos recursos, y estos recursos, son en conjunto conocidos como un proceso

6.1.2.1. El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo.

6.2. Permite a una aplicación realizar varias tareas a la vez(concurrentemente).

6.3. PROPIO

6.3.1. contador de programa

6.3.2. la pila de ejecución

6.3.3. el estado de la CPU ->

6.3.4. -> (incluyendo el valor de los registros) Espacio de almacenamiento estático donde almacenará las variables

6.4. ESTADOS

6.4.1. Creación

6.4.1.1. Cuando se crea un proceso se crea un hilo para ese proceso.

6.4.1.2. Luego, este hilo puede crear otros hilos dentro del mismo proceso.

6.4.1.3. El hilo tendrá su propio contador, registros, espacio de pila, y pasara a la cola de listos.

6.4.2. Bloqueo

6.4.2.1. Cuando un hilo necesita esperar por un suceso, se bloquea (salvando sus registros de usuario, contador de programa y punteros de pila).

6.4.2.2. Ahora el procesador podrá pasar a ejecutar otro hilo que esté en la cola de Listos mientras el anterior permanece bloqueado.

6.4.3. Desbloqueo

6.4.3.1. Cuando el suceso por el que el hilo se bloqueó se produce, el mismo pasa a la cola de Listos.

6.4.4. Terminación

6.4.4.1. Cuando un hilo finaliza se liberan tanto su contexto como sus pilas.

7. Programas: Paralelismo y Concurrencia

7.1. Paralela

7.1.1. • Es una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente, operando sobre el principio de que problemas grandes, a menudo se pueden dividir en unos más pequeños, que luego son resueltos simultáneamente (en paralelo)

7.2. CONCURRENCIA

7.2.1. DISEÑO

7.2.1.1. la comunicación entre procesos

7.2.1.2. compartición y competencia por los recursos

7.2.1.3. sincronización de la ejecución de varios procesos

7.2.1.4. asignación del tiempo.

7.2.2. PUEDE PRESENTARSE EN

7.2.2.1. ENTORNOS

7.2.2.1.1. Multiprogramación:

7.2.2.1.2. Multiprocesamiento:

7.2.2.1.3. Procesamiento distribuido:

7.2.2.2. CONTEXTO

7.2.2.2.1. • Aplicaciones estructuradas:

7.2.2.2.2. • Múltiples aplicaciones:

7.2.2.2.3. • Estructura del sistema operativo

7.2.3. • Un sistema concurrente correcto es aquel en el que un conjunto de cómputos avanzar colaborativamente para lo cual esta garantizada y coordinar la secuencia de las interacciones o comunicaciones entre diferentes cómputos como así también el acceso a los recursos que se comparten

7.2.4. PRINCIPIOS

7.2.4.1. Multiprogramado

7.2.4.1.1. con un único procesador, los procesos se intercalan en el tiempo aparentando una ejecución simultánea

7.2.4.2. los problemas son consecuencia de la velocidad de ejecución de los procesos que no pueden predecirse y depende de las actividades de otros procesos, de la forma en que el sistema operativo trata las interrupciones surgen dificultades

7.2.4.3. Compartir recursos globales es riesgoso

7.2.4.3.1. El hecho de compartir recursos ocasiona problemas, por esto es necesario proteger a dichos recursos.

7.2.4.3.2. los resultados de un proceso deben ser independientes de la velocidad a la que se realiza la ejecución de otros procesos concurrentes

7.3. Computación vs manejo de eventos

7.3.1. • Con sistemas de manejo de eventos

7.3.1.1. como máquinas expendedoras, telefonía, servidores web y bancos, la concurrencia es inherente al problema :

7.3.1.2. • debe resolver conflictos inevitables entre solicitudes impredecibles.

7.3.1.3. El paralelismo es una parte de la solución : acelera las cosas, pero la raíz del problema es la concurrencia.

7.3.2. • Con sistemas computacionales

7.3.2.1. como cajas de regalo, gráficos, visión por computadora y computación científica, la concurrencia no es parte del problema :

7.3.2.2. • se calcula una salida de entradas conocidas de antemano, sin eventos externos.

7.3.2.3. El paralelismo es donde comienzan los problemas : acelera las cosas, pero puede introducir errores

7.4. PROCESOS

7.4.1. INTRERACCIÓN DE PROCESOS:

7.4.1.1. Los procesos no tienen conocimiento de los demás

7.4.1.2. Los procesos tienen un conocimiento indirecto de los otros: los procesos no conocen a los otros por sus identificadores de proceso, pero muestran cooperación el objeto común.

7.4.1.3. Los procesos tienen conocimiento directo de los otros: los procesos se comunican por el identificador de proceso y pueden trabajar conjuntamente.

7.4.2. Competencia entre procesos por los recursos

7.4.2.1. • Los procesos concurrentes entran en conflicto cuando compiten por el uso del mismo recurso

7.4.2.2. La ejecución de un proceso puede influir en el comportamiento de los procesos que compiten.

7.4.2.2.1. Por Ej. Si dos procesos desean acceder a un recurso, el sistema operativo le asignará el recurso a uno y el otro tendrá que esperar.

7.4.2.3. Cuando hay procesos en competencia, se deben solucionar tres problemas de control:

7.4.2.3.1. la necesidad de exclusión mutua.

7.4.2.3.2. Hacer que se cumpla la exclusión mutua provoca un interbloqueo

7.4.2.3.3. Y LA Inanición (STARVATION)

7.4.2.4. Los procesos deben cooperar para asegurar que los datos que se comparten se gestionan correctamente.

7.4.3. SINCRONIZACIÓN

7.4.3.1. La comunicación de un mensaje entre 2 procesos implica cierto nivel de sincronización entre ambos.

7.4.3.2. El emisor y el receptor pueden ser bloqueantes o no bloqueantes

7.4.3.2.1. I) Envío bloqueante, recepción bloqueante: tanto el emisor como el receptor se bloquean hasta que llega el mensaje; esta técnica se conoce como rendezvous.

7.4.3.2.2. II) Envío no bloqueante, recepción bloqueante: aunque el emisor puede continuar, el receptor se bloquea hasta que llega el mensaje solicitado. Es la combinación más útil.

7.4.3.2.3. III) Envío no bloqueante, recepción no bloqueante: nadie debe esperar