I collegamenti con le periferiche

I collegamenti
I collegamenti
Pilotare le periferiche

Dopo avere esaminato i supporti fisici dei file e le relative periferiche (device), vediamo come i dati in essi contenuti sono trasferiti nella memoria centrale del computer per essere elaborati.

Le varie periferiche, presenti in un computer, hanno tempi di lavoro molto superiori a quelli della CPU; il collegamento diretto fra periferiche e la CPU comporterebbe quindi periodi inaccettabili di attesa e di inattività dell'unità centrale.

Il colloquio tra unità centrale e periferica avviene attraverso dispositivi di controllo della comunicazione detti interfacce e secondo regole comuni ad emittente e ricevente dette protocollo di comunicazione.

Quando la CPU esegue un'applicazione e richiede le prestazioni di una periferica, comunica con essa per ottenere le informazioni sulle caratteristiche fondamentali: per esempio, per un disco, il numero di cilindri, testine e settori. Questo consente di potersi poi riferire al disco, secondo una visione logica, come ad un insieme di blocchi sequenziali numerati.

I dispositivi hardware della periferica, per servire adeguatamente le richieste dell'unità centrale, devono compiere operazioni fisiche per cercare i dati contenuti nelle tracce e attendere che il settore passi sotto la testina per l'operazione di I/O.

Le unità periferiche, come dischi e stampanti, non possono essere controllate da una struttura integrata nell'unità centrale in quanto hanno caratteristiche molto diverse da essa in termini di velocità e modalità operative.
   

Negli elaboratori attuali si tende a separare nettamente l'unità centrale dalle unità di controllo (controller) delle periferiche.

Architettura di I/O

In generale, un controller è un dispositivo capace di pilotare una periferica, attraverso l'elaborazione di funzioni logiche secondo un programma scritto in un linguaggio relativamente semplice e riconducibile alle funzioni svolte dall'apparecchiatura da controllare.

Controller SCSI

Un controller si diversifica da un adattatore perché ha al suo interno un processore indipendente dalla CPU, mentre l'adattatore è un circuito direttamente posto a disposizione della CPU, adatto a collegare le unità esterne.

Host Bus Adapter (Fibre Channel)

L'unità centrale invia alle periferiche solo comandi di alto livello, indipendenti dal particolare device che lo esegue; la successione di controlli richiesta dai device per espletare la loro operazione è trasparente all'utente ed all'unità centrale. Questo consente alla CPU ed al controller di lavorare contemporaneamente. Per introdurre questo parallelismo tra l'attività di I/O e le operazioni della CPU, viene utilizzato il meccanismo dell'interrupt (interruzione).

La CPU attiva l'operazione di I/O e poi prosegue nella sua elaborazione: quando l'operazione di I/O è ultimata, un segnale del device (interrupt) interrompe l'attività della CPU che riprende il controllo della funzione globale di I/O richiesta.

Per realizzare la completa indipendenza tra le operazioni di I/O e l'attività della CPU, il sistema di elaborazione utilizza i bus di I/O, che sono i canali di comunicazione (channel) specializzati per eseguire autonomamente trasferimenti dati tra le periferiche e la memoria centrale. Questo tipo di canale può essere di tipo seriale o parallelo.

Controller IDE Vesa Local Bus

Naturalmente i programmatori non scrivono direttamente i comandi per le unità di I/O, bensì richiamano i sottoprogrammi del sistema operativo che forniscono tali comandi secondo le necessità dell'utente.

Viene così costruito in memoria centrale un programma di canale, costituito da un insieme di comandi che l'unità di I/O deve eseguire per ottenere il trasferimento dei dati richiesto dal programmatore.

A questo punto è sufficiente che la CPU comunichi al canale:

  • l'indirizzo iniziale della zona di memoria dove si trova il programma di canale da eseguire;
  • l'indirizzo della periferica con cui dialogare, che consiste in un numero che identifica univocamente il dispositivo;
  • l'ordine di esecuzione.

Dopo aver trasmesso al canale queste informazioni con l'esecuzione di un'istruzione di start, la CPU è libera dal controllo dettagliato dell'operazione e solo a trasferimento ultimato riceverà un segnale (interrupt) dal canale.

