TEMA 4 Ejecutivos cíclicos 1 Modelo de tareas Consideraremos inicialmente un modelo de tareas simple: Conjunto de tareas estático Todas las tareas son periódicas Las tareas son independientes entre sí Se conoce el tiempo de ejecución máximo de cada tarea C i Cada tarea tiene un plazo de respuesta D i ≤ T i Después veremos como incorporar tareas esporádicas 2 1 Plan principal Ejecutivo cíclico: estructura de control o programa cíclico que entrelaza de forma explícita la ejecución de diversos procesos periódicos en un único procesador. El entrelazado es fijo y está definido en el denominado plan principal que es construido antes de poner en marcha el sistema Plan principal: especificación del entrelazado de varios procesos periódicos durante un período de tiempo (ciclo principal) de tal forma que su ejecución cíclica garantiza el cumplimiento de los plazos de los procesos La duración del ciclo principal es igual al mínimo común múltiplo de los períodos de los procesos M = mcm (Ti) se supone tiempo entero (p.e. número de ticks) el comportamiento temporal del sistema se repite cada ciclo principal 3 Planes secundarios Cada plan principal es dividido en uno o más planes secundarios o marcos (“frames”) que se ejecutarán de forma secuencial. Cada comienzo/fin de un marco en el ejecutivo cíclico se sincroniza con el reloj. Son puntos donde se fuerza la corrección del tiempo real. Por simplicidad, en la práctica, la duración de todos los marcos es la misma. A esta duración se le denomina ciclo secundario. Si las acciones definidas en un marco acaban antes de que concluya el ciclo secundario el ejecutivo cíclico espera (p.e. en un WAI) Si las acciones definidas en un marco no han acabado al terminar el ciclo secundario, se produce un error: desbordamiento de marco. Si la duración de una acción es superior al ciclo secundario debe ser descompuesta en subacciones 4 2 Ejemplo Tarea A B C D E T 25 25 50 50 100 D 25 25 50 50 100 C 10 8 5 4 2 • Ciclo principal: 100 ticks • Ciclo secundario: 25 ticks M = 100 ticks m = 25 ticks A B 0 C A B 25 A DE 50 B C A B 75 D 100 5 Ejemplo Ejecutivo cíclico: void Ejecutivo_Ciclico(void) { unsigned int m = 25 ; unsigned int siguiente ; int marco = 0, num_marcos = 4 ; siguiente = Get_Time () ; while(1) { marco = (marco % num_marcos)+1 ; switch (marco) { case 1: A; B; C; break ; case 2: A; B; D; E; break ; case 3: A; B; C; break ; case 4: A; B; D; break ; } siguiente += m ; delay_until(siguiente) ; } } 6 3 Propiedades No hay concurrencia en la ejecución Cada ciclo secundario es una secuencia de llamadas a procedimientos No se necesita un núcleo de ejecución multitarea Los procedimientos pueden compartir datos No se necesitan mecanismos de exclusión mutua como los semáforos o monitores 7 Determinación de los ciclos Sea un conjunto de procesos periódicos {Pi / i = 1..n}, con requisitos temporales representados por ternas (Ci, Ti, Di). Ciclo principal: M = mcm (Ti) Ciclo secundario m ≤ min(Di) m ≥ max(Ci) ∃k: M = km ∀i: m+ (m - mcd(m,Ti)) ≤ Di garantiza que entre el instante de activación de cada proceso y su plazo límite exista un marco o ciclo secundario completo m - mcd(m,Ti) es el retraso máximo entre la activación de un proceso y el comienzo del siguiente marco esta condición incluye a la primera 8 4 Ejemplo Considérese tres procesos P E F G T 14 20 22 D 14 20 22 Ciclo principal C 1 2 3 M = mcm(14,20,22) = 1540 Ciclo secundario m ≤ min(14,20,22) => m = 1..14 m ≥ max(1,2,3) => m = 3..14 ∃k: 1540 = km => m = 4,5,7,10,11,14 m+ (m - mcd(m,Ti)) ≤ Di => m = 4,5,7 9 Ejemplo para m = 4 i 1 2 3 Ti 14 20 22 mcd(m,Ti) 2 4 2 14 6 retraso 2 0 2 20 4 m+retraso 6 4 6 < < < Di 14 20 22 22 6 m=4 E F G 10 5 Ejemplo para m = 10 i 1 Ti 14 mcd(m,Ti) 2 retraso 8 m+retraso 18 > Di 14 NO 18 14 m = 10 E 0 14 28 42 56 F G 11 Inclusión de procesos periódicos En cada ciclo principal se tienen ncs = M/m ciclos secundarios En cada plan principal se tienen nei = M/Ti ejecuciones de cada proceso Pi Hay que definir la secuencia de procesos de cada marco: σx:{Pik,Pjl,..,Prs} La ejecución k-ésima de un proceso Pi caracterizado por ternas (Ci, Ti, Di) podrá ser incluida en los marcos j-ésimos que comienzan después de la activación de Pik y terminan antes del deadline de Pik: (k − 1)Ti ≤ ( j − 1)m jm ≤ (k −1)Ti + Di Para que la ejecución k-ésima de Pi pueda ser incluida en la secuencia de procesos σx del marco x, debe quedar suficiente tiempo libre en el marco: C ≤ m − ∑C i l ∀l,Pl ∈σ x 12 6 Planificación Objetivo: asignación de procesos (o subprocesos) a los marcos de forma que se cumplan los requisitos temporales Planteamiento: búsqueda en el espacio de estados Estado: asignación parcial Algoritmo: búsqueda en profundidad con retroceso se pretende encontrar una única solución Guiado de la búsqueda: heurísticas sobre el siguiente proceso a asignar primero el más urgente o el más frecuente primero el de tiempo de proceso más grande si varios marcos cumplen las condiciones: el primer marco que cumpla las condiciones el marco con menor tiempo de cómputo libre 13 Ejemplo: planificación Conjunto de procesos a planificar: Proceso P1 P2 P3 P4 C 2 3 1 2 T 8 8 6 12 D 8 8 6 12 Ciclo principal: M = mcm(6,8,12) = 24 Número de ejecuciones a planificar ne1 = M/8 = 3 ne2 = M/8 = 3 ne3 = M/6 = 4 ne4 = M/12 = 2 14 7 Ejemplo: planificación Ciclo secundario m ≤ min(6,8,12) => m = 1..6 m ≥ max(1,2,3) => m = 3..6 ∃k: 24 = km => m = 3,4,6 m+ (m - mcd(m,Ti)) ≤ Di => m = 3,4 posibles_m = {4,3} 15 Ejemplo: planificación Ordenación procesos: primero el más urgente Proceso P1 P2 P3 P4 C 1 3 2 2 T 6 8 8 12 D 6 8 8 12 n 4 3 3 2 Se intenta planificar primero para m=4 (la complejidad del problema disminuye con el número de marcos) Un planificación consta de 6 marcos consecutivos 16 8 Ejemplo: planificación Pik puede ir en el marco j si: (k − 1)Ti ≤ ( j − 1)m jm ≤ (k −1)Ti + Di P11 P12 P13 P14 P1 0 4 8 12 P21 16 20 P22 24 P23 P2 0 4 8 12 P31 16 20 P32 24 P33 P3 0 4 8 12 16 20 24 20 24 P42 P41 P4 0 4 8 12 16 17 Ejemplo: planificación 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 1 3 3 2 1 2 1 2 1 1 3 2 3 2 1 2 1 3 1 3 1 1 2 1 1 3 2 3 2 1 1 2 3 2 1 1 2 1 3 2 1 1 1 1 1 2 1 1 2 2 2 2 3 1 2 3 2 3 3 3 1 2 1 2 3 1 1 4 2 3 3 1 4 18 2 9 Partición de procesos Hay casos en que un conjunto de procesos que no es planificable: Si el tiempo de cómputo de uno es mayor que el plazo de algún otro: Ci > Dk => No existe valor de m que cumpla a la vez: m ≤ min(Di) m ≥ max(Ci) Si para una ejecución de un proceso no queda ningún marco con suficiente tiempo libre Solución: descomponer el proceso demasiado largo Pi=(Ci,Ti,Di) en varios subprocesos Pij=(Cij,Tij,Dij): Tij=Ti ; Dij=Di Ci1+Ci2+Ci3+... = Ci no partir secciones críticas relación de precedencia en cada una de las ejecuciones a mantener en la planificación: Pi1→Pi2→Pi3→... 19 Relaciones de precedencia Sean Pi1 y Pi2 dos procesos entre los que existe una relación de precedencia Pi1→Pi2, En la ordenación de los procesos para su inclusión en la planificación se mantiene el orden de precedencia (los dos subprocesos tienen las mismas restricciones temporales) Para incluir la ejecución k-ésima de Pi2, Pi2k, en la planificación: obtener los valores {j,...,j+h} de los marcos donde puede ser incluida a partir de:(k − 1)Ti ≤ ( j − 1) m jm ≤ ( k − 1)Ti + Di Debido al orden de inclusión Pi1k ya ha sido incluida en el marco j+l ∈ {j,...,j+h}. El conjunto de marcos donde puede ser incluida se reduce a {j+l,...,j+h} A los elementos de {j+l,...,j+h} se aplica la condición Ci2 ≤ m − ∑ Cl ∀l,Pl ∈σ x 20 10 Ejemplo: partición de procesos Conjunto de procesos a planificar: Proceso P1 P2 P3 Ciclo C 2 2 8 T 6 8 24 D 6 8 20 principal M = mcm(6,8,24) = 24 Ciclo secundario m ≤ min(6,8,20) => m = 1..6 m ≥ max(2,2,8) => no hay ningún m que lo cumpla Es preciso partir el proceso P3 en varios subprocesos con tiempo de cómputo menor que 6 unidades de tiempo Partición en P31 → P32 con igual tiempo de cómputo, 4 unidades 21 Ejemplo: partición de procesos Conjunto de procesos a planificar: Proceso P1 P2 P31 P32 C 2 2 4 4 T 6 8 24 24 D 6 8 20 20 Ciclo principal M = mcm(6,8,24) = 24 Número de ejecuciones a planificar ne1 = M/6 = 4 ne2 = M/8 = 3 ne31 = M/24 = 1 ne32 = M/24 = 1 22 11 Ejemplo: partición de procesos Ciclo secundario m ≤ min(6,8,20) => m = 1..6 m ≥ max(2,2,4) => m = 4..6 ∃k: 24 = km => m = 4,6 m+ (m - mcd(m,Ti)) ≤ Di => m = 4 Unica posibilidad de planificación m=4 Ordenación de procesos: primero el más urgente manteniendo relaciones de precedencia Misma tabla anterior P1 → P2 → P31→ P32 Un planificación consta de 6 marcos consecutivos: M = 6m 23 Ejemplo: partición de procesos 1 1 1 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 2 1 2 1 1 2 1 2 31 1 1 2 1 2 31 1 2 31 1 1 2 32 1 24 2 12 Partición con secciones críticas Si es preciso partir algún proceso en subprocesos, no deben partirse las secciones críticas con objeto de preservar la exclusión mutua Ejemplo: Planificar la ejecución de los siguientes procesos: P P1 P2 P3 C 20 25 90 T 100 150 300 D 100 150 300 Dichos procesos acceden a una sección crítica común tal y como muestra el siguiente esquema: P1 15 P2 15 P3 15 5 10 20 15 40 25 Partición con secciones críticas Ciclo principal M = mcm(100,150,300) = 300 Número de ejecuciones a planificar ne1 = M/100 = 3 ; ne2 = M/150 = 2 ; ne3 = M/300 = 1 Ciclo secundario m ≤ min(100,150,300) => m = 1..100 m ≥ max(20,25,90) => m = 90..100 ∃k: 300 = km => m = 100 m+ (m - mcd(m,Ti)) ≤ Di => m = 100 Posibles valores de m = {100} Ordenación procesos: primero el más urgente Misma ordenación que en el enunciado Un planificación consta de 3 marcos consecutivos 26 13 Partición con secciones críticas No existe planificación porque no queda ningún marco donde quepa el proceso P3 Partición de P3 Tiempo sobrante en los marcos: 55, 80, 55 ms P31: primera sección crítica + segundo segmento código P32: segunda sección crítica + cuarto segmento código 1 1 1 1 1 1 2 2 27 Partición con secciones críticas Nueva especificación de procesos: P P1 P2 P31 P32 C 20 25 35 55 T 100 150 300 300 D 100 150 300 300 Ciclo principal M = mcm(100,150,300) = 300 Número de ejecuciones a planificar ne1 = M/100 = 3 ne2 = M/150 = 2 ne31 = M/300 = 1 ne32 = M/300 = 1 28 14 Partición con secciones críticas Ciclo secundario m ≤ min(100,150,300) => m = 1..100 m ≥ max(20,25,35,55) => m = 55..100 ∃k: 300 = km => m = 60,75,100 m+ (m - mcd(m,Ti)) ≤ Di => m = 60,100 Posibles valores de m = {60,100} Para m=100: 1 1 1 1 1 1 2 1 1 1 2 2 31 32 2 29 Procesos esporádicos Proceso esporádico E: atención a eventos externos aperiódicos SE : separación mínima entre eventos DE : plazo límite ( normalmente DE ≤ SE ) CE : tiempo de cómputo máximo En un ejecutivo cíclico los procesos esporádicos pueden programarse de dos formas: Por muestreo periódico del evento Por interrupción 30 15 Esporádicos por muestreo Se programa el proceso esporádico como un proceso periódico que consulta si ha llegado un evento, y en tal caso, lo procesa. Transformamos el proceso esporádico en periódico con D’ = T’ ≤ DE /2, y lo planificamos de la forma convencional Si el proceso periódico cumple sus plazos, cualquier evento se atiende en su plazo DE Proceso periódico T’ DE evento Se consulta, y no hay evento Hay evento, y se procesa CE 31 Ejemplo Conjunto de procesos a planificar: Proceso E P1 P2 T 6 12 D 8 6 12 S 20 Proceso periódico equivalente: D’ = T’= 4 ≤ DE / 2 Proceso PE P1 P2 C 1 3 2 C 1 3 2 T 4 6 12 D 4 6 12 Ciclo principal M = mcm(4,6,12) = 12 Ejecuciones a planificar: nE = M/4 = 3 ; n1 = M/6 = 2 ; n2 = M/24 = 1 32 16 Ejemplo Ciclo secundario m ≤ min(4,6,12) => m = 1..4 m ≥ max(1,2,3) => m = 3..4 ∃k: 12 = km => m = 3,4 m+ (m - mcd(m,Ti)) ≤ Di => m = 4 Plan de 3 marcos de duración m= 4 E E E E E E E E E 1 1 1 2 1 33 Esporádicos por interrupción La llegada del evento produce una interrupción, y el evento se trata inmediatamente Basta con reservar tiempo en cada marco para atender el máximo número de eventos que pueden llegar en un marco: ⎡m⎤ Cres = ⎢ ⎥C E ⎢ SE ⎥ 34 17 Ejemplo Conjunto de procesos a planificar (primero el más urgente): Proceso E P1 P2 P3 C 1 3 2 2 T 8 8 12 D 7 8 8 12 S 10 Calculamos los ciclos con los procesos periódicos Ciclo principal M = mcm(8,12) = 24 Número de ejecuciones a planificar ne2 = M/8 = 3 ne3 = M/8 = 3 ne4 = M/12 = 2 35 Ejemplo Ciclo secundario m ≤ min(8,12) => m = 1..8 m ≥ max(2,3) => m = 3..8 ∃k: 24 = km => m = 3,4,6,8 m+ (m - mcd(m,Ti)) ≤ Di => m = 3,4,8 Probamos con 3 marcos de duración m= 8 En cada uno reservamos tiempo para atender un evento: ⎡m⎤ Cres = ⎢ ⎥ CE ⎢ SE ⎥ 36 18 Ejemplo E E E E E E 1 1 1 E E E 1 1 1 2 2 2 E E E 1 1 1 2 2 2 3 3 37 Propiedades de los ejecutivos cíclicos No hay concurrencia en la ejecución Los procedimientos pueden compartir datos No hace falta usar mecanismos de exclusión mutua Los períodos deben ser armónicos Cada ciclo secundario es una secuencia de invocaciones de procedimientos Pueden ser necesario utilizar períodos más cortos de lo necesario No hace falta analizar el comportamiento temporal El sistema es correcto por construcción 38 19 Problemas de los ejecutivos cíclicos Las tareas esporádicas son difíciles de tratar El plan cíclico es difícil de construir se puede utilizar un servidor de consulta Si los períodos son de diferentes órdenes de magnitud el número de ciclos secundarios se hace muy grande puede ser necesario partir una tarea en varios procedimientos en caso más general NP-duro Es poco flexible y difícil de mantener Cada vez que se cambia una tarea hay que rehacer toda la planificación 39 20