Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 655

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>The Linux Modem-HOWTO: Modem e porte seriali</TITLE>
 <LINK HREF="Modem-HOWTO-5.html" REL=next>
 <LINK HREF="Modem-HOWTO-3.html" REL=previous>
 <LINK HREF="Modem-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="Modem-HOWTO-5.html">Avanti</A>
<A HREF="Modem-HOWTO-3.html">Indietro</A>
<A HREF="Modem-HOWTO.html#toc4">Indice</A>
<HR>
<H2><A NAME="basics_"></A> <A NAME="s4">4. Modem e porte seriali</A>Nozioni di base </H2>

<P> Non occorre capire le fondamenta per usare ed installare un modem. Ma 
esserne a conoscenza pu&ograve; aiutare a capire cosa c'&egrave; che non va quando sorgono 
dei problemi. Dopo avere letto questa sezione, se si vuole approfondire, 
conviene consultare la sezione 
<A HREF="Modem-HOWTO-19.html#how_modems_work">Come funzionano i modem</A> 
in questo documento (ancora incompleta). Maggiori dettagli sulla porta seriale
(inclusa la maggior parte di questa sezione) potr&agrave; essere trovata in Serial-HOWTO. 
<P>
<H2><A NAME="ss4.1">4.1 Il modem converte da digitale ad analogico (e viceversa)</A>
</H2>

<P> La maggior parte delle principali linee telefoniche sono gi&agrave; digitali ma 
le linee che portano presso la vostra abitazione (o posto di lavoro) sono 
generalmente analogiche, il che vuol dire che sono state predisposte per 
trasmettere un'onda elettrica che &egrave; l'esatta replica dell'onda sonora generata 
dalla vostra voce. Un'onda elettrica di questo tipo &egrave; chiamata "analogica". 
Se vista in un oscilloscopio sembra una curva sinusoidale di varia frequenza ed ampiezza. 
Un segnale digitale assume invece una forma squadrata. Ad esempio 3 v 
(volt) potrebbe essere un bit con valore 1, e 0 v potrebbe corrispondere ad 
un bit di valore 0. Per la maggior parte delle porte seriali (usate dai modem 
esterni) +12 v equivale ad un bit 0, e -12 v ad un bit 1 (alcune porte hanno 
valori di + o - 5 v).
<P>Per inviare dati dal proprio computer attraverso la linea telefonica, il modem 
acquisisce il segnale digitale dal computer e lo converte in "analogico". Lo 
fa prima creando un'onda sinusoidale analogica, quindi "MODulandola". Visto che il risultato 
rappresenta comunque un dato digitale, potrebbe anche chiamarsi segnale digitale
invece che analogico. Ma assomiglia ad un segnale 
analogico e quasi tutti lo chiamano analogico. Dall'altro capo della linea 
telefonica un altro modem "DEModula" questo segnale recuperando il segnale puro 
digitale originale. Mettete insieme l'inizio delle due parole sopracitate: 
"mod" e "dem" ed ecco l'origine della parola "modem" (ovviamente dovete 
togliere una delle due "d"). Un "modem" &egrave; quindi un MODulatore-DEModulatore. 
Per sapere cos'&egrave; la modulazione occorre consultare la sezione 
<A HREF="Modem-HOWTO-19.html#modulate_">La modulazione in dettaglio</A>.  
<P>
<H2><A NAME="ss4.2">4.2 Cos'&egrave; una porta seriale?</A>
</H2>

<H3>Introduzione alla seriale</H3>