Il processo, con il quale i dati vengono trasferiti da un disco alla memoria centrale senza passare attraverso la CPU, si chiama DMA (Direct Memory Access): esso consente al sistema di continuare altre elaborazioni mentre i dati vengono ritrovati.

Lo standard DMA (Direct Memory Access) fa si che i dati provenienti dalle periferiche (hd, cd-rom...) vadano  direttamente alla RAM senza il passaggio obbligato dalla CPU, limitando così il carico elaborativo della stessa. Tutto questo grazie ai controller IDE delle più recenti  main-board, per intenderci, l'interfaccia che permette alle nostre periferiche (IDE, cd-rom, hd, etc) di colloquiare e scambiare dati ed informazioni con l'unita centrale.

I trasferimenti avvengono in modo indipendente dalla CPU del sistema che può effettuare qualunque altro lavoro, mentre lo scambio di dati avviene tra interfaccia e disco. L'interfaccia che gestisce il disco è in grado di accedere direttamente alla memoria del sistema e di scaricarvi i dati.

Le moderne interfacce ricevono ed eseguono più comandi contemporaneamente e la coda di esecuzione viene gestita dalla scheda di controllo per ottimizzare le prestazioni. Inoltre con la stessa interfaccia è possibile collegare all'unità centrale più periferiche, anche differenti dalle memorie di massa, come stampanti e scanner.

Un esempio
I dischi magnetici, come altri dispositivi con un elevato tasso di trasferimento, possono essere collegati ad un processore autonomo di I/O chiamato Direct Memory Access Controller (DMAC). In questo caso è possibile programmare tramite appositi flag di una porta di I/O l’attivazione del DMA per il dispositivo.
Grazie al DMAC, il nucleo del sistema operativo è in grado di avviare una operazione di I/O relativamente complessa, ad esempio la lettura di più blocchi di dati da disco in un’area prefissata di RAM, per poi passare a svolgere altre attività senza aspettare la terminazione dell’operazione di I/O. Quando il DMAC ha terminato di trasferire dati, invia un segnale alla interfaccia di I/O interessata, la quale genera, a sua volta, un segnale di interruzione.

I canali

Per comunicare con i dispositivi di I/O un elaboratore dispone di uno o più processori esterni a cui affidare il compito di comunicare direttamente con i dispositivi di I/O. Un'unità di questo tipo si chiama canale di I/O o anche Input Output Processor (IOP).

Un canale di I/O può essere dunque identificato con un processore con accesso diretto alla memoria (DMA) in grado di comunicare con i dispositivi di I/O. Mentre l'unità centrale si occupa delle elaborazioni dati, il canale di I/O trasferisce i dati fra la memoria centrale ed i dispositivi periferici.

E'importante fare attenzione anche ad un'altra definizione di canale, rintracciabile nei testi tecnici prchè utilizzata da IBM.
IBM usa il termine canale (channel) per indicare il flusso dei dati gestiti dal FEP (Front End processor). Il FEP è, nei mainframe IBM, il processore dedicato alla gestione del traffico ed all'uso dei bus.


La comunicazione fra l'unità centrale ed il canale di I/O generalmente segue questo schema:

  • L'unità centrale fa iniziare l'operazione di I/O attivando il canale di I/O con le indicazioni di:
    • quale mezzo periferico deve usare,
    • l'indirizzo in memoria centrale a partire dal quale può trovare altre istruzioni.
