|
Appunti informatica |
|
Visite: 1370 | Gradito: | [ Medio appunti ] |
Leggi anche appunti:Il computer al servizio del progresso dell'umanitàIl computer al servizio del progresso dell'umanità La nostra era moderna, La codifica delle informazioniLa codifica delle informazioni Nell'elaboratore tutte le informazioni La gestione della memoriaLa gestione della memoria Quando un processo diventa Running, è necessario |
Il problema generale dell'inteRfaccia software e i livelli ISO-OSI
1. Interfaccia software con il video
Il livello 1 è il vero e proprio colloquio hardware con la porta di comunicazione
Il livello 2 è rappresentato dal codice a basso livello per la gestione diretta degli interrupt.
Esempio: Inviare la lettera 'A' sul video. spostando il cursore
REG 1,&H0E41 '0E, servizio --> AH, cod.ASCII di 'A' --> CALL INTERRUPT 16
o in ASSEMBLER
MOV AH, 0E
MOV AL, 41
INT 10
Il livello 3 è rappresentato da un sottoprogramma che opera su dati variabili ( parametri) di tipo elementare utilizzando al suo interno solo istruzioni a basso livello
call scrivi ( asc('A')) ' Chiamata della procedure
SUB SCRIVI (car%)
REG 1,&H0E*256 +car% '0E --> AH, cod.ASCII --> AL
CALL INTERRUPT 16
END SUB
Il livello 4 è rappresentato da un sottoprogramma che utilizza il livello 3 con dati di tipo strutturato
call parola ( a$ ) ' a$ è una stringa
SUB PAROLA (me$)
local lunghe%, i%, c$
lunghe% = len(me$) 'Lunghezza della stringa
for i%=1 to lunghe%
c$ = mid$(me$,i%,1) ' Carattere n. i% della stringa
call scrivi(asc(c$)) ' livello 3
next i%
END SUB
Il livello 5 è rappresentato da un programma applicativo che ad esempio riceve in input una stringa e la visualizza.
ini:
input 'Stringa (fine = + ) : '.stri$
if stri$ '+' then goto fine
call parola(stri$) ' livello 4
goto ini
fine:
end
2. Interfaccia software tra due computer o in caso di rete
I computer siano collegati tramite una porta RS232, gestita dall'interrupt 20.
La rete utilizzi schede rete, gestite dall' interrupt 40 (fittizio).
Si possono utilizzare i medesimi nomi nei due casi, dovrà solo modificarsi il numero dell'interrupt, scrivendo 40 invece di 20 nel caso della rete.
Il livello 1 è rappresentato dall'hardware della porta o della scheda
Il livello 2 è rappresentato dalla diretta gestione degli interrupt.
Trasmette REG 1, &H0141 '01 --> AH, 'A'--> AL CALL INTERRUPT 20 |
Riceve REG 1,&H02000 '02 --> AH CALL INTERRUPT 20 A% = REG (1) mod 256 'AL --> A% il valore numerico del byte END DEF |
Il livello 3 è rappresentato da un sottoprogramma che opera su dati variabili ( parametri) di tipo elementare, costruito usando solo istruzioni a basso livello
Trasmette call out( asc('A')) SUB OUT ( car%) REG 1,&H01 * 256 + car% '01 --> AH, valore del byte AL CALL INTERRUPT 20 END SUB |
Riceve a$ = chr$(Fninp%) DEF FNINP% REG 1,&H02000 '02 --> AH CALL INTERRUPT 20 FNINP% = REG (1) mod 256 'AL --> valore numerico del byte END DEF |
Il livello 4 è rappresentato da un sottoprogramma che utilizza il livello 3 su dati strutturati, in questo caso una stringa
Trasmette call sout( a$) SUB SOUT ( stri$) local lu%,c%,c$,i% lu% = len(stri$) ' lunghezza della stringa for i% = 1 to lu% c$ = mid$(stri$,i%,1) 'Carattere n, i% della stringa c% = asc ( c$) call out ( c% ) ' livello 3 next i% END SUB |
Riceve a$ = Fnsinp$(10) DEF FNSINP$(k%) local c%,c$,i% FNSINP$ = '' FOR i% = 1 to k% c% = Fninp% ' livello 3 c$ = chr$(c%) FNSINP$=FNSINP$+c$ next i% END DEF 'Riceve 10 caratteri dalla porta o dalla scheda |
Il livello 5, nel caso della porta RS232, può essere rappresentato da un programma applicativo, simile a quello mostrato in precedenza.
Nel caso della rete, occorre considerare il protocollo, l'insieme di regole che governano la trasmissione.
Usiamo il protocollo ( insieme di protocolli) TCP/IP con standard IEEE 802.3 (molto semplificato)
Il messaggio deve essere scomposto in frame ( trame, pacchetti ) con la seguente struttura in byte:
Da |
A |
Lungh. |
Contenuto |
|
|
|
Preambolo: contiene i bit di sincronizzazione, il criterio per i controlli, il codice identificativo del protocollo, eventuali flag, il tempo di vita del frame, se messaggio locale o per Internet, ecc. Non dettaglieremo questi byte, assumendo che siano contenuti nella stringa prea$ |
|
|
|
Indirizzo MAC del destinatario o IP. ( in desti$ ) |
|
|
|
Indirizzo MAC del mittente o IP della workstation (in mitte$) |
|
|
|
Numero progressivo del frame ( intero a 2 byte ) |
|
|
|
Totale dei frame che compongono il messaggio (intero a 2 byte ) |
|
|
|
Lunghezza effettiva del campo dati |
|
|
|
Dati da trasmettere |
Per semplicità, supponiamo che il preambolo e gli indirizzi siano gestiti dal sistema, ipotizzando che il nome da noi dato alle stringhe siano variabili di sistema.
Se si trasmette, occorre inviare alla scheda rete una stringa di 8192 byte, da comporre ricavando le informazioni necessarie. A livello 5 di devono avere a disposizione, già separati e numerati, i dati che dovranno essere inseriti nei singoli frame che compongono il messaggio da trasmettere, e conoscere il numero totale dei frame.
Se si riceve, occorrerà depurare i frame delle informazioni necessarie alla trasmissione, non più necessarie.
Livello 5
Trasmette : NT0, NT1,NT2, ..NTn ---> frame$ |
Riceve frame$ ---> NT0, NT1, NT2,,,,,,NTn |
' Legge i file NFx, li adatta al 'protocollo, e li trasmette alla scheda 'rete 'Valori fittizi del preambolo e degli indirizzi prea$ = '1234' ' Preambolo 4 byte desti$= 'ARRIVO' 'Indirizzo del destinatario 6 byte mitte$= 'PARTEN' 'Indirizzo del mittente 6 byte 'Si determina il numero totale dei 'frame open 'NF0' for input as #2 line input #2,tota$ close 2 tota% = val(tota$) 'Si determinano i due byte 'corrispondenti alla rappresentazione 'interna tota$ = FNIT$(tota%) 'I valori precedenti sono uguali per 'tutti i frame del messaggio |
' Legge dalla scheda rete, e crea i 'file NTx 'Si legge il primo file, per 'determinare il numero totale dei frame frame$ = Fnsinp$(8192) 'livello 4 'Determinazione del numero dei frame a$ = mid$(frame$,19,1) b$ = mid$(frame$,20,1) nume& = asc(b$)*256 + asc(a$) if nume& > 32676 then nume& = nume& - 65536 tota% = nume& 'Scrittura del numero dei frame in NT0 open 'nt0' for output as #2 print #2,str$(tota%) close 2 'Lunghezza effettiva del campo dati a$ = mid$(frame$,21,1) b$ = mid$(frame$,22,1) nume& = asc(b$)*256 + asc(a$) if nume& > 32676 then nume& = nume& - 65536 ludati% = nume& ' Campo dati bu$ = mid$(frame$,23,ludati%) ' Scrittura del campo dati su NT1 open 'NT1+mid$(str$(i%),2) for binary as #2 put$ 2, bu$ close 2 |
Trasmette : NT0, NT1,NT2, ..NTn ---> frame$ |
Riceve frame$ ---> NT0, NT1, NT2,,,,,,NTn |
' Composizione del campo dati dei 'frame, da for i% = 1 to tota% nofile$ = 'NF'+mid$(str$(i%),2) open nofile$ for binary as #1 lufile% = lof(1) get$ 1,lufile%, bu$ ' Tutto il file in bu$ close 1 'Controllo e forzatura a 8170 byte if len(bu$) > 8170 then bu$=mid$(bu$,1,8170) end if for j = len(bu$)+1 to 8170 bu$ = bu$+chr$(32) next j ludati$ = FNIT$(lufile%) ' 2 byte con i caratteri effettivi del campo dati nupro$ = FNIT(i%) ' 2 bye corrispondenti al numero 'progressivo 'Composizione del frame i% frame$ = '' frame$ = frame$ + prea$ + desti$ + mitte$ frame$ = frame$ + nupro$ + tota$ + ludati$ frame$ = frame$ + bu$ CALL SOUT$ ( frame$ ) ' Invio sulla scheda rete livello 4 next i% fine: end DEF FNIT$(num%) local indi&, a$, b$ def seg = varseg(num%) ' Si fissa il segmento indi& = VARPTR (num%) ' Offset di num% a$ = chr$(PEEK(indi&)) b$ = CHR$(PEEK(indi&+1)) FNIT$ = a$ + b$ END DEF |
'Si leggono dalla scheda rete tutti gli 'altri frame e si scrive il campo dati 'in NTx for i% = 2 to tota% frame$ = Fnsinp$(8192) 'livello 4 'Lunghezza effettiva del campo dati a$ = mid$(frame$,21,1) b$ = mid$(frame$,22,1) nume& = asc(b$)*256 + asc(a$) if nume& > 32676 then nume& = nume& - 65536 ludati% = nume& ' Campo dati bu$ = mid$(frame$,23,ludati%) ' Scrittura del campo dati su NTx open 'NT'+mid$(str$(i%),2) for binary as #2 put$ 2, bu$ close 2 next i% fine: end |
Il livello 6 si dovrà occupare, in trasmissione, di suddividere il file che si vuole trasmettere in tanti piccoli file ciascuno composto da 8170 byte, pari alla dimensione del campo dati del protocollo, escluso l'ultimo, che presumibilmente ne conterrà di meno, di stabilire il numero dei file così determinato, che coinciderà con il numero dei frame, e di individuare la lunghezza effettiva del campo dati.
In ricezione, il livello 6 dovrà riunire in un unico file gli spezzoni ricavati dai frame, attribuendo il nome e la giusta estensione.
Livello 6
Trasmette file ---> NF0, NF1,NF2,..FNn |
Riceve NF0, NF1,NF2,..FNn ---> file |
' Trasforma un file in tanti file da '8170 byte cls input 'Nome del file : ',no$ open no$ for binary as #1 ' lufile& = lof(1) ' lunghezza in byte del file num& = int(lufile& / 8170) ' Numero dei file da generare re& = lufile& - num&*8170 'Byte dell'ultimo file for i= 1 to num& open 'NF'+mid$(str$(i),2) for binary as #2 'Vengono creati tanti file NF1, 'NF2,.NF15, se num&=15 get$ 1, 8170, bu$ ' Letti 8170 byte dal file da 'trasmettere.. put$ 2,bu$ 'e scritti sul file n. i close 2 next i tot& = num& + 1 ' Si determina l'ultimo numero di file open 'NF'+mid$(str$(tot&),2) for binary as #2 get$ 1, re&, bu$ ' Letti gli ultimi byte dal file da 'trasmettere.. put$ 2,bu$ 'e scritti sul file n. tot& close 2 ' Si trascrive sul file ASCII 'NF0' il 'totale dei file open 'NF0' for output as #2 print #2,str$(tot&) close 2 close 1 fine: end |
' Unisce in un unico file i file NTx, attribuendogli un nome cls: input 'Nome da attribuire al file : ',no$ 'Numero di file NTx open 'nt0' for input as #1 line input #1, tota$ close 1 tota% = val(tota$) open no$ for binary as #2 for i= 1 to tota% open 'NT'+mid$(str$(i),2) for binary as #1 get$ 1, lof(1), bu$ ' Letto in bu$ il file NTx put$ 2, bu$ 'e scritto sul file globale close 1 next i close 2 fine: end |
Infine, il livello 7 può essere considerato la creazione, con il software opportuno ( WINWORD, EXCEL, POWER POINT, PAINTBRUSH, Visual basic, ACCESS ecc. ) del file da trasmettere.
3 I Livelli ISO - OSI
Studiato in linea di principio cosa deve avvenire per una comunicazione in rete, ed è superfluo sottolineare le enormi semplificazioni che sono state adottate, è evidente come se ogni rete locale provvedesse per conto suo al software necessario per la gestione dei protocolli e situasse in momenti diversi tutto ciò che nell'esempio precedente abbiamo volutamente trascurato, le difficoltà di comunicare sarebbero enormi.
Si è pertanto stabilito uno standard internazionale dei protocolli di trasmissione ( intesi in questo caso come software di gestione, soprattutto da intendersi come momenti in cui intervenire con le aggiunte e le specifiche da adottare ) strutturato in 7 livelli di catena di interfaccia, ciascuno dei quali individuato dai compiti specifici che deve eseguire.
Ogni livello dialoga, ovviamente in senso inverso nella trasmissione e nella ricezione dei messaggi, con quello precedente e quello successivo.
In pratica ogni livello è formato da applicativi, nè più ne meno come nell'esempio per i livelli 5 e 6, e presume di poter comunicare con l'applicativo di pari livello degli altri computer.
Cosa ciò significhi è chiarissimo se si esaminano con attenzione i due applicativi esempi a livello 5 e 6 del nostro esempio
N. |
Livello |
Layer |
Compito |
|
Applicazione |
Application |
Applicativi rivolti all'utente |
|
Presentazione |
Presentation |
Criptatura e compressione dei dati, |
|
Sessione |
Session |
Tempi, turni, dimensioni delle sessioni di comunicazione |
|
Trasporto |
Transport |
Controllo di errori, ricupero dei dati, pacchettizzare informazioni troppo lunghe, chiedere nuovamente pacchetti danneggiati |
|
Rete |
Network |
Trasformazione di indirizzi logici in indirizzi fisici, determinazione della rotta da seguire, risoluzione di problemi di congestione |
|
Linea |
Data Link |
Invio dei pacchetti ed attesa del segnale di ACK di ritorno per inviare il pacchetto successivi ( o in caso di NACK di nuovo il medesimo pacchetto) |
|
Fisico |
Phisical |
Invio fisico dei bit dei dati |
Appunti su: |
|