<P> La porta seriale &egrave; un dispositivo di I/O (Input/Output).  
<P>
<P> Visto che i modem hanno una porta seriale frapposta tra loro ed il 
computer, &egrave; necessario conoscere la porta seriale cos&igrave; come il modem.
<P>La porta seriale &egrave; un dispositivo di IO (Inupt/Output). La maggior parte dei 
PC hanno due porte seriali. Ciascuna ha un connettore a 9 pin (talvolta a 25 pin)
sul retro del computer. I programmi per computer possono inviare dati (byte) al 
pin di trasmissione (output) e ricevere dati dal pin di ricezione (input). Gli altri pin 
servono per controlli e per la messa a terra.
<P>La porta seriale &egrave; molto di pi&ugrave; che un semplice connettore. Essa converte i 
dati da paralleli a seriali e cambia la rappresentazione elettrica dei dati. 
All'interno del computer, i bit di dati scorrono parallelamente (usando 
diversi cavi allo stesso tempo). Il flusso seriale &egrave; uno scorrere di dati 
attraverso un solo cavo (cos&igrave; come sul pin di trasmissione e ricezione del 
connettore seriale). Perch&eacute; la porta seriale possa creare un flusso di questo 
tipo, deve convertire i dati da paralleli (all'interno del PC) a seriali 
(e viceversa).
<P>La maggior parte dell'elettronica della porta seriale si trova in un chip del 
computer (o in una sezione di un chip) conosciuto come UART. Per maggiori dettagli
sugli UART consultare la sezione 
<A HREF="Modem-HOWTO-15.html#uart_">Cosa sono gli UART?  In che modo influenzano le prestazioni?</A>
Ma potreste volere prima finire questa sezione, cos&igrave; da poter
meglio capire come l'UART si pone all'interno dello schema globale delle cose.
<P>
<H3>Pin e cavi</H3>

<P> I vecchi PC usavano connettori a 25 pin ma in realt&agrave; se ne usano circa 9,
per cui la maggior parte dei connettori attuali sono di soli 9 pin. Ognuno dei 
quali &egrave; generalmente connesso ad un cavo. Oltre ai due cavi usati per ricevere e 
trasmettere i dati, un altro pin (cavo) &egrave; la messa a terra. Il 
voltaggio di ogni cavo &egrave; misurato in relazione al cavo di terra. Quindi il numero minimo di 
cavi da usare per una trasmissione bilaterale di dati &egrave; 3. &Egrave; possibile anche fare a meno
del segnale di terra ma con degradate prestazioni e talvolta con errori.
<P>Ci sono altri 
cavi che servono per effettuare solo dei controlli (invio di segnali) e 
non per inviare byte. Tutti questi segnali potrebbero essere condivisi
da un unico cavo, ma, al contrario, esiste un cavo separato dedicato 
ad ogni tipo di segnale.
Alcuni (o tutti) questi cavi di controllo sono chiamati "linee di controllo del 
modem". Questi cavi di controllo sono impostati (on) a +12 volt oppure 
nello stato negativo (off) a -12 v. Uno di questi cavi segnala al computer di 
interrompere l'invio di dati attraverso la porta seriale. Al contrario, 
un altro cavo segnala al 
dispositivo connesso alla porta seriale di interrompere l'invio di dati al computer. 
Se il dispositivo connesso &egrave; un modem, altri cavi possono 
segnalare al modem di appendere la comunicazione o dire al computer che la 
connessione alla linea telefonica &egrave; stata effettuata o che il telefono sta 
squillando (cio&egrave; qualcuno sta tentando di connettersi). Vedere il Serial-HOWTO:
Pinout and Signals per ulteriori dettagli
<P>
<H3>Il modem interno contiene una porta seriale</H3>

<P> Per un modem interno non si sono connettori a 9 pin, ma il comportamento &egrave; 
quasi esattamente come se i cavi summenzionati esistessero. Invece 
di un segnale a 12 volt attraverso un cavo che porta lo stato di una linea di 
controllo del modem, il modem interno usa semplicemente un bit di stato nella propria
memoria (un registro) per determinare lo stato di questo cavo "virtuale". 
La porta seriale dei modem 
interno &egrave; vista dal computer proprio come una porta seriale reale. Ivi inclusi 
anche i limiti di velocit&agrave; che si possono impostare nelle porte seriali 
ordinarie come ad esempio 115200 bit per secondo. Sfortunatamente per Linux molti modem 
interni attuali non funzionano esattamente in questo modo ma invece 
usano un software (eseguito dalla CPU) per svolgere la maggior parte del lavoro del modem. 
Sfortunatamente, questo software &egrave; disponibile solo per i sistemi operativi MS Windows (non sono 
stati portati su Linux).
Quindi non potete usare la maggior parte di questi modem con Linux. Vedere 
<A HREF="Modem-HOWTO-2.html#soft_modem">Software Modem (interni)</A>.
<P>
<H2><A NAME="ss4.3">4.3 Indirizzi IO &amp; IRQ</A>
</H2>

<P>Poich&eacute; il computer deve comunicare con ciascuna porta seriale, il sistema 
operativo deve sapere che ciascuna porta seriale esiste e dove essa si trovi (il suo 
indirizzo di I/O). Esso deve anche conoscere quale cavo (numero di IRQ) 
deve usare la porta seriale per 
richiedere i servizi della CPU del PC. Quindi ogni dispositivo di porta 
seriale deve immagazzinare nella propria memoria non volatile sia l'indirizzo 
di I/O che il suo Interrupt reQuest Number: IRQ. Vedere 
<A HREF="#interrupt_">Interrupt</A>.
Il bus PCI non funziona esattamente in questo modo visto che il bus PCI ha il suo
proprio sistema di interrupt. Ma, visto che il BIOS che riconosce il PCI imposta i chip per
mappare questi interrupt PCI come IRQ, praticamente si comporta proprio come descritto
qui sopra ad eccezione del fatto che la condivisione degli interrupt &egrave; concessa (2 o pi&ugrave;
dispositivi possono usare lo stesso numero di IRQ).
<P>Gli indirizzi I/O non sono uguali agli indirizzi di memoria. Quando un indirizzo I/O
viene immesso nel bus indirizzi (address bus) del computer, un altro cavo viene elettrificato.
Questo dice sia alla memoria principale di ignorare l'indirizzo, che a tutti i dispositivi
che hanno indirizzi I/O (come le porte seriali) di controllare quell'indirizzo per vedere
se combacia con quello del dispositivo. Se c'&egrave; corrispondenza, allora il dispositivo di I/O 
legge il dato sul bus dati.
<P>
<H2><A NAME="ss4.4">4.4 Nome: ttyS0, ttyS1, ecc. </A>
</H2>

<P>Le porte seriali sono etichettate come ttyS0, ttyS1, ecc. (generalmente
corrispondenti a COM1, COM2, ecc. in DOS/Windows). La directory /dev ha un
file speciale per ogni porta. Digitate "ls /dev/ttyS*" per vederli. Il fatto che
possa esistere (ad esempio) un file ttyS3, non significa necessariamente che esista
anche una corrispondente porta seriale fisica.
Quale di questi nomi (ttyS0, ttyS1, ecc.) si riferisca a quale porta seriale viene 
determinato come segue. Il driver seriale (software) mantiene una tabella che mostra
quale indirizzi I/O corrisponde a quale ttyS. Questa mappatura di nomi (tipo ttyS1) 
riferita a indirizzi I/O (e IRQ) pu&ograve; essere sia impostata che verificata dal comando
"setserial". Vedere 
<A HREF="Modem-HOWTO-9.html#set_serial">Cos'&egrave; Setserial</A>.  Questo <CODE>non</CODE> 
imposta gli indirizzi di IO e di IRQ sull'hardware stesso (che &egrave; impostato invece 
dai ponticelli o tramite software plug-and-play). Quindi quale porta fisica corrisponda ad
esempio a ttyS1 dipende sia da quello che il driver della seriale pensa (tramite setserial)
che da quello che &egrave; impostato nell'hardware. Se viene fatto un errore, la porta fisica potrebbe
non corrispondere ad alcun nome (tipo ttyS2) e quindi con pu&ograve; essere usata. Vedere
<A HREF="Modem-HOWTO-8.html#ttySN_">Dispositivi di porta seriale /dev/ttyS2, ecc.</A> per ulteriori dettagli.
<P>
<H2><A NAME="interrupt_"></A> <A NAME="ss4.5">4.5 Interrupt </A>
</H2>