L'unità centrale può conoscere lo stato del canale di I/O e lo stato di avanzamento delle operazioni, con opportune istruzioni che esaminano il registro di stato del canale di I/O, in modo da poter prendere decisioni circa la gestione di varie operazioni di I/O memorizzati in memoria centrale in modo analogo ai programmi che sono eseguiti dall'unità centrale.
  • Il canale di I/O:
    • legge dalla memoria centrale i comandi che deve eseguire (questi sono chiamati comandi per distinguerli dalle istruzioni eseguibili dall'unità centrale),
    • le interpreta,
    • esegue sul mezzo le operazioni indicate,
    • comunica poi all'unità centrale che ha finito di eseguire il proprio programma tramite un'interruzione.

Il canale di I/O esegue dei veri e propri programmi detti programmi canale.

I bus

Il bus è un "canale" attraverso cui le varie parti di un computer dialogano fra loro. Il bus di sistema, presente in tutti i microcalcolatori, è composto da 50 a 100 fili in rame incisi sulla scheda madre ed è dotato di connettori separati ad intervalli regolari per l'innesto dei moduli di memoria e di I/O. Si tratta di una serie di connessioni elettriche ognuna delle quali può trasmettere cifre binarie (0 o 1) in successione. L'insieme delle cifre binarie trasmesse è interpretato dai vari componenti del sistema secondo protocolli prestabiliti.

E' praticamente impossibile localizzare visivamente il/i bus all'interno di un elaboratore.

In definitiva si può dire che un bus è un insieme di fili in grado di trasmettere una collezione di segnali e protocolli (tipi di transazioni che un bus supporta, ossia lettura e scrittura a blocchi o per singoli byte, tra uno o più dispositivi, ecc.).

Un bus esteriormente si presenta come piste su una scheda stampata o come un gruppo di connettori e la cui logica è distribuita su ciascuna delle schede che implementano il protocollo e la connessione.

Il bus prevede più fili per la trasmissione di interrupt: ad esempio nei bus per PC della famiglia ISA tali fili, in numero di 15, vengono chiamati fili IRQ (Interrupt ReQuest): ogni scheda connessa al bus deve avere un proprio numero di IRQ univoco in modo da distinguere le diverse interruzioni. I vecchi bus ISA prevedevano, al momento dell'installazione, l'impostazione manuale dei valori IRQ tramite switch o jumper sulle schede o via software ma, già a partire dagli anni '80, sono nati bus che prevedono l'uso di componenti accessorie e sistemi operativi autoconfiguranti (Plug and Play).

Un bus che collega due componenti appartenenti alla stessa scheda integrata è detto INTERNAL BUS, se collega due componenti generici è detto EXTERNAL BUS. Se c'è un solo bus esterno è detto System bus.

I bus quindi interterconnettono le principali componenti dell'unità centrale, in particolare CPU, memoria e dispositivi di I/O, trasportando indirizzi (address bus), dati (data bus), istruzioni (data bus) e segnali di controllo (control bus).

I dispositivi collegati al bus possono trovarsi sia nella condizione di dover trasmettere (master) che in quella di dover ricevere (slave). Ad esempio quando la CPU ordina al controller del disco di leggere o scrivere un blocco, la CPU si comporta da master ed il controller da slave. In genere tutti i dispositivi possono funzionare sia come master sia come slave eccetto la memoria che si comporta sempre da slave.

Per interconnettere più unità diverse esistono due approcci possibili:

  • il primo è quello di creare dei percorsi punto-punto sino a interconnettere tutte le unità,
  • il secondo è quello di utilizzare un unico percorso condiviso e istituire delle regole per controllare il traffico.

Sotto l'influenza della tecnologia dei personal computer è entrato nell'uso corrente distinguere più bus:

  • il local bus: è il bus che connette CPU e memoria; le caratteristiche specifiche di questi bus sono legate sostanzialmente a quelle del processore e non hanno alcuna ripercussione, ad esempio, sui dispositivi di input/output, connessi ad altro bus. Il local bus è in grado di operare a 32 bit e con frequenza di cicli di 33Mhz che corrisponde alla velocità del flusso delle informazioni dell'ordine dei 132 Megabyte al secondo.
  • l'I/O bus: è il bus cui sono connessi i dispositivi di I/O ed è quasi sempre separato dal local bus. Le caratteristiche specifiche di questi bus hanno ripercussioni rilevanti sul resto del sistema in quanto tutti i dispositivi esterni da connettere (dischi, nastri, stampanti, video, ecc.) devono essere collegati tramite opportune schede di interfaccia (dotate degli opportuni connettori) ad esso compatibili. Questo tipo di bus è in grado di operare a 5 Mb al secondo.
  • il system bus: è un bus utilizzato per architetture diverse dal personal computer, connette la CPU con le altre componenti del computer come memoria e dispositivi di input/output.

Vista la loro velocità di trasferimento delle informazioni (5 Mb al secondo), i tradizionali bus di I/O non sono adatti per trasferire le informazioni dalle periferiche ad una velocità sufficiente per le applicazioni di tipo multimediale (immagini, suoni, filmati).
Viene usato allora il local bus in grado di operare a velocità decisamente superiore rispetto ai tradizionali bus di I/O (132 Megabyte al secondo). In sostanza il bus locale esclude le periferiche dal bus di I/O e le connette alle altre unità del sistema elaborazione, CPU e memoria centrale o alle memorie dedicate, per esempio la memoria video, con veloci flussi.

Il risultato complessivo è un trasferimento rapido di informazioni tra CPU e periferiche, che risulta importante nelle moderne applicazioni multimediali.

Un local bus è in grado di gestire periferiche diverse (da tre a cinque) e di alte prestazioni:

  • adattatori video,
  • schede per l'acquisizione di filmati,
  • schede musicali,
  • controller di dischi magnetici e ottici,
  • connessioni in rete,
  • etc.

Queste periferiche possono essere integrate direttamente sulla piastra principale (scheda madre o motherboard) del computer, oppure aggiunte successivamente utilizzando gli alloggiamenti (slot) di espansione, nei quali connettere le diverse schede per le periferiche.

Il local bus integra e non sostituisce il lavoro dei bus tradizionali di I/O ai quali rimangono connessi i dispositivi, quali la stampante o il modem, che non necessitano di grandi velocità.

Nella fascia dei personal computer ci sono vari modelli commerciali di local bus:

  • i più diffusi sono PCI (Peripheral Component Interconnect), sviluppatosi a partire dalla seconda metà degli anni '90 per l'industria dei PC;
  • VESA (Video Equipment Standards Associatíon) local bus.

I tradizionali bus non locali sono invece ISA, EISA e MCA.

La memoria cache

Per intervenire efficacemente in tutte le situazioni nelle quali l'avanzamento dei processi è condizionato dai rallentamenti dovuti ai tempi diversi di elaborazione da parte delle unità del sistema è stata introdotta la memoria cache. Questo tipo di memoria è una, così detta, memoria temporanea utilizzata per trasferire dati da un dispositivo ad un altro operanti a velocità di lavoro diverse (uno veloce e l'altro lento).

