カスタム順序設定ルールの作成
順序設定ルールの論理
独自の負荷ランク関数を作成する前に、順序設定ルールによる要求の処理方法を理解しておく必要があります。負荷が要求をキューに入れる、負荷ランク関数によって、その要求にランク値が与えられます。ランク値が変更されることはありません。
たとえば、順序設定ルールで納期までの残時間に基づき要求がランク付けされるとします。1 p.m.納期が 4 p.m. の負荷。今日は要求をキューに入れ、ランク値は 3 です.3 p.m。本日、5 p.m. に納期がある負荷今日は要求をキューに入れ、ランク値 2 を受け取ります.これらの値は、キュー内の要求のみであるものとします。これらの要求の 1 つが 3:30 に満たされたとします。満たされた要求は、ランク値が 2 の要求です。しかし、この要求は、納期までに 1.5 時間あり、ランク値 3 の要求は納期までに 0.5 時間しかありません。
要求は、内部リストでランク付けけされます。このリストはランク値に基づき低から高へキューを表します。この順序は、ランク値を -1 で掛けることにより、カスタム論理で逆にすることができます。たとえば、最新作業の最長処理時間に基づき負荷をランク付けするには、ランク関数は、最新作業の負荷の処理時間のマイナスの値を返します。
関数の命名
カスタム負荷ランク関数には、ユーザによる呼び出し可能な標準の関数名 以外の任意の名前を付けることができます。
引数
#include "factor.h"
double myrule(ldp, atrib)
LOAD *ldp; /* pointer to the load. */
ATTRIBUTE *atr; /* pointer to attribute, if any, to base ranking on. */
関数は、2 つの引数を次の順序で受け入れる必要があります。
- 負荷(区分: LOAD*)。
- 属性(区分: 属性:
戻り値
関数は、負荷の要求のランク値である値 (区分: double) を返す必要があります。
次は、最小動的スラック (納期までの最小残時間から残処理時間を差し引いた値) に基づき負荷の順序を決める負荷ランク関数の例です。
double sqrl (LOAD *ldp, ATTRIBUTE *atr)
/*-----------------------------------------------------------------
Ranking function to cause loads to be ranked on a least dynamic
slack basis.
ARGS:
ldp - pointer to load for which to evaluate the ranking code
RETURNS: load ranking value
-----------------------------------------------------------------*/
{
double rt, lt;
int rn;
rt = sermot(ldp, &rn, <);
return(ldp->loordp->ordudt - DATENOW - rt);
}
カスタム関数のインストール
カスタム関数をスケジューラで使用できるようにするには、sedfrk 関数を呼び出すことにより、ucini1 初期化関数からインストールする必要があります。Sedfrk には、次の順序の 2 つの引数があります。
- ランク関数にカスタム論理が含まれている順序設定ルールの番号。
- 負荷ランク関数のアドレス。
たとえば、上記のルール例「sqrl」をルール位置 39 にインストールするには、以下のようにします。
sedfrk (39, sqrl);