1. Concetti di base introdotti in NIL
1.1 Scopo di NIL
I due obiettivi principali di NIL sono:
-
descrivere l'ambiente in cui un programma viene eseguito (il suo complemento ); ciò comporta la descrizione di:
- formati dei dati e strutture di dati
- scambi con i dispositivi di ingresso e di uscita e caratteristiche attese da essi
- interfaccia con il sistema operativo
-
esprimere la parte front-end di un sistema interattivo:
Il flusso di dati attraverso un sistema interattivo generalmente diminuisce man mano che i dati raggiungono il nucleo del sistema: si assume che in molti sistemi interattivi esista, o si possa definire, un modulo separabile che comporta una grande quantità di dati scambiati con l'utente e molti meno scambiati con il resto del sistema. Questo modulo è chiamato front-end. È importante che il tempo di risposta del sistema sia influenzato il meno possibile da ritardi di trasmissione aggiuntivi. Inoltre, è auspicabile mantenere i flussi di dati sulla rete i più bassi possibile.
Si assume che il trasferimento di un front-end non implichi la risoluzione dell'intero problema della trasferibilità dei programmi.
1.2 Suddivisione di NIL
Come osservato da S. Volansky [ ], è conveniente dividere i linguaggi in diversi sottolinguaggi corrispondenti alle loro funzioni principali. NIL è quindi suddiviso in:
- un sottolinguaggio di controllo
- un sottolinguaggio delle operazioni
- un sottolinguaggio di dichiarazione dei dati
- un sottolinguaggio di ambiente
1.2.1 Sottolinguaggio di controllo
Il sottolinguaggio di controllo stabilisce QUANDO viene eseguito un calcolo: descrive il flusso di controllo, ovvero l'ordinamento dei calcoli. Con alcune informazioni contenute nelle altre sezioni del linguaggio, stabilisce anche DOVE i calcoli devono essere eseguiti.
Poiché una rete di calcolatori introduce connessioni lasche tra diversi sistemi, il linguaggio di controllo della macchina di rete dovrebbe essere in grado,in una versione elaborata,di assegnare i calcoli ai processori disponibili, tenendo conto dei ritardi temporali e dei problemi di allocazione delle risorse coinvolti. Non è nostra intenzione considerare questo livello per il momento.
1.2.2 Sottolinguaggio delle operazioni
Il sottolinguaggio delle operazioni descrive le operazioni da eseguire sui dati senza indicare la sequenza tra le operazioni; risponde alla domanda di COME viene eseguita un'operazione. Le operazioni sono suddivise in due gruppi.
- un gruppo di calcolo
- un gruppo di manipolazione dei dati
Quest'ultimo è la parte più importante di NIL, poiché il suo scopo principale è la trasformazione di strutture e schemi di dati.
1.2.3 Sottolinguaggio di dichiarazione dei dati
Il sottolinguaggio di dichiarazione dei dati è necessario per dichiarare le variabili e le strutture di dati su cui vengono eseguite le operazioni.
È data la possibilità di costruire strutture di elementi atomici chiamati perle. NIL fornisce un insieme standard di perle usato nella «modalità standard» ; nella «modalità estesa» un utente può definire nuove perle e nuove strutture composte da esse.
1.2.4 Sottolinguaggio di ambiente
Il sottolinguaggio di ambiente esprime il contesto in cui un programma si aspetta di operare; caratteristiche attese delle periferiche, semantica degli scambi con il mondo esterno attraverso un particolare sistema operativo.
Pertanto un «descrittore di programma» completo conterrà quattro sezioni distinte:
- sezione di ambiente
- sezione di dichiarazione dei dati
- sezione di controllo
- sezione delle operazioni
La sezione di identificazione è omessa perché corrisponde alla parte di login e di acquisizione dei socket della procedura di inizializzazione.
1.3 La macchina di rete
Un concetto fondamentale di NIL è quello di un'astratta macchina di rete, che ha le seguenti caratteristiche:
-
una memoria infinita: in questa macchina non esiste alcun problema di allocazione della memoria o di garbage collection. Ma poiché un elemento deve essere accessibile, deve comunque avere un indirizzo.
-
lunghezza di parola variabile: una parola può essere considerata come il più piccolo elemento di dati intelligibile e indirizzabile. L'elemento atomico chiamato perla è di fatto la parola macchina. La struttura e la lunghezza di ciascun tipo di perla sono espresse nel sottolinguaggio di definizione dei dati.
Come mostrato nella figura 1.3.1, un HOST comunica soltanto con una macchina di rete, che può operare in due modalità.
Network
+--------+ Machine
| HOST | <----------------------------------(
+--------+
Figura 1.3.1
-
modalità standard, in cui le perle, le loro strutture,e le trasformazioni consentite su di esse sono standard e non devono essere ridefinite: le perle e le strutture standard sono note a ogni HOST
-
modalità estesa, in cui, in aggiunta o in sostituzione delle definizioni e delle manipolazioni standard dei dati, un HOST può specificare nuove strutture di perle e nuove trasformazioni. La modalità estesa consente all'utente di definire la propria macchina come macchina di rete. Ciò equivale allora alle modalità MY LOCAL, YOUR LOCAL, proposte nella RFC #42 da Ancona. Se la definizione di un nome non è stata alterata, si assume la definizione standard.
Il sottolinguaggio di definizione dei dati è usato anche allo scopo di documentare l'insieme delle perle standard.
L'insieme di istruzioni della macchina di rete si colloca a un livello alto, che consente trasformazioni globali delle strutture di dati.
L'ambiente della macchina di rete è determinato dal sottoinsieme dell'ambiente dell'HOST del server che è utilizzato dal programma in esecuzione; il sistema HOST-macchina di rete può assumere due configurazioni principali, mostrate nella figura 1.3.2.
+----------+ / Network
| user | <------------------( Machine
| HOST | \ (server)
+----------+
Network +------------+
Machine (user) ---------------( | server |
| HOST |
+------------+
-
La macchina di rete funge da utente di un programma fornito dall'HOST (HOST server)
-
La macchina HOST è l'utente di un programma fornito dalla macchina di rete.
La macchina server assegna il proprio ambiente hardware alla macchina utente. Questa scelta è fatta affinché i programmi possano essere usati a distanza senza essere modificati; spetta all'utente di un programma remoto adattare sé stesso e il proprio ambiente.
Pertanto, quando la macchina di rete è il server, essa definisce le sezioni di definizione dei dati e di ambiente.
Figura 1.3.2
1.4 Implementazione
I sottolinguaggi di definizione dei dati e dell'ambiente dovrebbero essere in grado di descrivere sia l'ambiente e i dati negli HOST sia i dati nella macchina di rete. Al limite, dovrebbero consentire a due programmi scritti in linguaggi diversi di comunicare, purché le rappresentazioni dei dati che usano siano esprimibili nel sottolinguaggio di descrizione dei dati.
In ogni HOST sarà implementato un «generatore» che accetterà regole che descrivono le strutture di dati e l'ambiente dell'HOST e genererà un traduttore adeguato per tradurli nel formato della macchina di rete, come mostrato nella figura 1.4.1.
HOST description Network Machine
(description
non standard mode) +---------------------+
| Network Machine |
| standard mode |
+---------------------+
| |
v |
+-------------+ |
| GENERATOR | |
+-------------+ |
| |
v |
Data in +--------------+ Data is |
HOST | TRANSLATOR | Network Machine |
format +--------------+ format |
| |
+-------------------------------------------------+
Figura 1.4.1
Una volta stabiliti gli standard della macchina di rete, sembra utile pensare di emulare il traduttore mediante un'unità microprogrammata che verrebbe aggiunta all'Host o piuttosto all'IMP" evitando così il carico di una traduzione che può comportare lunghe operazioni a livello di bit - (figura 1.4.2.)
+--------+ +--------+ / Network
| HOST | <----------| HOST | <-------------( Machine
+--------+ +--------+ \
Figura 1.4.2