Possiamo trovare memorie cache:

  • nella comunicazione tra memoria RAM e unità a disco,
  • nel trasferimento dati tra memoria RAM e CPU quando la RAM non è in grado di servire tempestivamente le richieste della CPU.

In commercio esistono infatti memorie RAM caratterizzate da velocità e costi diversi, adatte quindi ad operare con CPU funzionanti a frequenze diverse.

Una CPU veloce, in assenza di cache, dovrebbe compiere a vuoto molti cicli di elaborazione (colpi di clock) prima che la RAM sia pronta a rispondere, data la notevole differenza di velocità tra CPU e RAM, oltre ai cicli necessari per attivare la connessione sul bus e l'invio delle richieste. Per esempio una CPU a 100 Mhz ha cicli di 10 nanosecondi ciascuno, mentre il tempo medio di accesso a una memoria RAM è di 100 ns.

Per questo si affianca alla memoria RAM normale, presente in quantità anche elevata, una piccola cache memory, di dimensioni comprese tra 256 e 512 Kbyte, di velocità superiore (per esempio 10 ns), che serve da rifornimento veloce per la CPU.

Anche per il trasferimento dei dati tra la memoria RAM e una periferica si usano memorie cache di dimensioni comprese tra 128 e 256 Kbyte, in lettura e scrittura: queste consentono di organizzare i dati prima che il processore li richieda (cache di lettura), ed accettare i dati prima che l'unità sia pronta a trascriverli (cache di scrittura).

L'uso di una cache per un disco è dovuto alla maggior differenza tra le velocità del disco e della RAM (50.000 volte) rispetto alla differenza che intercorre tra quelle della RAM normale e della cache per la CPU (alcune volte).