<P>I byte entrano dalla linea telefonica al modem, sono converiti da 
analogico a digitale dal modem, quindi passati attraverso la porta seriale 
verso la loro destinazione all'interno del vostro computer. 
Quando la porta seriale riceve un certo numero di byte (potrebbe essere impostata a
1, 4, 8 o 14) nel suo buffer FIFO, segnala  
alla CPU di recuperarli inviando un segnale elettrico noto come interrupt su di certo
cavo generalmente usato solo da quella porta. Quindi il FIFO attende un certo numero di byte
quindi genera un interrupt.
<P>Comunque questo interrupt potrebbe anche essere inviato se c'&egrave; un inaspettato
ritardo mentre si attende l'arrivo del prossimo byte (conosciuto come timeout).
Quindi se i byte sono ricevuti lentamente (come ad esempio se qualcuno digita su una 
tastiera di terminale) potrebbe essere generato un interrupt per ogni byte ricevuto.
Per alcuni chip UART la regola &egrave; questa: se si possono ricevere 4 byte di seguito, ma 
nessuno di questi 4 arriva, allora
la porta smette di aspettare altri byte ed invia un interrupt per recuperare i byte 
attualmente nel FIFO. Naturalmente, se il FIFO &egrave; vuoto, non verr&agrave; inviato nessun interrupt.
<P>Ogni interrupt (all'interno del computer) &egrave; contraddistinto da un numero (IRQ) 
e la porta seriale deve sapere quale conduttore usare per inviare il segnale. 
Ad esempio, ttyS0 normalmente usa l'IRQ n. 4 conosciuto come IRQ4 (o IRQ 4). 
Una lista di questi interrupt ed altro pu&ograve; essere trovata in "man 
setserial" (cercare "Configuring Serial Ports"). Gli interrupt sono inviati 
ogniqualvolta la porta seriale necessiti di ricevere l'attenzione della CPU. 
&Egrave; importante fare questo periodicamente poich&eacute; il buffer all'interno della 
porta seriale pu&ograve; trattenere solo 16 (1 nelle vecchie porte seriali) byte in arrivo. Se 
la CPU non riesce a rimuovere prontamente i byte ricevuti, poi non esiste pi&ugrave; 
spazio libero per gli altri che stanno arrivando ed il piccolo buffer potrebbe 
sovraccaricarsi generando una perdita di byte di dati.
<P>Per un modem esterno non c'&egrave; nessun modo (tipo controllo di flusso)
per interrompere il flusso abbastanza rapidamente da prevenire questo. Per un modem
interno il buffer FIFO a 16 byte si trova sulla stessa scheda ed un buon modem non ci
andr&agrave; a scrivere se questo &egrave; pieno. Quindi un buon modem interno non sovraccaricher&agrave;
il buffer da 16 byte ma potrebbe avere bisogno di usare 
<A HREF="#M-M_flow_c">Controllo di flusso da modem a modem</A> per evitare che il modem stesso vada in 
sovraccarico. Questo rappresenta un vantaggio del modem interno rispetto ad un esterno.
<P>Gli interrupt sono inviati anche quando la porta seriale ha appena mandato 
16 dei suoi byte dal piccolo buffer di trasmissione verso il cavo esterno.
In questo modo si fa spazio per 16 successivi byte da inviare 
all'esterno. L'interrupt notifica alla CPU il fatto cos&igrave; che si possano immettere
ulteriori byte nel piccolo buffer di trasmissione per essere inviati. 
Ancora, quando una linea di controllo del modem cambia il proprio stato, viene 
inviato un interrupt.
I buffer sopra menzionati sono tutti buffer hardware. La porta seriale ha anche degli
ampi buffer nella memoria principale. Questo verr&agrave; spiegato pi&ugrave; tardi.
<P>Gli interrupt veicolano molte informazioni ma solo indirettamente. L'interrupt 
propriamente detto semplicemente dice ad un chip chiamato interrupt controller 
che una certa porta seriale necessita attenzione. L'interrupt controller poi 
invia il segnale alla CPU. La CPU attiva uno speciale programma per servire 
la porta seriale. Il programma viene chiamato routine di servizio di interrupt (interrupt 
service routine) che &egrave; parte del software del dispositivo seriale. Esso cerca di 
scoprire cosa &egrave; successo alla porta seriale, quindi svolge il compito come ad 
esempio il trasferimento di byte da (per) il buffer hardware della porta. 
Questo programma pu&ograve; facilmente scoprire cosa &egrave; accaduto poich&eacute; la porta 
seriale ha dei registri che puntano indirizzi di I/O conosciuti dal software 
del driver seriale. Questi registri contengono informazioni sullo stato della 
porta seriale. Il software legge questi registri e ispezionandone il contenuto, 
scopre cosa &egrave; accaduto, quindi esegue l'azione appropriata. 
<P>
<H2><A NAME="ss4.6">4.6 Compressione di dati (da parte del Modem)</A>
</H2>

<P> Prima di continuare con le nozioni di base sulla porta seriale, occorre 
capire una certa cosa fatta dal modem: la compressione dei dati. In alcuni 
casi questo compito &egrave; in realt&agrave; svolto dal software gestito dalla CPU del computer ma, 
sfortunatamente, al momento attuale questo software funzione solamente in 
ambiente MS Windows. Ci occuperemo quindi del caso in cui il modem stesso 
esegue la compressione poich&eacute; questo &egrave; quello che accade cos&igrave; che il modem possa
funzionare in ambiente Linux.
<P>Per inviare dati pi&ugrave; velocemente attraverso le linee telefoniche uno potrebbero 
comprimere (codificare) i dati usando uno schema di codifica personalizzato, 
che esso stesso dipende dai dati. Il dato codificato &egrave; pi&ugrave; piccolo
dell'originale (meno byte) e pu&ograve; essere inviato attraverso Internet in
minore tempo.  
Questo processo &egrave; chiamato "compressione di dati".
<P>Se scaricate file da Internet, essi sono probabilmente gi&agrave; compressi e non &egrave; 
possibile per il modem tentare di comprimerli ulteriormente. Il vostro modem pu&ograve; 
riconoscere che quelli che stanno transitando sono dati gi&agrave; compressi ed 
astenersi dal tentare di comprimerli ancora. Se state ricevendo dati che 
sono stati gi&agrave; compressi dall'altro modem, il vostro modem li decomprimer&agrave; 
e creer&agrave; molti pi&ugrave; byte di quelli che sono stati spediti attraverso la linea 
telefonica. Quindi il flusso di dati dal vostro modem all'interno del vostro 
computer sar&agrave; maggiore di quello dalla linea telefonica verso di voi. Il rapporto di questo 
flusso viene chiamato rapporto di compressione. Rapporti di 
compressione superiori a 4 sono possibili, ma non molto probabili.
<P>
<H2><A NAME="ss4.7">4.7 Correzione d'errore</A>
</H2>

<P> Analogamente alla compressione dati, i modem potrebbero essere impostati per
eseguire una correzione d'errore. Sebbene questo comporti un abbassamento del flusso di byte/secondo, il fatto che questa correzione d'errore 
tolga i bit di inizio e fine in realt&agrave; accresce il flusso di bit/secondo.
<P>Per l'interfaccia della porta seriale con il mondo esterno, ogni byte composto 
da 8 bit ha 2 ulteriori bit aggiunti ad esso: un bit di inizio e un bit di stop.
Senza la correzione di errore, questi bit di inizio e stop extra generalmente passano 
attraverso il modem verso la linea telefonica. Ma quando la correzione
d'errore &egrave; attivata, questi bit extra sono eliminati e i byte di 8 bit
sono 
composti in pacchetti. Questo &egrave; pi&ugrave; efficiente e genera un flusso di bit/secondo 
pi&ugrave; alto a dispetto del fatto che c'&egrave; qualche ulteriore byte aggiunto per 
l'intestazione dei pacchetti e per la correzione degli errori
<P>
<H2><A NAME="ss4.8">4.8 Flusso di dati (velocit&agrave;)</A>
</H2>

<P> I dati (byte che rappresentano caratteri, immagini, ecc.) passano dal 
vostro computer al vostro modem, quindi all'esterno verso la linea telefonica 
(e viceversa). I rapporti di flusso (come ad esempio 56k (56000) bit/secondo) sono chiamati 
(non correttamente) "velocit&agrave;". Ma quasi tutti dicono "velocit&agrave;" al posto di "rapporto
di flusso". Se non c'&egrave; compressione di dati il rapporto di flusso dal computer al 
modem dovrebbe essere circa lo stesso di quello che passa attraverso la linea 
telefonica.
<P>In realt&agrave; ci sono due differenti velocit&agrave; da considerare al vostro capo della 
linea telefonica.
<P>
<UL>
<LI> La velocit&agrave; della linea telefonica stessa (velocit&agrave; DCE) da modem-a-modem</LI>
<LI> La velocit&agrave; dalla porta seriale del vostro computer al vostro modem (velocit&agrave; DTE)</LI>
</UL>
<P>Quando si compone un numero per connettersi ad un altro modem all'altro capo 
della linea telefonica, il vostro modem spesso visualizza un messaggio tipo 
"CONNECT 28800" oppure "CONNECT 115200". Cosa significa?. B&egrave;, potrebbe essere 
sia la velocit&agrave; DCE che quella DTE. Se essa &egrave; maggiore di quella delle 
specifiche del modem, allora deve trattarsi della velocit&agrave; da-modem-a-computer 
(DTE). Questo &egrave; l'esempio di "CONNECT 115200" mostrato in precedenza. 28800 deve 
trattarsi invece della  velocit&agrave; da-modem-a-modem (DCE) visto che la porta seriale 
non ha questa velocit&agrave;. Si potrebbe configurare il modem perch&eacute; possa visualizzare entrambe le 
velocit&agrave;. Alcuni modem visualizzano entrambe le velocit&agrave; e visualizzano la velocit&agrave;
da modem-a-modem come (ad esempio): CARRIER 28800 
<P>Se avete un modem interno non vi aspettereste che ci sia un limite di 
velocit&agrave; DTE dal vostro modem al vostro computer visto che il modem risiede all'interno del 
computer ed &egrave; praticamente una parte di esso. Ma questo limite c'&egrave; visto che 
il modem contiene al suo interno una porta seriale dedicata.
<P>&Egrave; importante capire che la velocit&agrave; media &egrave; spesso minore di quella 
specificata, specialmente nella corta linea DTE (dal computer a modem). Attese 
(o tempi morti) generano una minore velocit&agrave; media. Queste attese possono essere 
lunghe attese di forse un secondo a causa del 
<A HREF="#flow_control">Controllo  di flusso</A>. Di contro le attese possono anche essere molto brevi (tempi 
morti) corrispondenti a diversi micro-secondi che separano la fine di un byte e 
l'inizio dell'altro. In pi&ugrave;, i modem passano a velocit&agrave; inferiori se le condizioni 
della linea telefonica sono meno che perfette.
Per una discussione riguardo quale sia la migliore velocit&agrave; DTE vedere la sezione
<A HREF="Modem-HOWTO-13.html#speed_">Quale velocit&agrave; dovrei usare</A>.
<P>
<P>
<H2><A NAME="flow_control"></A> <A NAME="ss4.9">4.9 Controllo di flusso </A>
</H2>

<P> Il controllo di flusso &egrave; la capacit&agrave; di fermare il flusso dei byte in un 
cavo. Deve anche provvedere a fare ripartire il flusso senza perdere byte. Il 
controllo di flusso &egrave; necessario ai modem per consentire un salto nei rapporti di 
velocit&agrave;.
<P>
<H3>Esempio di controllo di flusso </H3>

<P> Ad esempio, consideriamo il caso in cui voi connettiate il vostro modem esterno 
a 36.6k tramite un corto cavo alla vostra porta seriale. Il modem invia e riceve byte 
attraverso la linea
telefononica e 36.6k bit per secondo (bps). Non esegue
nessuna compressione dati o correzione di errore. Voi avete impostato la 
velocit&agrave; della porta seriale a 115,200 bit/secondo (bps) e state inviando 
dati dal vostro computer alla linea telefonica. Quindi il flusso dal vostro computer al 
vostro modem attraverso il corto cavo &egrave; di 115.2k bps. In ogni caso il flusso da modem verso la linea 
telefonica &egrave; solo di 33.6k. Visto che il flusso di dati (115.2k)
sta entrando nel modem pi&ugrave; velocemente del flusso di dati in uscita, il modem deve 
conservare il flusso in eccesso (115.2k -33.6k = 81.6k) in uno dei suoi buffer. 
Questo buffer andrebbe fatalmente in sovraccarico (esaurirebbe lo spazio a disposizione) 
a meno che il flusso a 115.2k venga interrotto.
<P>Ecco che il controllo di flusso viene in soccorso. Quando il buffer del modem 
&egrave; quasi pieno, il modem invia un segnale di stop alla porta seriale. La porta 
seriale passa il segnale di stop al device driver ed il flusso a 
115.2k bps viene fermato. Intanto il modem continua ad inviare dati a 33.6k 
bps recuperando i dati precedentemente accumulati nei suoi buffer. 
Visto che ora non sta arrivando niente nel buffer, il livello di byte inizia a diminuire.
Quando non sono rimasti che pochi byte nel 
buffer, il modem invia un segnale di partenza alla porta seriale ed il flusso 
a 115.2k dal computer al modem riprende. In effetti, il controllo di flusso 
crea un rapporto di flusso medio (in questo caso 33.6k) che &egrave; significativamente 
inferiore a quello in entrata di 115.2k bps. Questo &egrave; il controllo di flusso 
"start-stop".
<P>Quello di cui sopra &egrave; un semplice esempio di flusso di controllo per il flusso
da computer al modem, ma esiste anche il controllo di flusso usato nella direzione opposta: 
dal modem (od altro dispositivo) al computer. Ogni direzione di flusso coinvolge 3 buffer:
1. quello nel modem 2. quello nel chip UART (detto FIFO) 3. nella memoria principale, gestito 
dal driver seriale. Il controllo di flusso protegge alcuni buffer dal rischio di sovraccarico.
I piccoli buffer UART FIFO non sono protetti in questo modo ma dipendono invece
da una veloce risposta agli interrupt che essi generano. FIFO significa "First In First Out"
(il primo che entra &egrave; il primo che esce) e rappresenta quindi il modo in cui vengono gestiti
i byte. Tutti e 3 i buffer usano la regola FIFO ma solo uno di essi si identifica anche con
questo nome. Questa &egrave; l'essenza del controllo di flusso ma ci sono ancora ulteriori dettagli.
<P>Non dovreste averne bisogno spesso del controllo di flusso nella direzione modem - PC.
Per un complesso esempio di un caso dove &egrave; richiesto vedere
"Complex Flow Control Example" nel Serial-HOWTO.
Ma se non avete una velocit&agrave; impostata tra il modem ed il computer (velocit&agrave; della
porta seriale) sufficientemente alta, allora dovrete rallentare il flusso dal modem
al PC. Per fare questo dovete fermare l'incombente flusso di byte dalla linea 
telefonica. Il vostro modem deve dire all'altro modem di interrompere l'invio.
Vedere 
<A HREF="#M-M_flow_c">Controllo di flusso da-modem-a-modem</A><P>
<H3>Controllo di flusso hardware contro il controllo di flusso software</H3>

<P> Se possibile, &egrave; meglio usare il flusso di controllo "hardware" che usa due linee
dedicate di controllo del modem per inviare i segnali di "stop" e "start". 
I modem moderni usano quasi sempre il controllo di flusso hardware tra il modem e la porta 
seriale
<P>Il 
controllo di flusso software usa le linee principali di ricezione e trasmissione
per inviare i segnali di start e stop. Usa i caratteri di controllo ASCII DC1 (start)
e DC3 (stop) a questo scopo. Essi sono semplicemente inseriti nel regolare flusso di
dati. Il controllo di flusso software &egrave; non solo pi&ugrave; lento nel reagire ma anche non consente
l'invio di dati binari a meno di prendere speciali preacauzioni. Visto che &egrave; probabile
che dati binari possano contenere DC1 e DC3, particolari accorgimenti devono essere
presi per distinguere tra un DC3 che significa uno stop del controllo di flusso ed un
DC3 che &egrave; parte del codice binario. La stessa cosa per DC1.
Per far funzionare il controllo di flusso software con i dati binari occorre il 
supporto sia del modem (hardware) che del software.
<P>
<H3>Sintomi della mancanza di un controllo di flusso</H3>

<P> Conoscere la teoria del controllo di flusso pu&ograve; essere di uso pratico. Per esempio
usavo il mio modem per accedere ad Internet e tutto sembrava funzionare bene.
Ma dopo alcuni mesi ho provato ad inviare un grosso file dal mio PC al ISP ottenenendo un
grande numero di errori e ritrasmissioni (ma alla fine con Kermit sono riuscito a spedire
un grosso file dopo parecchi tentativi).
La ricezione nell'altra direzione (dal ISP a me) funzionava bene. Il problema risult&ograve; essere
nella disabilitazione del controllo di flusso. Il buffer del mio modem si sovraccaricava 
durante l'invio di grossi file visto che nessun segnale di "stop" era mai inviato al 
computer per interrompere l'invio di dati al modem. Non c'erano problemi nella direzione dal
modem al mio computer visto che la capacit&agrave; (diciamo 115.2k) era sempre superiore del flusso
attraverso la linea telefonica. La risoluzione consistette nell'abilitare il controllo di
flusso inserendo un comando di attivazione del controllo di flusso nella stringa di inizializzazione
del modem (avrebbe dovuto essere abilitato per default ma qualcosa era andato storto).
<P>
<H3><A NAME="M-M_flow_c"></A> Controllo di flusso da-modem-a-modem  </H3>

<P> Questo &egrave; il controllo di flusso dei dati inviati attraverso le linee 
telefoniche tra due modem. In pratica, esso esiste solo quando &egrave; attivata la 
correzione di errori. In verit&agrave;, anche senza correzione di errore &egrave; possibile attivare
il controllo di flusso software tra modem, ma esso potrebbe interferire con l'invio 
di dati binari cos&igrave; non viene usato spesso. 
<P>
<H2><A NAME="ss4.10">4.10 Il percorso del flusso di dati; Buffer</A>
</H2>

<P> Sebbene sia stato detto molto in proposito, tra cui il controllo 
di flusso, un paio di buffer FIFO a 16 byte nelle porte seriali (nell'hardware) ed 
un paio di buffer pi&ugrave; ampi all'interno del modem, esistono ancora un altro paio di 
buffer. Essi sono degli ampi buffer (forse di 8k) nella 
memoria principale conosciuti anche come buffer di porta seriale. Quando un 
programma applicativo invia byte alla porta seriale (e al modem), essi vengono 
posti prima nel buffer di trasmissione della porta seriale nella memoria 
principale. La coppia consiste in questo buffer di trasmissione ed in quello di ricezione 
per il flusso di byte dalla parte opposta.
<P>
<P>Il device driver seriale estrae diciamo 16 byte dal buffer di trasmissione, 
un byte alla volta e li mette nel buffer di trasmissione da 16 byte della porta 
seriale per la trasmissione. Una volta in questo buffer, non c'&egrave; modo di 
impedire che essi vengano trasmessi. Essi sono poi inviati al modem che 
dispone anch'esso di un buffer di dimensioni adeguate (diciamo 1k). Quando il device 
driver (che riceve ordini dal controllo di flusso) interrompe il flusso 
dei byte in uscita dal computer, interrompe in realt&agrave; il flusso di byte in 
uscita dall'ampio buffer di trasmissione della memoria principale. Anche dopo che questo 
&egrave; accaduto ed il flusso verso il modem &egrave; stato fermato, un programma applicativo pu&ograve; 
continuare a spedire i byte presenti nel buffer da 8k fino a che esso non si riempie. 
<P>Quando &egrave; pieno, il programma applicativo non pu&ograve; inviargli ulteriori byte (un istruzione di 
scrittura "write" in un blocco di programma in C) e l'applicazione si interrompe 
temporaneamente ed attende fino a che si libera un poco di spazio nel buffer. 
Quindi uno stop esercitato dal controllo di flusso &egrave; in definitiva capace di 
fermare il programma che sta inviando i byte. Anche se questo programma si interrompe
il computer non smette necessariamente di elaborare. Potrebbe passare ad eseguire altri
processi mentre sta aspettando causa lo stop del controllo di flusso. Quello suindicato
era un esempio ultrasemplificato visto che un'altra alternativa &egrave; quella di fare s&igrave; che il
programma applicativo stesso faccia qualcosa d'altro mentre sta attendendo di "scrivere"
<P>
<H2><A NAME="ss4.11">4.11 I comandi del modem</A>
</H2>

<P> I comandi al modem sono inviati ad esso dal programma di comunicazione 
attraverso lo stesso conduttore usato per inviare dati. I comandi sono delle 
brevi stringhe ASCII. Esempi sono "AT&amp;K3" per abilitare il controllo di 
flusso hardware (RTS/CTS) tra il computer ed il modem; e "ATDT5393401" serve 
per comporre il numero 5393401. Notate che tutti i comandi sono prefissati da 
"AT". Alcuni comandi come l'attivazione del controllo di flusso aiutano a 
configurare il modem. Altri comandi come il comporre un numero fanno veramente 
qualcosa. Ci sono circa un centinaio di differenti possibili comandi. Quando il 
vostro software di comunicazione parte, lancia una stringa di inizializzazione 
"init string" composta da comandi al modem per configurarlo. Tutti i comandi sono 
inviati sulla linea ordinaria dei dati prima che il modem componga un numero 
(o riceva una chiamata).
<P>
<P>Una volta che il modem &egrave; connesso ad un altro modem (modo on-line), tutto 
quello che il vostro computer manda al vostro modem va direttamente verso 
l'altro modem e non &egrave; interpretato dal modem come un comando. C'&egrave; un modo per 
"fuggire" da questo modo operativo e tornare al modo comandi dove tutto 
quello che viene inviato al modem viene interpretato come un comando. Il 
computer invia semplicemente "+++" con un determinato periodo di tempo prima e 
dopo questo "+++". Se lo spazio temporale &egrave; corretto, il modem si pone in modo 
comandi. Un altro modo di fare questo &egrave; tramite un segnale ad una certa linea 
di controllo del modem.
<P>Ci sono svariate liste dei comandi modem su Internet. La sezione 
<A HREF="Modem-HOWTO-18.html#web_sites">Siti Web</A> ha dei collegamenti ad un paio di questi siti. Diversi modelli e marche 
di modem non usano esattemente lo stesso gruppo di comandi. Cos&igrave; quello che va 
bene per un modem potrebbe non andare bene per un altro.
Alcuni comandi comuni (non si garantisce che funzionino su tutti i modem) 
sono elencati in questo HOWTO nella sezione 
<A HREF="Modem-HOWTO-7.html#modem_commands">Altri comandi modem</A><P>
<H2><A NAME="ss4.12">4.12 Software seriale: il modulo del device driver</A>
</H2>

<P> Il device driver per la porta seriale &egrave; il software che fa funzionare la porta
seriale. Viene ora fornito come modulo seriale. Questo modulo viene generalmente
caricato automaticamente se necessario.
Il kernel 2.2+ far&agrave; questo. Nei kernel precedenti, dovete avere <CODE>kerneld in esecuzione per far s&igrave; che i moduli si autocaricano su richiesta. Altrimenti
il modulo seriale necessita di essere esplicitamente elencato in </CODE>etc/modules. 
Prima che i moduli divenissero popolari con Linux, il driver seriale era generalmente
costruito all'interno del kernel. Se esso &egrave; ancora incorporato nel kernel (potreste avere
selezionato questa opzione quando avete compilato il kernel) non lasciate che il modulo
seriale venga caricato. Se lo fate finirete con avere due driver seriali, viene rilevato che non
potete usare le porte seriali ed otterrete un errore "I/O error" se tentate di aprirle.
<P>Quando il modulo seriale &egrave; caricato, visualizza un messaggio sullo schemo circa
l'esistenza di porte seriali (spesso mostrando un IRQ errato). Ma una volta che
il modulo &egrave; usato da <CODE>setserial</CODE> per dire al device driver qual'&egrave; l'IRQ corretto, 
allora dovreste vedere una seconda schermata simile alla prima ma con il corretto IRQ, ecc. Vedere
<A HREF="Modem-HOWTO-9.html#set_serial">Cos'&egrave; Setserial</A> per ulteriori informazioni su
<CODE>setserial</CODE>. 
<P>Si potrebbe modificare il driver modificando il codice sorgente del kernel. La maggior
parte del driver seriale si trova nel file serial.c. Per dettagli inerenti la scrittura
di programmi per la porta seriale vedere Serial-Programming-HOWTO (attualmente in fase
di revisione da parte di Vern Hoxie).
  
<P>
<P>
<HR>
<A HREF="Modem-HOWTO-5.html">Avanti</A>
<A HREF="Modem-HOWTO-3.html">Indietro</A>
<A HREF="Modem-HOWTO.html#toc4">Indice</A>
</BODY>
</HTML>