2.2 Advanced QoS support
2.2.2 Intserv
La creación de listas de submodelos o listas de fórmulas a ejecutar es una de las partes más importantes del servicio FLAG. Éstas se concibieron con el fin de agilizar la lectura de fórmulas a la hora de la ejecución. Teniendo en cuenta que el servicio consta de mantener informado al cliente que hace uso de variables del mundo real proporcionadas por FLAG y hacerlo de forma correcta y en tiempo real, es imperativo que las ejecuciones sean lo más eficientes posibles. Esto se logra con las listas de fórmulas a ejecutar para cada VMR, es decir, las que son afectadas por esta VMR cuando ha cambiado. Aparte de reducir la cantidad de fórmulas que se ejecutan, la aditividad aporta más eficiencia al cálculo de cada fórmula, como se verá más adelante.
Tabla 33. Lista de fórmulas por submodelo
Campo Tipo Descripción
Número de la variable Entero VMR de este submodelo Número de la variable (para el
cliente) Entero Número con el que el cliente conoce e esta VMR Cantidad de fórmulas en el
submodelo Entero
Posición de la lista Entero Apuntador a la ubicación en el arreglo de listas de fórmulas Tabla 34. Estructura índice de submodelos
Campo Tipo Descripción
Número de variable Entero Una variable con fórmula, obviamente Posición de su fórmula Entero Apunta a la ubicación de esta fórmula en la parte 3 del archivo
Hija Entero
Variable que invocó la ejecución de esta fórmula (si dicha variable es un operando aditivo)
Nivel Entero Nivel de la fórmula
La parte 4 es un arreglo tipo índice, semejante al de la lista de variables ordenadas en la parte 2, pero ahora con la estructura de la Tabla 34. La parte 5 del archivo es un arreglo de arreglos de la estructura de la Tabla 33, donde cada sub arreglo se refiere a una lista de fórmulas.
La definición de un submodelo es la posición en la que, una variable o sinónimo, se encuentra en el modelo. Por ejemplo, una variable con submodelo 2251 está en la fórmula de la variable cuyo submodelo es 225 y ésta forma parte de la de submodelo 22. Este es el camino que se sigue para generar la lista de variables con fórmula que son afectadas por el cambio de una VMR.
Pero ocurre que la VMR con submodelo 2251, por ejemplo, puede tener varios sinónimos con otros submodelos diferentes al de la variable. Para cada uno de ellos se efectúa el proceso anterior buscando, en orden ascendente, las variables
del modelo que son afectadas por el cambio. Pero el proceso no acaba ahí porque las variables con fórmula que son afectadas también pueden tener sinónimos y, por consecuencia, otro submodelo y otras variables que también son afectadas. La rutina encargada de este proceso lo hace de forma recursiva, primero las variables afectadas y después lo mismo para cada sinónimo de cada variable afectada, iniciando con la VMR en cuestión.
Cuando se leen las listas como parte de un proceso de ejecución del submodelo, las variables ya están ordenadas por nivel, de modo solamente debe ubicar la lista (por su apuntador en el arreglo de submodelos) y ejecutar cada fórmula en el orden especificado.
El proceso comienza leyendo las VMR que hay en el modelo, eligiendo únicamente las que están en por lo menos una fórmula como operando. Las VMR con dad igual a cero se descartan (en general no habrá tales, pero un cliente
puede decidir incluir una tal variable simplemente para conocer su valor, sin que éste afecte otras variables del modelo).
Esta información ya está en el arreglo de estructuras de variables que se usó en los procesos anteriores, es decir, la información de los dads, niveles y posición de
las fórmulas ya está disponible y puede ser usada en este proceso. La cantidad de fórmulas y la posición se inicializan en cero.
Tabla 35. Estructura “dads de los sinónimos”
Campo Tipo Descripción
Número de variable Entero Variable con fórmula a la que hace referencia Nivel Entero Nivel de la fórmula
Formula to dad Byte Aditividad del sinónimo
Posición de la fórmula Entero Posición en la que fue guardada esta fórmula
La estructura “dads de sus sinónimos” de la Tabla 35, se maneja como un arreglo temporal, donde se irán almacenando las variables en cuyas fórmulas aparecen los sinónimos de cada variable afectada por el cambio de la VMR.
El procedimiento que genera estas listas de fórmulas es el siguiente:
1. Se lee la variable compuesta de las VMR, que está en memoria, para determinar una por una las VMR para las que se debe construir una lista. Aquí se llena la lista índice de variables, que es la parte 4 del archivo.
2. Para cada VMR se buscan sus sinónimos en el modelo mediante una rutina específica para ello. En el arreglo “dads de los sinónimos”, a excepción de la posición 0, se guardan las variables que contienen en sus fórmulas a estos
sinónimos. En la primera se guarda el dad de la variable original con sus correspondientes datos: nivel, aditividad y posición de la fórmula.
3. Para cada variable del arreglo de sinónimos se hace lo siguiente:
a. Se agrega la variable con fórmula de la posición 0 a la lista de fórmulas de la actual VMR (del tipo de la Tabla 33).
b. Se determina el valor del campo “Hija”. Esto se determina dependiendo si la actual VMR es o no aditiva en la fórmula. Si aparece sumando se guarda la variable hija con signo positivo; si está restando a la fórmula, se guarda con signo negativo; y si no es aditivo tendrá valor 0. En este primer paso la hija siempre es una VMR.
c. Se procesan todos los dads afectados por la VMR, es decir, el de la original y los de sus sinónimos.
d. A continuación se ejecuta la rutina recursiva. Ésta recibe como parámetro a la variable que debe ser procesada (un dad de los anteriores mencionados). Se buscan sus sinónimos con la misma rutina de antes y se guardan en otro arreglo de tipo “dads de los sinónimos”. Igual que antes, en la posición 0 se almacena la variable de la fórmula que contiene a la original. El proceso siguiente es el mismo para cada uno de estos nuevos dads:
i. Se agrega la variable con fórmula de la posición 0 a la lista de fórmulas de la actual VMR (del tipo de la Tabla 33).
ii. Se determina el campo “Hija”. Este parámetro es la variable que entró en la rutina recursiva como “dad que se procesa”.
iii. Se determina su aditividad, dependiendo del valor guardado en “fórmula to dad” en su respectiva variable compuesta. De la misma manera que antes, se agrega un signo “+” o un “-” al valor de la variable hija.
iv. Si la variable ya existe en la lista de fórmulas a ejecutar, no se agrega a la lista y la aditividad tampoco tiene efecto en la ejecución de esa variable (si tenía una indicación de aditividad, es decir, hija no es cero, se quita esta indicación). Si no existe en el arreglo, se la agrega pero en el orden indicado por el nivel, y se determina la hija que lo invocó, si aplica. En este paso la variable hija es siempre una del cliente. v. Se procesan los dads de los sinónimos que se obtuvieron de la
variable que llegó como hija en la rutina recursiva. La rutina que procesa a cada uno de éstos es la que se está usando actualmente, esta es la parte en que se llama a sí misma. Se manda como valor del parámetro cada uno de los dads de los sinónimos y se vuelve a hacer el proceso desde el paso C.
Un programa recursivo, si no se tiene cuidado, puede convertirse en un proceso infinito. Para este caso la sentencia que define el término del proceso es cuando, en la rutina recursiva, se recibe como hija el valor 0. Esto quiere decir, hasta que una variable procesada tenga como dad el valor de 0, por ser variable de arriba.
Sin embargo, aún están los dads de sus sinónimos que continuarían la ejecución. El proceso completo termina hasta que la última variable, la de arriba, ya no tiene sinónimos.
De esta manera se han creado listas de fórmulas, una para cada VMR del modelo del cliente. Lo siguiente es almacenar la información obtenida al archivo de fórmulas, primero la lista índice de submodelos y después, cada una de las listas.