II. Ambito dell'organizzazione software.
Il sistema si basa su due programmi principali: il programma Handler, che pilota l'unità hardware di canale, e il programma Network, che esegue le richieste di trasmissione dell'utente.
Poiché la comunicazione è full duplex, ciascuno di questi programmi può essere visto come diviso in due parti: una si occupa dei dati in uscita, l'altra di quelli in entrata. (Vedi Fig. 1)
Questi due programmi si scambiano dati attraverso un pool di buffer e informazioni logiche attraverso una tabella di interfaccia.
Nel seguito ci concentriamo solo sulla parte in uscita di ciascun programma (Vedi Fig. 2). La parte in entrata sarebbe molto simile.
II-1. Il programma di rete.
II-1-1. Funzione di multiplazione.
Questo programma multipla i messaggi in uscita (e distribuisce i messaggi in entrata). La multiplazione consiste nell'accodare tutte le richieste dell'utente (o del chiamante, o della parte) e nel riempire il pool di buffer in modo da tenere occupato l'handler nell'emissione.
La multiplazione (e la distribuzione) si basa sui numeri di identificazione del link. (Link = connessione logica tra due utenti). Il problema della multiplazione è strettamente legato all'interfaccia tra il programma di un utente e il programma di rete, che è in realtà...(unreadable) sistema operativo (Vedi oltre: Domande).
II-1-2. Elaborazione dei messaggi in uscita.
Quando il programma di un utente vuole inviare del testo, deve indicare le seguenti informazioni (tramite una macro, o come parametri di chiamata): posizione del testo, lunghezza del testo in byte e destinazione.
Utilizzando questi dati, il programma Network:
-
prepara un'intestazione Host a 16 bit (1 bit: traccia, 2 bit: riservati, 8 bit: numero di identificazione del link, 5 bit: host di destinazione)
-
inserisce una marcatura di 16 bit tra l'intestazione e il testo in modo da far iniziare il testo su un confine di parola. Questa marcatura è costituita da un uno che precede il primo bit del testo e che è a sua volta preceduto da quindici zeri per riempire lo spazio.
-
controlla la lunghezza del testo dell'utente - se supera i 1006 byte
+- -+
|8080 (max host message length) - 32 (heading + marking)|
|-------------------------------------------------------|
| 8 (byte = 8 bits) |
+- -+
il programma suddivide il testo in una sequenza di messaggi la cui lunghezza massima è di 1006 byte - Ciascuno di questi messaggi è preceduto da un'intestazione come spiegato sopra.
Nota: in tal caso uno dei bit liberi dell'intestazione potrebbe essere utilizzato per indicare che più messaggi appartengono allo stesso testo.
-
transcodifica i caratteri EBCDIC che costituiscono i messaggi in caratteri ASCII.
-
riempie i buffer del pool con il contenuto dei messaggi.
-
aggiorna il contenuto della tabella di interfaccia e sposta i puntatori di riempimento (vedi sotto).
II-2. Il programma handler.
Questo programma è avviato o dal programma di rete, o dall'interruzione di I/O.
Questo programma sarà molto breve. Sarà codificato in modalità master (istruzioni privilegiate) e dovrebbe essere integrato nel supervisore di I/O del sistema operativo.
Questo programma:
-
controlla l'unità hardware di canale. Avvia l'emissione, fornisce eventualmente il concatenamento dei dati tra i buffer, verifica i diversi stati del dispositivo al ricevimento di un'interruzione.
-
svuota i buffer che sono riempiti dal programma di rete.
-
esplora e aggiorna la tabella di interfaccia (vedi sotto).
-
può eventualmente assicurare una procedura di trasmissione di controllo con l'IMP (Vedi Domande).
II-3 Buffer e tabella di interfaccia.
II-3-1 Buffer.
Dovrebbero essere abbastanza grandi da contenere il testo massimo del messaggio host + intestazione e marcatura (1006 + 4 = 1010 byte).
Di conseguenza la dimensione del buffer potrebbe essere scelta pari a 256 parole (1024 byte). Quanto al numero di buffer, esso determinerà la frequenza di utilizzazione del link -
II-3-2 Tabella di interfaccia.
È attraverso questa tabella che il programma di rete informa l'handler della posizione e della lunghezza dei dati da emettere.
Questa tabella potrebbe essere una tabella ad anello con 2 puntatori: uno per il riempimento, l'altro per l'estrazione. Essi sono aggiornati rispettivamente dal programma di rete e dal programma handler.
[Length] of the message
contained
in the buffer
^
|
+--------------+----------+
| Buffer addr. | nb bytes |
+--------------+----------+
| | | <== Filling pointer
+--------------+----------+ |
| | V
| |
// //
| |
| |
| |
+--------------+----------+
| Buffer addr. | nb bytes | <== eEtracting pointer
+--------------+----------+ |
| Buffer addr. | nb bytes | V
+--------------+----------+