Diseño de sistemas concurrentes
Transcripción
Diseño de sistemas concurrentes
Necesidad de diseño Hasta ahora, problemas ya cerrados: I I Diseño de sistemas concurrentes I Número de procesos, recursos Código de procesos Especificación de recursos ¿De dónde salen? Método general difı́cil de elaborar, pero. . . Manuel Carro I Universidad Politécnica de Madrid I Algunos consejos y directrices Experiencia ¡Asegurar corrección, funcionalidad! Este texto se distribuye bajo los términos de la Creative Commons License M. Carro (UPM) Diseño 1 / 19 Operaciones externas 2 / 19 Arrancar/parar escalera con sensor presencia personas (No) Bloqueantes: suspenden (o no) el proceso llamante hasta que se cumple una condición Ej., lectura de un teclado, un sensor Parar después si no hay nadie en la escalera — sólo guiándonos por T procedure Sensor ; −− Detecta paso de personas procedure A r r a n c a r E s c ; −− Pone en marcha e s c a l e r a procedure Detener Esc ; −− Detiene e s c a l e r a Pueden necesitar protección Diseño Presencia: arrancar durante T segundos (suficiente para que llegue al final) Interfaz con el exterior: (No) Reentrantes: preparadas para ser llamadas (o no) concurrentemente M. Carro (UPM) Diseño Un ejemplo: escalera mecánica Frecuentemente con caracterı́sticas especiales / restricciones de uso I M. Carro (UPM) 3 / 19 M. Carro (UPM) Diseño 4 / 19 Diseño: directrices y pistas Escalera mecánica (Cont.) Clases de procesos y recursos: Para manejar tiempo: procedure Hora (D : out T Tiempo ) ; −− Tiempo desde pasado procedure Espera ( T : i n T Tiempo ) ; −− Suspende proceso Sensor es bloqueante Procesos Recursos Espera(T) es bloqueante Arrancar Esc y Detener Esc no son reentrantes, ni pueden ser llamadas simultáneamente; pueden tardar cierto tiempo Algoritmos de control (normalmente un bucle) Bucles simples (caso anterior simplificado) Accesos bloqueantes Sincronización pura Acceso concurrente a estructuras de datos Mezcla de ambos Procesos y recursos: diseño interdependiente A menudo, varias soluciones (con variación de responsabilidades) No se debe llamar a Arrancar Esc cuando ya está en movimiento (sim. con Detener Esc) ¡A diseñar! M. Carro (UPM) Diseño 5 / 19 Operaciones bloqueantes M. Carro (UPM) Diseño 6 / 19 Operaciones simultáneas Detienen un proceso de forma no interrumpible ¿Un proceso tiene que realizar varias cosas simultáneamente? Normalmente procesos separados para operaciones bloqueantes Nos hemos equivocado: necesitamos más procesos e interacciones Datos recogidos disponibles mediante recurso compartido Posible excepción: cadencia clara de uso Ejemplo particular: temporizadores I I Usualmente un proceso temporizador por cada temporización Avisa final temporización mediante acceso compartido. M. Carro (UPM) Diseño 7 / 19 M. Carro (UPM) Diseño 8 / 19 Operaciones no reentrantes Consultas al estado del recurso Generalmente inseguras: sirven para monitorizar, fallan para tomar decisiones desde fuera recurso Protección explı́cita recurso: Si hay operaciones externas que no permiten acceso reentrante: Poner todos los accesos en el mismo proceso I I El método más sencillo: secuencializa Pero no permitirı́a concurrencia entre ellos I I Realizar accesos desde POST de op. recurso (acabarı́a dentro de un objeto protegido / sevidor de paso de mensajes) I Pero bloquea acceso al recurso durante ejecución I Reduce concurrencia ¿Encapsular zona protegida como operación única? Parte del proceso pasa a recurso → recurso poco general Sincronización cuidada: delicada Accediendo desde distintos procesos y/o recursos I I Cuidar sincronización (evitar accesos indeseados) Legı́timo, pero más frágil y difı́cil de verificar M. Carro (UPM) Diseño 9 / 19 Vivacidad M. Carro (UPM) Diseño 10 / 19 Operaciones del recurso No se suele tratar a este nivel Dependen de lo que los procesos necesiten Depende de técnica de implementación Diseño exacto: postergado hasta saber qué misión tiene cada recurso y proceso Si sólo dotamos de concurrencia a un TAD secuencial: Pero el diseño debe permitir correcta vivacidad I I M. Carro (UPM) Diseño 11 / 19 Operaciones normalmente definidas Pero cuidado con operaciones consultoras M. Carro (UPM) Diseño 12 / 19 Recursos dependiente del núm. procesos Máquina expendedora Algunos procesos sólo tienen una ocurrencia 16 productos (0 al 15 — T Prod); saldo inicial 0 Algunos procesos tendrán varias instancias Tras introducir moneda: hay cambio → actualiza y visualiza el saldo; si no, devuelve moneda Otros tienen 1 instancia en un caso particular, k en general (sin pervertir el problema) A menudo considerar k (aunque sólo se implemente para k = 1) lleva a soluciones más elegantes Y, por supuesto, más escalables M. Carro (UPM) Diseño 13 / 19 Saldo suficiente → servir producto, devolver la cantidad restante (saldo a 0) Saldo insuficiente → informar de la cantidad que falta, olvidar selección M. Carro (UPM) Diseño 14 / 19 Editor interactivo procedure Maq . Detectar Moneda ( V a l o r : out I n t e g e r ) ; −− Bloquea hasta i n t r o d u c c i o n moneda ( de v a l o r v ) function Maq . Hay Cambio r e t u r n Boolean ; −− Maq . HayCambio <=> se puede d e v o l v e r d i n e r o procedure Maq . D e t e c t a r D e v o l u c i o n ; −− Bloquea hasta que se p u l s a e l bot ón de d e v o l u c i ó n procedure Maq . Devolver ( Cantidad : i n I n t e g e r ) ; −− Devuelve a l c l i e n t e l a c a n t i d a d e s p e c i f i c a d a f u n c t i n Maq . P r e c i o ( Producto : T Prod ) r e t u r n I n t e g e r ; −− Devuelve e l p r e c i o de un p r o d u c t o procedure Maq . D e t e c t a r S e l e c c i o n ( Producto : out T Prod ) ; −− Bloquea hasta p r o d u c t o s e l e c c i o n a d o ; l o devuelve procedure Maq . S e r v i r ( Producto : i n T Prod ) ; −− S i r v e una unidad d e l p r o d u c t o procedure Maq . M o s t r a r ( Cantidad : i n I n t e g e r ) ; −− Muestra una c a n t i d a d en e l d i s p l a y Diseño I I Máquina expendedora: interfaz M. Carro (UPM) Al pulsar devolución: devolver saldo y dejarlo a 0 Al seleccionar producto: 15 / 19 Documento en edición en memoria Acepta contı́nuamente pulsaciones (ordenes) usuario y las ejecuta completamente (aunque tarden tiempo) Refresca pantalla cuando no hay ordenes a procesar, pero sigue aceptando órdenes durante el refresco No refresca si no es necesario M. Carro (UPM) Diseño 16 / 19 Abstracciones para el editor Sistema de supervisión y registro Cada UAD explora una entrada externa, con pausa entre exploraciones function Leer Comando r e t u r n T Comando ; −− Lee comando d e l e x t e r i o r Si valor leı́do excede lı́mite, envı́a mensaje a UCR Periódicamente, UCR pide a UADs la última medida procedure Ejecutar Comando (Cmd : i n T Comando ; Doc : i n out T Doc ) ; −− M o d i f i c a e l documento Doc de acuerdo con −− e l comando Cmd. Cadencia de exploración más alta que la de peticiones de la UCR Todas las mediciones se almacenan en disco (lento), asociadas a la UAD procedure E x t r a e P a n t a l l a ( Doc : i n T Doc ; V i s : out T Doc ) ; −− Copia l a p a r t e v i s i b l e d e l documento . UAD1 UAD2 UADn Unidad Central de Registro procedure M o s t r a r P a n t a l l a ( Pant : i n T Doc ) ; −− Muestra documento en p a n t a l l a M. Carro (UPM) Diseño 17 / 19 Sistema de supervisión y registro (Cont.) Cuestiones (casi) abiertas: I I Interfaz (razonable) con sensores y disco Implementación de la pausa entre lecturas Decidir: I I Número procesos, recursos, código procesos Especificación recurso Probar: I I I Desacoplamiento cadencias UCR/UADs No interbloqueo peticiones No retraso (si posible) por acceso a disco M. Carro (UPM) Diseño 19 / 19 M. Carro (UPM) Diseño 18 / 19