Passa al contenuto principale

Applicazione della Form Machine ai protocolli di programma

Il Protocol Manager menzionato in NWG/RFC #80 richiede diverse caratteristiche interessanti che sono proprietà della Form Machine sopra descritta.

In certi casi, durante un dialogo di protocollo, potrebbe essere accettabile ottenere un accept sulla connessione A oppure un'allocazione sulla connessione B, cioè l'ordine talvolta non è importante. La procedura definita per applicare le regole consente l'indipendenza dall'ordine.

Un logger potrebbe inviarci un numero di socket incorporato in un messaggio regolare — il numero di socket dovrebbe essere il primo di un insieme contiguo di socket che possiamo usare per stabilire connessioni con un qualche programma. Desideriamo estrarre il campo del numero di socket dal messaggio regolare, magari convertirlo in un altro formato e sommarlo per ottenere i nomi di socket aggiuntivi. Come risultato del messaggio regolare desideriamo emettere diverse chiamate di sistema INIT che includono i numeri di socket che abbiamo calcolato. L'operatore di valore e gli operatori aritmetici della Form Machine possono farlo.

Una terza proprietà della Form Machine applicabile ai protocolli è il binding inter- e intra-regola per risolvere informazioni sensibili al contesto. In generale desideriamo che le regole siano indipendenti dall'ordine, ma in certi casi desideriamo imporre un ordinamento. Prendendo come esempio il logger in NWG/RFC #66, il close inviato dal logger può avere due significati diversi a seconda del suo contesto. Se il close viene inviato prima del messaggio regolare che contiene il numero di socket, allora significa chiamata rifiutata. Se il messaggio regolare precede il close, allora la chiamata è accettata. Poiché il close ha un significato contestuale, dobbiamo vincolarlo al messaggio regolare per evitare di introdurre IF e THEN nel linguaggio della Form Machine.

Supponiamo per un momento di poter esprimere le chiamate di sistema nella notazione della Form Machine. (La notazione riportata sotto è solo a scopo illustrativo e non fa parte del linguaggio della Form Machine.) Abbiamo due modi per vincolare il messaggio regolare al close. Con il binding intra-regola imponiamo che il close sia preceduto da un messaggio regolare.

      Reg. Msg , Close ->

Supponiamo ora per un momento che la parte remota debba ricevere un echo dopo ogni trasmissione. Poiché dobbiamo emettere un echo dopo aver ricevuto il messaggio regolare e prima che il close venga inviato, dobbiamo usare il binding inter-regola. Ciò può essere ottenuto con la variabile di programmazione. Le viene assegnato un valore quando il messaggio regolare viene ricevuto e il valore viene verificato quando il close viene ricevuto.

      Reg. Msg -> Echo , ([lambda]+1)
      Close, ([lambda]=1) ->

Per illustrare il binding inter-regola tramite la variabile di programmazione, il protocollo di connessione in NWG/RFC #66 potrebbe essere rappresentato passando la forma seguente a un protocol manager. (La notazione riportata sotto è solo a scopo illustrativo e non fa parte del linguaggio della Form Machine).

      1. ->INIT(parameters) , ([alpha]<-0)

Inviare un INIT(RTS).

      2.  INIT(parameters) -> ALLOCATE(parameters)

Inviare un allocate in risposta al completamento della connessione (un STR ricevuto).

      3.  Reg. Msg (parameters) -> ([alpha]<-1)

Quando si ricevono i messaggi che portano i numeri di collegamento, impostare un indicatore interno. (L'estrazione del collegamento non è illustrata.)

      4.  CLOSE(parameters),([alpha]=1) ->
INIT(parameters),INIT(parameters)

Quando il close viene ricevuto dopo il messaggio regolare, si verifica il [2] per accertare che il messaggio regolare sia stato ricevuto prima di stabilire la connessione duplex. Se il close viene ricevuto senza alcun messaggio regolare che lo preceda (chiamata rifiutata), la forma fallirà (poiché nessuna regola è soddisfatta).

Questo protocollo può essere gestito tramite un'unica forma contenente quattro regole di sostituzione. Abbiamo esaminato rappresentazioni simili per sequenze di protocollo più complesse. Tali sequenze di protocollo, memorizzate per nome, sono un vantaggio per l'utente; egli può richiedere che una sequenza predefinita venga eseguita automaticamente.