Estoy desarrollando un programador para un sistema integrado. Este planificador llamará a cada proceso cada X milisegundos; esta vez se puede configurar por separado para cada proceso, por supuesto.Cómo distribuir procesos a lo largo del tiempo obteniendo el número mínimo de "colisiones"
Todo está codificado y llama a cada proceso como debería; el problema que estoy enfrentando es la siguiente: Imagínese me puse 4 procesos que se llamará cada 10, 15, 5 y 30 milisegundos respectivamente:
A: 10ms
B: 15ms
C: 5ms
D: 30ms
El resultado de llamar con el tiempo será:
A |
A B A B |
C C C C C C C | processes being called
D |
----------------------------------
0 5 10 15 20 25 30 35... ms
El problema es que cuando se alcanzan los 30 ms, todos los procesos se convocan en el mismo momento (uno tras otro) y esto puede retrasar la ejecución correcta desde aquí.
Esto se puede resolver agregando un retraso a cada proceso (pero preservando su frecuencia de llamada), por lo que las frecuencias dejan de ser múltiplos entre sí. Mi problema es que no sé cómo calcular el retraso para aplicar a cada proceso, por lo que se minimiza el número de colisiones.
¿Hay algún algoritmo conocido para esto o alguna guía matemática?
Gracias.
El intervalo entre las colisiones entre dos procesos será el LCM de sus intervalos. Entonces tendrá colisiones mínimas cuando todos sus intervalos sean relativamente primos entre sí. –