prof. Nunzio Brugaletta | PC inside |
Come già accennato, ogni periferica è collegata ad una scheda controller che ha il compito di pilotare la periferica e gestire l'accesso al bus.
Quando la CPU riceve, da un programma, una richiesta di lettura di dati dall'hard disk, invia una richiesta al controller che a sua volta invia all'unità la richiesta per la lettura dei dati. L'unità invia i dati al controller che è in grado di scrivere o leggere in memoria senza fare intervenire la CPU, effettuando quello che viene chiamato DMA (Direct Memory Access).
L'approccio di tipo DMA comporta una maggiore velocità dell'elaborazione, specialmente in un contesto di uso massiccio della periferica: l'hard disk è infatti utilizzato non soltanto per conservare dati da elaborare e programmi per la loro elaborazione, ma anche per lo swapping delle pagine dei programmi in esecuzione. L'accesso diretto in memoria consente alla CPU di svincolarsi dal trasferimento di dati e, parallelamente al lavoro di trasferimento di dati da parte del controller, effettuare altre elaborazioni.
La CPU, che controlla l'esecuzione di un programma, ha necessità di conoscere i risultati delle operazioni richieste alle periferiche e, tutto ciò, per qualsiasi periferica anche per quelle che non effettuano accessi diretti in memoria. Si pensi, infatti, ai dati inviati, per esempio, ad una stampante: si ha necessità di sapere se la stampa è andata a buon fine o se, per esempio, non esisteva una stampante collegata, al fine di gestire in maniera opportuna la continuazione del programma.
Il problema principale della intercomunicazione fra CPU e periferica è il fatto che gli eventi che deve gestire la CPU sono eventi asincroni: non si può prevedere in anticipo quando, per esempio, la stampante finisce il proprio lavoro dipendendo questo da molti fattori variabili come velocità della stampante stessa, quantità di testo, velocità della connessione, distanza ecc...
La gestione degli eventi asincroni viene effettuata con il metodo degli interrupt (interruzioni):
la periferica quando vuole interloquire con la CPU, lancia un segnale di interrupt per mezzo del controller
il segnale viene intercettato da un apposito circuito che notifica alla CPU la presenza di una interruzione da parte di una specifica periferica
la CPU sospende il programma in esecuzione in quel momento, e lancia l'interrupt handler, programma di servizio dell'interruzione, che gestisce la comunicazione con la periferica che ha richiesto i propri servizi
servita l'interruzione, il programma, sospeso in precedenza, viene ripristinato e può, così, continuare la propria esecuzione.
Mano a mano che le CPU e tutti gli altri dispositivi diventavano sempre più veloci, si pose il problema del carico del bus che non riusciva più a gestire il traffico dei dati. Il problema poteva essere risolto progettando un nuovo tipo di bus che permettesse velocità di trasferimento maggiori, ma, in questo caso, gli utenti che avessero voluto utilizzare con i nuovi computer una stampante o un modem acquistati precedentemente, non avrebbero potuto farlo.
La soluzione adottata fu quella dei bus multipli:
Il bus di tipo più vecchio, e lento, è il bus ISA (Industry Standard Architecture) sostituito nelle macchine più recenti dal bus PCI (Peripheral Component Interconnect) molto più veloce. La CPU dialoga con la memoria principale utilizzando un bus dedicato ad alta velocità.
I collegamenti fra i vari bus sono garantiti da circuiti ponte (bridge PCI e bridge ISA).
Anche nella foto della scheda madre, riportata in una pagina precedente, sono visibili nella parte in basso a sinistra, gli slot di tipo PCI e di tipo ISA per le connessioni con i relativi controller.
Gli slot di tipo ISA, e quindi il relativo bus, tendono, nelle configurazioni più nuove, a scomparire. Il bus ISA viene ad essere sostituito, per esempio, dal bus PCI-X o dal bus PCI-Express (noto anche con la sigla PCIe o PCIx), quest'ultimo in uso per le schede grafiche.
http://ennebi.solira.org | ennebi@solira.org |