Sobre la programación concurrente [1em] Lecturas recomendadas
Transcripción
Sobre la programación concurrente [1em] Lecturas recomendadas
Concurrencia ¿Qué es la programación concurrente? Procesos / tareas con control independientemente programable Puede ser necesaria Sobre la programación concurrente I Lecturas recomendadas: G. Andrews, introducción parte 1 Ben-Ari, secciones 2.1 y 2.3 A. Burns, A. Wellings, capı́tulo 2 (hasta 2.4) Andrews & Schneider, todo el artı́culo I Sincronización entre las tareas Comunicación de datos / creación de estructuras de datos Distinguir programa de tarea: Un programa, varias tareas P Metáfora: varios trabajadores construyen una pared. Manuel Carro I Universidad Politécnica de Madrid T5 T1 T2 T3 T4 ¿Cuándo y cómo se produce la sincronización en este caso? T6 Tarea vs. Proceso Este texto se distribuye bajo los términos de la Creative Commons License M. Carro (UPM) Sobre la programación concurrente 1 / 16 M. Carro (UPM) Concurrencia La programación concurrente es... Difı́cil: Navegador web accede una página mientras atiende al usuario I Varios navegadores acceden a la misma página I I Acceso a disco mientras otras aplicaciones siguen funcionando Interacción de tareas, comunicación de datos Intuitivamente, muchos más estados ¿Cuántos estados tienen los siguientes fragmentos de programa? X X Y X El teléfono avisa de recepción de llamada mientras se habla Varios usuarios conectados a un mismo sistema Fase eliminatoria de 50 por 15 := := := := 2; Y := 3; X + Y; X − Y; X − Y; while True loop null ; end loop ; Útil: I I I I Sobre la programación concurrente 2 / 16 Concurrencia ¿Dónde está la concurrencia? M. Carro (UPM) Sobre la programación concurrente 3 / 16 Permite funcionamiento determinados programas: sistemas inherentemente concurrentes con llamadas bloqueantes Optimiza uso CPU: detener un proceso mientras se espera por un dato (bio.adb) → evitar espera activa Simula simultaneidad (time sharing) Simplifica muchos diseños M. Carro (UPM) Sobre la programación concurrente 4 / 16 Interacción y ejecuciones Interacción y ejecuciones Tareas e interacción entre las mismas Ejemplo de interacción Tarea: hilo de ejecución (y realización de instrucciones) independiente (¿Cómo harı́amos programas para un ordenador moderno si tuviesen que tener en cuenta qué otros programas están ejecutándose en un momento dado?) Comunicación: a través de datos compartidos en memoria (multiprocesadores) datos enviados explı́citamente (multicomputadores, sistemas distribuidos, Internet) Código fuente −→ X := X + X; Código compilado (a) Load MemPos1, Accum (b) Add MemPos1, Accum (c) Sto Accum, MemPos1 T1 , T2 mismo código Memoria compartida (MemPos1) Objetivo: coordinación tareas, coherencia datos, cooperación hacia un fin T Accum privado a cada tarea (task switching / registro del procesador) T1 T2 T Inicialmente X = 1 Objetivo: X = 4 Instrucciones indivisibles (atómicas) M. Carro (UPM) Sobre la programación concurrente 5 / 16 M. Carro (UPM) Interacción y ejecuciones Sobre la programación concurrente 6 / 16 Propiedades Posibles ejecuciones Atomicidad y serializabilidad Básicas para razonar sobre ejecuciones concurrentes Código fuente X := X + X; −→ Código compilado (a) Load MemPos1, Accum (b) Add MemPos1, Accum (c) Sto Accum, MemPos1 Acción atómica: desarrollada sin interferencia de otras tareas / procesos (ej., cada una de las instrucciones en ensamblador del caso anterior) ¿Cuáles son los resultados de las siguientes ejecuciones? 1 2 3 Serializabilidad: ejecución concurrente equivalente a algún entrelazado de acciones atómicas (ej., cada una de las ejecuciones del caso anterior) T1 : a; T1 : b; T1 : c; T2 : a; T2 : b; T2 : c T1 : a; T2 : a; T1 : b; T2 : b; T1 : c; T2 : c T1 : a; T2 : a; T1 : b; T1 : c; T2 : b; T2 : c ¿Cuántas ejecuciones diferentes hay? ¿Cuántas son correctas? No confiar en una planificación determinada Para encontrar errores (en principio): buscar ejecuciones incorrectas Intentaremos expresar qué ejecuciones son correctas M. Carro (UPM) Sobre la programación concurrente 7 / 16 Nos servirán para estudiar las propiedades de los programas concurrentes M. Carro (UPM) Sobre la programación concurrente 8 / 16 Propiedades Propiedades Propiedades de un programa concurrente Propiedades de seguridad Sirven para analizar comportamientos Caracterización comportamiento: más complicado que en el caso secuencial A menudo (pero no siempre): I I I Deben cumplirse en todo momento A menudo expresan cosas que no queremos que ocurran: Tiempo (absoluto) o complejidad no importante Resultados finales no existentes ¡Terminación no esencial! Nunca debe cumplirse P ¬∃tP(t) (t ≡ tiempo) ←→ Siempre debe cumplirse ¬P ∀t¬P(t) ¿Qué es relevante? I I Corrección de los resultados parciales Existencia de resultados deseados Es decir, evitan situaciones indeseables −→ No se entra en ningún estado inconsistente / incorrecto −→ No se produce ningún dato erróneo (siempre es verdad que no se produce un dato erróneo o todo dato producido es correcto) Tres tipos de propiedades: I I I Seguridad: propiedades que deseamos que siempre se cumplan Vivacidad: propiedades que deseamos que se cumplan en algún momento Prioridad M. Carro (UPM) También llamadas estáticas: no dependen de la historia anterior Corrección parcial: siempre que el proceso termine, su estado final es correcto Sobre la programación concurrente 9 / 16 M. Carro (UPM) Propiedades Propiedades de prioridad Si algo debe ocurrir, garantizamos que ocurrirá en algún momento A menudo: en algún momento se entra en un estado deseable, o en algún momento se produce un dato necesario T2 loop X := X + 1; end loop; loop if X mod 2 = 0 then Put(X); end if; end loop; 10 / 16 Propiedades Propiedades de vivacidad T1 Sobre la programación concurrente Relacionadas con vivacidad De manera explı́cita, unas tareas puede tener más derecho a ejecutarse que otras Diferentes prioridades pueden dar inanición Pero a veces esto es lo requerido Propiedades vivacidad/prioridad ¿Cómo garantizar que en algún momento se imprime un número? ¡No confiar en planificación del S.O. o del lenguaje! Propiedades de vivacidad: corrección total (incluye terminación) Inanición: procesos conspiran para que otro no progrese M. Carro (UPM) Sobre la programación concurrente 11 / 16 M. Carro (UPM) Sobre la programación concurrente 12 / 16 Propiedades Representación gráfica Hacia la corrección Representación de procesos y datos Asegurar (buenas) propiedades de seguridad/vivacidad/prioridad Tareas sin comunicación: poco interesante Nunca suponer una planificación favorable Interacción entre procesos mediante comunicación datos Prueba de corrección difı́cil: no determinismo Diagrama de procesos y flujo de datos: esquematiza interacción mediante comunicación datos Depuración convencional inadecuada: intromisión en planificación Datos fluyen entre procesos Imprimir mensajes para ver qué pasa puede ser mejor (pero también afecta planificación) ¿Cómo llegar a corrección? I I Análisis cuidadoso de condiciones de concurrencia Implementación sistemática de estas condiciones Info. adicional Natural — pero no la única representación M. Carro (UPM) Sobre la programación concurrente 13 / 16 M. Carro (UPM) Sobre la programación concurrente Representación gráfica 14 / 16 Representación gráfica Procesos y recursos Transformación entre esquemas Esquematiza interacción tareas concurrentes Procesos: acceden a recursos compartidos Similar (¡pero sólo similar!) a un TAD Recursos: I I I estado, operaciones sobre estado, condiciones sincronización P1 Recurso P2 Recurso P1 P2 Op A P3 P3 Op B Estado Op C Info. adicional M. Carro (UPM) Sobre la programación concurrente 15 / 16 Info. adicional M. Carro (UPM) Sobre la programación concurrente 16 / 16
Documentos relacionados
“Simultaneidad” + Sincronización
Distinguir programa de tarea: Un programa, varias tareas Metáfora: varios trabajadores construyen una pared. I
Más detalles