Concurrencia Y: Sistemas Distribuidos
Concurrencia Y: Sistemas Distribuidos
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Programa concurrente: Colección de actividades (hilos) que pueden ejecutarse en paralelo. Y
cooperan para llevar a cabo una tarea común
Ejemplo: hilos auxiliares (típico en servidores). El hilo principal lanza hilos auxiliares
que realizan determinadas tareas de forma concurrente
Ventajas
• Eficiencia: explota mejor los recursos máquina
• Escalabilidad: puede extenderse a sistemas distribuidos
• Gestión de las comunicaciones: explota la red. Ej: facilita el solape entre actividades de
red y resto de actividades
• Flexibilidad: resulta más fácil adaptar el programa a cambios en la especificación:
sistemas cliente servidor, juegos, dispositivos móviles…
• Menor hueco semántico: en aquellos problemas que se definen de forma natural como
una colección de actividades
• Mejora prestaciones y tolerancia a fallos: Útil en: S.O., Sistemas de bases de datos…
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387060
Programación Concurrente en Java
Se usa java porque Los hilos forman parte del modelo del lenguaje, Dispone de primitivas para
comunicación y sincronización entre hilos y hay Bibliotecas de soporte adicionales
([Link]) para desarrollo de aplicaciones complejas
Thread (hilo) = contexto de ejecución, formado por la Máquina virtual de java, el código
(en el método run) y los datos. Todas las aplicaciones tiene un hilo principal cuando se ejecuta,
del cual pueden descender otros hilos
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Crear un hilo 2 formas
Implementando la interfaz Runnable: Se ha de definir
método run() que contiene el código a ejecutar por el hilo (esto xq es
una interfaz). Luego para iniciarlo habrá que crear una instancia de la
clase Thread y iniciarla con “.start”
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387060
Diferencia entre llamar a run() y a start()
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Si llamas a start() java creará un hilo en el que se ejecutará de manera concurrente el método
run indicado, pero si ejecutas con run() también lo ejecutará pero de manera secuencial, será
el propio hilo main el que se interrumpa para meterse a ejecutar este método.
Métodos
Dependiendo de la clase si es con extends se puede poner solos los métodos, por ejemplo
“sleep()”. Pero si es con implements se tiene que añadir Thread, ejemplo “[Link]()”. Si no
te guardas la referencia a un hilo no puedes aplicar ninguno de estos métodos sobre él
Notación Lambda
Las expresiones Lambda son funciones anónimas, y pueden ser utilizadas donde el tipo
aceptado sea una interfaz funcional (interfaz con un solo método abstracto).
Por ejemplo La interfaz Runnable es una interfaz funcional con un único método abstracto
run(). SIRVEN PARA SIMPLIFICAR EL CÓDIGO, COMPACTARLO MÁS Y EVITIAR CREAR OTRAS
CLASES
Cuerpo: Cuando el cuerpo de la expresión lambda tiene una única línea no es necesario
utilizar las llaves
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387060
Ejemplos
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Runnable task1 = () -> [Link](“Hilo #1");
Thread thread1 = new Thread(task1);
[Link](); //crear y ejecutar forma 1
Lo mismo pero en este ejemplo se pone por pantalla el nombre de verdad del hilo
new Thread(() ->
[Link]([Link]().getName(),
“Hilo #1”).start(); //crear y ejecutar forma 5
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387060
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387061
Mique Gómez Corral
Tema 2
CONCURRENCIA Y
SISTEMAS DISTRIBUIDOS
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
errores de vistas inconsistentes de la memoria compartida.
Tipos de Sincronización
Exclusión mutua: Solamente un hilo puede ejecutar la sección en cada momento.
Necesario para evitar interferencias entre hilo
La condición depende del valor de alguna variable compartida. Otros hilos, al modificar esas
variables, conseguirán que se cumpla la condición, reactivando a los hilos suspendidos
Mecanismos de comunicación
Memoria compartida: Los hilos comparten espacio de memoria (variables u objetos
compartidos). Requiere mecanismos de sincronización para coordinar las tarea
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387061
Sección Crítica Cómo protegerla
Fragmento de código (variables globales) que puede provocar condiciones de carrera
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Código thread-safe: Puede ser ejecutado concurrentemente por distintos
hilos de forma segura sin que se produzca ningún error de concurrencia
(por ejemplos todos los métodos tiene la cabecera synchronized)
Atomicidad: Usando locks convertimos una sección crítica en una acción atómica:
únicamente un hilo puede ejecutar el código protegido en un momento dado
Al ejecutar un método con lock (Cerrar el lock) Al Salir de un método con lock (Abrir el lock)
• Si abierto → lo cierra • Si abierto → no tiene efecto
• Si cerrado por otro hilo → se suspende • Si cerrado por otro hilo → no tiene efecto
• Si cerrado por mismo hilo → no tiene efecto • Si cerrado por mismo hilo → se abre el lock
Ejemplo
Los 2 métodos usan la cabecera, por lo
que solo se ejecutará uno de ellos a la
vez, y solo un hilo a la vez
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387061
Synchronized Sobre un objeto: Permite utilizar más de un lock dentro de un mismo
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
método y no excluir diferentes métodos
En el ejemplo Los métodos inc1 e inc2 pueden intercalarse Pero la actualización de c1 se hará
en exclusión mutua al igual que la de c2. Puede haber un hilo actualizando c1 y otro c2, pero no
2 actualizando c2 a la vez por ejemplo
Sincronización condicional
En el tema 3 se explica mejor, pero dejo un ejemplo ya que sale por aquí y me sobra espacio :p
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7387061
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7426723
Mique Gómez Corral
Tema 3
CONCURRENCIA Y
SISTEMAS DISTRIBUIDOS
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
necesitamos otras primitivas que permitan esperar de forma segura hasta que se cumpla
determinada condición lógica (sincronización). Para ello tenemos los monitores
Monitor
Un monitor es una clase para definir objetos que podemos compartir de forma segura entre
distintos hilos → Sus métodos se ejecutan en exclusión mutua y Resuelve la sincronización
Exclusión mutua: Dispone de una cola de entrada donde esperan aquellos hilos que
desean utilizar el monitor cuando lo está utilizando otro hilo. No hay condiciones de carrera
dentro del monitor
Sincronización: Podemos definir colas de espera (variables condition) dentro del monitor.
Para que esto sea seguro con varios hilos la variable condition se debe comprobar con un
while(condition){ [Link](); } para que cada vez que se reactive compruebe la condición
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7426723
Monitores en Java
Dos niveles posibles, uno es el Soporte básico en el lenguaje y el otro el Soporte extendido
mediante la biblioteca [Link]. En este tema solo Soporte Básico
Todo objeto posee de forma implícita (sin necesidad de declararlos) Un lock y Una cola de
espera con primitivas. CADA OBJETO TIENE LA SUYA, por lo que pueden haber 2 hilos y cada
uno en una cola diferente
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Esto equivale a cerrar lock al entrar y abrir lock tras la última instrucción, al salir.
SI SOLO HAY 2 HILO CON notify(); VAS BIEN, SI HAY MÁS EN JAVA NECESITAS notifyall();
Así NO podemos declarar otros locks ni otras colas de espera. El monitor de Java sigue el
modelo de Lampson-Redell
Monitor Teórico: Los hilos que esperan por condiciones lógicas distintas esperan en
colas de espera distintas, cada una con una condición diferente Ej: noVacio o noLleno
Monitor Java: Java utiliza únicamente una variable condición por monitor. Por lo que hilos
que esperan por condiciones lógicas distintas esperan en una única cola, no en diferentes.
Por lo que al reactivar un hilo no sabemos si reactivamos al que esperaba por una condición o
por otra. Excepto en casos muy simples con 2 hilos por ejemplo, se recomienda despertar a
todos y que cada uno vuelva a comprobar su condición
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7426723
Variantes del Monitor
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Los monitores garantizan la Exclusión Mutua, osea que Sólo un hilo ejecuta código del monitor
en un instante dado
El monitor queda libre (espera fuera de la SC) por lo que Otro hilo (N)
que espera en la entrada pasa a activo en el monitor
Monitor tipo Hoare Se añade una cola especial para procesos que despierten a otros
Supongamos que W espera en cond c y N ejecuta [Link]() reactivando W.
→ El hilo N pasará a una cola especial, la cual es más prioritaria que la normal,
mientras que W se queda activo ejecutando el código. SE LE DA PRIORIDAD AL
HILO DESPERTADO
Ejemplo: H1 en Ma y H2 en Mb
H1 activo en Ma, invoca un método de Mb, dentro del cual ejecuta
[Link]() y Libera el monitor Mb, pero no Ma (Nadie más puede usar
Ma mientras H1 espera en Mb, por lo que reducimos la concurrencia)
Si H2 entra en Mb (que estaba libre) e invoca un método del monitor Ma Espera en la cola de
entrada de Ma (Ma está ocupado aún por H1), este NO PUEDE EJCUTAR, se suspende en la
cola de Ma por lo que No deja libre el monitor Mb y Hemos llegado a un interbloqueo
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7426723
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7507703
Mique Gómez Corral
Tema 4
CONCURRENCIA Y
SISTEMAS DISTRIBUIDOS
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Estos pueden tener varias instancias las cuales son equivalentes para el hilo: Si pides imprimir
algo te da igual si es en la impresora 1 que en la 15
Un hilo A espera a otro hilo B cuando solicita un recurso usado por B y dicho recurso no es
compartible (no pueden usarlo ambos a la vez) EXCLUSIÓN MUTUA
Protocolo
1. Petición: Si no está disponible hilo se suspende hasta que lo esté (a la puta cola se va)
2. Uso: Usa el puto recurso.
3. Liberación: Deja usar el puto recurso y el si había algún subnormal esperando lo usa
1. Exclusión mutua: Mientras un recurso está asignado a un hilo, otros no pueden usarlo
2. Retención y espera: Los recursos se solicitan a medida que se necesitan, de forma que
podemos tener un recurso asignado y solicitar otro no disponible (espera)
3. No expulsión: Un recurso asignado sólo lo puede liberar su dueño (no expropiable)
4. Espera circular: En el grupo de hilos interbloqueados, cada uno está esperando un
recurso que mantiene otro del grupo, y así sucesivamente hasta cerrar el círculo-
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7507703
Solicitud
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Análisis del GAR
Interbloque: Un ciclo dirigido en el GAR implica riesgo de interbloqueo. Si todos los
recursos que participan en el ciclo tienen una única instancia y el ciclo dirigido, entonces
tenemos un interbloqueo. Si tiene más de 1 instancia hay RIESGO, pero no 100% Interbloqueo
Secuencia segura: Si encontramos un orden en que puedan terminar todos los hilos
(secuencia segura), significa que no hay interbloqueo
Para poder encontrar la secuencia segura mirar procesos que tengan todos sus recursos
asignados y puedan continuar, vas descartando y si terminas todo bien. Pero si no llegas a un
punto donde todos los procesos NO tienen asignados todos los recursos (esperar) interblock
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7507703
Estrategias de prevención
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
La prevención implica que se rompa alguna de las condiciones de Coffman, miremos las 4
Exclusión mutua: Depende del sistema, pero muchas veces la mayor parte de recursos
deben usarse en exclusión mutua (recursos no compartibles) No se puede hacer nada
Retención y espera: La forma normal de trabajar es solicitar recursos a medida que los
necesitamos, lo que conduce a retención y espera. }
• Solución 1: Pedir desde el principio todo lo que podemos llegar a necesitar, esperar
hasta tenerlo.
• Solución 2: Solicitar recursos de forma no bloqueante. Si el recurso está en uso, el
hilo no se bloquea, sino que recibe un valor que indica dicha situación. El hilo libera
aquellos recursos que ha retenido.
Espera circular: Establecemos un orden total entre los recursos, y obligamos a solicitar los
recursos en orden. Suele ser la condición más fácil de romper
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7507703
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
Mique Gómez Corral
Tema 5
CONCURRENCIA Y
SISTEMAS DISTRIBUIDOS
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• Productividad: Facilita desarrollo/mantenimiento de aplicaciones concurrentes de
calidad
• Prestaciones: Más eficiente y escalable que las implementaciones típicas
• Fiabilidad: Comprobaciones extensivas contra interbloqueos, condiciones de carrera,
inanición
Locks
Características
• Permite especificar si se requiere una gestión equitativa (atributo fair para evitar
inanición) de la cola de espera mantenida por el lock
• Se facilitan distintos tipos de locks, con semántica diferente como por Ejemplo: locks
orientados a exclusión mutua, locks que resuelven el problema de lectores-escritores, ya
que puedes especificarlo solo entre escritores y solo entre lectores en vez de los 2 a la vez.
• Ofrece un método tryLock() que no suspende al invocador si el lock ya ha sido cerrado
por otro hilo: Se rompe así la condición de retención y espera (Condiciones de Coffman)
ReentrantLocks
Es una clase ofrecida, la clase ReentrantLock, Esta Implementa un lock reentrante: Dentro de la
sección de código protegida por el lock se podrá volver a utilizar ese mismo lock sin que haya
problemas de bloqueo.
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
Inconveniente: Ahora los loks NO SE ABREN AUTOMATICAMENTE, por lo que hay que
hacerlo de manera manual unlock(). HAY Q HACER TANTOS UNLOCK COMO LOCKS HECHOS
Estructura recomendada
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Variables condición
La interfaz Condition permite declarar cualquier número de variables condición en un lock, En
muchos casos utilizar múltiples variables condición permite un código más legible y eficiente
como por ejemplos en los casos de productor/consumidor (una condición para cada uno)
En los monitores básicos, los métodos similares son wait(), notify(), notifyAll() pero estos
actúan sobre el objeto correspondiente, los otros sobre el lock asociado a la condición
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
Colecciones concurrentes
[Link] incluye versiones Thread-safe de las EDAs que hay en java.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• ConcurrentLinkedQueue
• LinkedBlockingQueue
• PriorityBlockingQueue
• DelayQueue
• SynchronousQueue
Variables atómicas
Package [Link] Proporciona instrucciones que el compilador java hará en
una sola instrucción y no las descompondrá en otras sub instrucciones, asegurando que
durante su tiempo de ejecución los valores tratados no cambien (EXCLUSIÓN MUTUA DE
VALORES → GARANTIZAR LA EJECUCIÓN NO INTERRUMPIBLE lo que veíamos en FSO)
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
Métodos y clases más importantes
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• AtomicLong → Permite actualizar de forma atómica un valor long con algunos métodos
• addAndGet() → atómicamente añade el valor dado al actual
• decrementAndGet(), getAndDecrement() → atómicamente decrementa en 1
Ejemplo
Clase normal Con AtomicLong
Sincronización
Semáforos
La clase Semaphore permite la sincronización entre hilos. Se usan los métodos acquire() y
release().
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
Semáforos como los mutex (semáforos con entrada a 1 solo hilo) se pueden usar para
proteger secciones críticas o para sincronizar hilos. Cada semáforo lleva asociado un contador
que se inicializa en la creación este contador si:
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
El true indica si se hace con colas equitativas FIFO
Ejemplos
Inicializado a 0 Ejemplo de sincronización de hilos
Semaphore sem = new Semaphore(0, true);
CyclicBarrier
Permite que varios hilos se esperen mutuamente en un punto, Se abre cuando determinado
número de hilos llega a la barrera
Reutilizable: Es reutilizable (por eso se dice que es cíclica) → Al abrirse y pasar los
hilos, se restauran las condiciones iniciales
Ideal para aplicaciones iterativas Ej: en cada iteración un hilo trabajador (Worker)
procesa una columna de la matriz, y un coordinador (Solver) mezcla los resultados
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
CountDownLatch
Permite suspender a un grupo de hilos, a la espera de que suceda algún evento generado por
un hilo ajeno al grupo. Se mantiene un contador de eventos, inicializado en el constructor
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Barrera de un solo uso: Una vez a cero, permanece así. Si se desea
reutilización, usar CyclicBarrier (que se reinicia y pone todo de nuevo)
Ventajas
• Previene el consumo desmedido de recursos
• Biblioteca ya implementada (Executor) para crear tareas de una forma muy flexible
Interfaz Executor
La interfaz Executor ofrece la subinterfaz ExecutorService, que permite crear diferentes tipos
de Executors
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
Ejemplo
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Asignación de tareas
Existen diferentes formas para delegar tareas para la ejecución de un ExecutorService:
execute(Runnable), submit(Runnable), submit(Callable), invokeAny(…), invokeAll(…)
Detener el ExecutorService
Existen dos formas para detener el ExecutorService: shutdown() y shutdownNow()
shutdown(): Permite detener los hilos del Executor. No se detiene inmediatamente, pero
ya no aceptará nuevas tareas. Cuando todos los hilos hayan acabado con sus tareas actuales,
entonces se detendrá
shutdownNow(): Trata de detener todas las tareas en ejecución. Las tareas presentadas
pero no procesadas las ignora. Intenta parar las tareas en ejecución (aunque algunas podrían
ejecutarse hasta su finalización). Devuelve la lista de tareas que no finalizaron
Cosos importantes
• Aunque el hilo principal (main) de la aplicación termine, el ExecutorService continuará
ejecutándose (y, por tanto, la aplicación), mientras esté activo.
• Podemos utilizar awaitTermination() para esperar a que ExecutorService se detenga.
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568768
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
Mique Gómez Corral
Tema 6
CONCURRENCIA Y
SISTEMAS DISTRIBUIDOS
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
con su entorno físico, Responde a los estímulos dentro de un plazo de tiempo determinado,
Para que el funcionamiento del sistema sea correcto no basta con que las acciones sean
correctas, sino que tienen que ejecutarse dentro del intervalo de tiempo especificado
Un sistema con varios computadores, hardware E/S, y software con cierto propósito, este
interacciona con el entorno de manera que ha de reaccionar con cierto tiempo a la vez a
todos los estímulos que reciba (simultaneidad). Como resultado se imponen requisitos
Ejemplo
El sistema de tiempo real actúa sobre el
sistema controlado para conseguir que tenga
un comportamiento determinado
• Estricto o crítico (hard): Una respuesta fuera de plazo es inadmisible. Ejemplo: UCI,
central nuclear, control de frenado, airbag …
• Firme (firm): Una respuesta fuera de plazo no tiene utilidad. Ejemplo: En sistemas
multimedia, procesado de audio o víde, la pérdida de una trama de audio o vídeo)
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
• Flexible (soft): Una respuesta fuera de plazo tiene una utilidad reducida. Ejemplo:
adquisición de datos meteorológicos, contestador automático
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Interacción con dispositivos físicos
Los STR interaccionan con su entorno mediante diversos tipos de dispositivos no
convencionales: Convertidores A/D y D/A, entradas y salidas digitales, sensores…
Fiabilidad y seguridad
Un fallo en un sistema de control puede hacer que el sistema controlado se comporte de
forma peligrosa o antieconómica. Hay que asegurar que si el sistema de control falla lo haga
Determinismo Temporal
Acciones en intervalos de tiempo determinados. Es fundamental que el comportamiento
temporal de los STR sea determinista. No es lo mismo que sea eficiente, solo que debe
responder correctamente en todas las situaciones. Prever el comportamiento en el peor caso.
Predictibilidad
La predictibilidad es uno de los objetivos principales en sistemas de tiempo real. Se debe
realizar un análisis de la planificabilidad de las tareas de un sistema de tiempo real para
predecir si las tareas cumplirán sus requisitos temporales
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
Para comprobar que los requisitos están garantizados en todos los casos se estudia siempre
el peor caso. Es necesario conocer la duración de las tareas en el peor caso
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• Existen técnicas analíticas completas
• Requerido por estándares de sistemas operativos y lenguajes concurrentes
• Las tareas son fijas: estáticas, no se crean dinámicamente (en tiempo de ejecución).
A este conjunto se le llama 𝜏 = {𝜏1, 𝜏2. . . , 𝜏𝑛}
• Tareas periódicas: su periodo se 𝒍𝒍𝒂𝒎𝒂 𝑻𝒊. Existe un Hiperperiodo, que es cuando
todas las tareas coinciden/terminan un ciclo, es el mínimo común múltiplo de todos los Ti.
• No cooperan entre sí: no comparten objetos ni cosas (son independientes)
• T de ejecución máximo: Se conoce el tiemp. de ejecución máximo de cada 𝒕𝒂𝒓𝒆𝒂 𝑪𝒊
• Plazo de respuesta: Cada tarea tiene un este plazo menor a su periodo 𝑫𝒊 ≤ 𝑻𝒊
Respecto a la ejecución de las tareas, asumimos que
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
Se usan para ver la planificabilidad de un conjunto de tareas. Para hacerlos hay 3 elementos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Primero se ordenan de más prioritario a menos prioritario las taras (de arriba abajo). Los
rectángulos el tiempo que está en ejecución y luego el ^ y el ⃝ te lo pongo bajo.
Principios básicos
Ya que el objetivo es ver si al ejecutarse todas las tareas se cumplen con las deadline, hay una
manera para encontrar el peor caso de tareas periódicas independientes.
𝑅𝑖 = 𝐶𝑖 + 𝐼𝑖
Interferencia máxima: Interferencia máxima que causa una tarea de mayor prioridad “j”
sobre otra de menor prioridad “i”.
Para eso hay que Acumular el tiempo en el que la tarea “j” está en ejecución mientras se
ejecuta “i”. Y tenemos que para sacar el número de veces que se activa “j” durante “i” hay que
dividir el tiempo durante el que vive “i” y dividirlo entre
cada cuanto se activa “j”
𝑅𝑖
= 𝑁ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑎𝑐𝑡𝑖𝑣𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑑𝑒 𝑗 𝑒𝑛 𝑅𝑖
𝑇𝑗
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
Si ya tienes el número de veces que se activa “j” mientras está activo “i”, puedes calcular
cuanto tiempo está activo multiplicando por el tiempo que tarde en terminar
𝑗 𝑅𝑖
𝐼𝑖 = ⌈ · 𝐶𝑗⌉
Si hay varias, la interferencia 𝑇𝑗 𝑅𝑖
sería la suma de todas las interferencias 𝐼𝑖 = ∑ ⌈ ⌉ · 𝐶𝑗
𝑇𝑗
máximas sobre “i”
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
CUIDAD CON LA OPERACIÓN ⌈𝒂/𝒃⌉ NO ES SOLO UNA DIVISIÓN NORMAL, LUEGO, EL
Test de planificabilidad
RESULTADO SI ES DECIMAL SE APROXIMA HACÍA ARRIBA. LA OPREACIÓN SE LLAMA TECHO
Para todas las tareas del sistema: El tiempo de respuesta de la tarea es menor o igual a su
plazo máximo de ejecución. Donde este tiempo de respuesta es la suma del tiempo de
ejecución de la tarea + todas las interferencias que le puedan hacer tareas más prioritarias
∀𝑖, 1 ≤ 𝑖 ≤ 𝑛, 𝑅𝑖 ≤ 𝐷𝑖
𝑤𝑖𝑛
𝑤𝑖𝑛+1 = 𝐶𝑖 + ∑ ⌈ ⌉ · 𝐶𝑗
𝑇𝑗
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
Como valor inicial se puede pillar
𝑤𝑖0 = 𝐶𝑖 + ∑ 𝐶𝑗
Fin del cálculo: El cálculo termina cuando se consiguen en 2 iteraciones seguidas el mismo
valor o cuando el tiempo de respuesta (lo que estamos calculando) es superior al tiempo
máximo de la tarea. En este caso no sabemos el tiempo de respuesta de la tarea pero
sabemos que NO es planificable
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejemplo de cálculo de los tiempos de respuesta
𝜏4 𝑤0 = 4 + 3 + 2 + 3 = 12
12 12 12
𝑤1 = 4 + ⌈12⌉ · 3 + ⌈ 8 ⌉ · 2 + ⌈20⌉ · 3 = 14
14 14 14
𝑤2 = 4 + ⌈12⌉ · 3 + ⌈ 8 ⌉ · 2 + ⌈20⌉ · 3 = 17
17 17 17
𝑤3 = 3 + ⌈ ⌉ · 3 + ⌈ ⌉ · 2 + ⌈ ⌉ · 3 = 19
12 8 20
19 19 19
𝑤4 = 4 + ⌈12⌉ · 3 + ⌈ 8 ⌉ · 2 + ⌈20⌉ · 3 = 19
Así hasta que hemos llegado a que en w3 y w4 el resultado es el mismo, por lo que fin,
sabiendo que 19 es el valor del tiempo de respuesta de T4. COMO 19 es menor que la deadline
de t4 (D4 = 22), está garantizado que t4 SIEMPRE cumplirá sus plazos en este sistema
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
Una de las restricciones más importantes del test de planificabilidad anterior es la de suponer
que las tareas son independientes. Pero eso no siempre es así, en la mayoría de los sistemas
de interés práctico las tareas necesitarán comunicarse. Cuando esto pasa hace falta
sincronización. Para analizar esto asumiremos que solo hay exclusión mutua en las secciones
criticas y que se usan locks del tipo 𝑷(𝑺) 𝑝𝑎𝑟𝑎 𝑪𝒆𝒓𝒓𝒂𝒓 𝑦 𝑽(𝑺) 𝑝𝑎𝑟𝑎 𝒂𝒃𝒓𝒊𝒓.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
La inversión de prioridades
La inversión de prioridades ocurre cuando una tarea menos prioritaria se ejecuta por delante
de una más prioritaria. El tiempo total de bloqueo debido a una tarea menos prioritaria no
está acotado, al poder intervenir tareas de prioridad intermedia, por lo que pueden no
cumplirse los requisitos temporales que hemos medido en los test.
Ambos hacen que la inversión de prioridad, o retraso que una tarea sufre a causa de tareas
de prioridad inferior sea función de la duración de una o varias secciones críticas y no sea
función de la duración de tareas completas
Propiedades
• Cada tarea se puede bloquear una vez como máximo, en cada ciclo. Además si una
tarea se bloquea, lo hace al principio del ciclo.
¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767
• No puede haber interbloqueos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Prioridad 𝑡𝑒𝑐ℎ𝑜(𝑋) = 2 y Prioridad 𝑇𝑒𝑐ℎ𝑜(𝑌) = 1
esto ya que la tarea más alta que usa X es la 2 y la
más alta que usa Y es 1
• Para la tarea de prioridad más baja 𝑩𝒏 = 𝟎, ya que no puede ser bloqueada por tareas
de prioridad inferior.
• Para el resto de tareas es está ecuación:
𝑅𝑖
𝑅𝑖 = 𝐶𝑖 + 𝑩𝒊 + ∑ ⌈ ⌉ · 𝐶𝑗
𝑇𝑗
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-7568767