Escribir reglas de selección personalizadas

El programador utiliza reglas de selección para secuenciar la cola de solicitudes cuando elimina solicitudes de la cola (cuando un recurso pasa a estar disponible).
Nota:  Consulte Escribir una regla de programador personalizada para obtener un resumen de los pasos necesarios para crear reglas personalizadas. Para obtener más detalles acerca de las funciones descritas en este tema, consulte la Guía de personalización de la programación, disponible para su descarga en nuestra página de asistencia.

Lógica de la regla de selección

Antes de crear reglas de selección personalizadas y escribir las correspondientes funciones, debe comprender la lógica que utiliza la función en cuestión. Cuando un recurso pasa a estar disponible, se invoca la función de selección. Las colas de solicitud se encuentran en listas internas del respectivo recurso que secuencia inicialmente la regla de secuencia.

Cuando se invoca la función, vuelve a organizar esta lista y devuelve el número máximo de solicitudes que se van a tener en cuenta en el proceso de asignación. Si se ordena la lista completa, devuelve el tamaño de la lista. Por tanto, si el número de solicitudes devueltas es menor que el tamaño de la lista, la lista ordenada para asignación podría ser solo parte de la cola de solicitudes.

El proceso de asignación comienza con un intento de reiniciar la operación de la primera solicitud de la lista ordenada para asignación, que requiere el número de unidades disponibles o un valor inferior. Si falla el proceso de asignación, se considera la siguiente solicitud de la lista ordenada para el número de unidades disponibles o un valor inferior. Se consideran solicitudes sucesivas en la lista ordenada para asignación hasta que se hayan asignado las unidades disponibles o se llegue al final de la lista. Si existen unidades disponibles tras considerar la última solicitud, estas quedarán inactivas.

Denominar la función

La función de selección personalizada puede tener cualquier nombre que no sea un nombre de función estándar invocable por el usuario.

Arguments


#include "factor.h"
int myrule(rp)
RESRC *rp;   /* pointer to the resource */

La función de selección acepta como su único argumento un indicador al componente para el que esté realizando la selección, que es un recurso (Type: RESRC *).

Valor de devolución

La función devuelve un valor (Type: int) que es el número máximo de solicitudes que se van a procesar.

A continuación presentamos un ejemplo de una función de selección de recursos en función de una configuración mínima:


int slrl (RESRC *rp)
/*-----------------------------------------------------------------
     Selection function to process a resource request list by using
     the minimum setup time for this resource on the first downstream
     setup operation for each load.  Loads that have no downstream setup
 operation are assumed to have a setup time of zero.
     NOTES:
     * The estimate flag is set to false for jscmsu so that it will
       use the current conditions to find the setup time.  Since the
       operation could be downstream, there is no guarantee that the
       current conditions for the resource in question will still
       be appropriate when the setup actually occurs.  Therefore,
       this rule should only be used when the structure of the model
       guarantees that the conditions for the downstream resource
       will be constant till the setup occurs.
     ARGS:
       rp - pointer to resource to resequence
     RETURNS: number of requests in the request list
-----------------------------------------------------------------*/
{
     RREQ *rq;
     JOBSTEP *jsp;
     int i;
     for ( rq = (RREQ *) csfsls(rp->rsrqls);
           rq != NULL;
           rq = (RREQ *) csnxls((CSENTITY *) rq) )
     {
         /* Find first downstream setup operation.  */
         for ( jsp = rq->rrload->lojspt, i = 0;
               jsp != NULL && jsp->jstype != 4 &&
               jsp->jstype != 13 && jsp-jstype != 19 && i &LT 1000;
               jsp = jsp->jspnxt, i++);
         /* Compute setup time (zero if no setup operation).  */
         if (jsp == NULL || i >= 1000)
         {
             rq->rrprio = 0.0;
         }
         else
         {
            /* Place a tag for the resource.  This allows the step
               time to be computed properly for the downstream
               operation assuming that the load allocates the
               resource before any other load.  */
            dumrtag->rtrsrc = rp;
             cspols(rq->rrload->lorsls, (CSENTITY *) dumrtag, CSLIFO, NULL);
            rq->rrprio = jscmsu(0, rq->rrload, jsp);
            csgpls(rq->rrload->lorsls, (CSENTITY *) dumrtag);
         }
     }
     /*Sort list based on rankings.*/
     cssols (rp->rsrqls, serqor);
     /*return number in list*/
     return (csszls(rp->rsrqls));
}

Instalación de la función personalizada

Para poner la función de selección de recursos personalizada a disponibilidad del programador, debe "instalarla" desde ucini1 invocando a la función sedfsl. Esta función tiene dos argumentos en el siguiente orden:

  • El número de la regla de selección para la que la función contiene lógica personalizada.
  • La dirección de la función de selección.

Por ejemplo, para instalar la regla del ejemplo anterior "slrl" en la posición de regla 39:


sedfsl (39, slrl);

Si utiliza una de las reglas de selección "dinámicas" proporcionadas, el sistema ignorará la regla de secuencia y usará Primero Entra Primero Sale (PEPS). Si escribe una regla de selección dinámica, también debe emular el sistema y formar el uso de PEPS. Para ello, invoque la función setosq en la lista de solicitudes aplicable.