Questo sito contribuisce alla audience di

elaboratóre

Guarda l'indice

Definizione

sm. (f. -trice) [sec. XX; da elaborare]. Classe di macchine per la gestione dell'informazione, di cui l'elaboratore elettronico digitale è la versione più rappresentativa e diffusa, per flessibilità d'uso e importanza socio-economica; questa classe comprende anche l'elaboratore analogico e quello ibrido analogico-digitale. L'elaboratore può essere definito come una macchina capace di compiere operazioni su informazioni rappresentate con grandezze fisiche opportune, mediante procedimenti che si attuano in maniera autonoma per effetto di programmi costituiti da istruzioni precaricate o modificabili.Nella versione digitale, esso è basato sul classico modello concettuale della macchina di Von Neumann, che prevede la presenza di un processore, di una memoria primaria e di una secondaria, di dispositivi di input-output e di un bus di sistema deputato a collegare tutte queste unità.

Elaboratori elettronici digitali: funzioni e caratteristiche

L'elaboratore è uno strumento idoneo a elaborare dati, testi, immagini, suoni e altre informazioni in forma codificata e in base a un programma. Esso è in grado di eseguire quindi operazioni di vario genere su strutture di dati, che rappresentano nel “mondo codificato della macchina” l'informazione oggetto di trattamento. Queste operazioni sono in sintesi il riconoscimento, la memorizzazione e la trasformazione dei dati o della loro organizzazione, secondo algoritmi codificati nella forma di programmi. Con la trasmissione dei dati a dispositivi di uscita, o la loro acquisizione da dispositivi di ingresso, l'elaboratore realizza la comunicazione con “il mondo esterno” e, per esempio, restituisce l'informazione codificata al suo interno in forma intelligibile da altri elaboratori o da un utente umano. I dati decodificati diventano, a seconda dei casi: simboli numerici e calcoli; lettere dell'alfabeto e testi; elementi di immagine e figure, disegni, grafici, fonemi e note, parole e musica. La potenza di elaborazione su quantità molto grandi di dati, in tempi brevissimi, secondo logiche prefissate e flessibili è alla radice del successo dell'elaboratore elettronico digitale e degli sviluppi tecnologici più dinamici, innovativi e pervasivi dell'epoca contemporanea. La rivoluzione dell'informazione, che storici, sociologi ed economisti riconoscono negli sviluppi attuali, ha infatti nell'elaboratore uno dei suoi principali strumenti. Nella versione “personal computer” esso ha raggiunto, nel giro di un decennio, una diffusione capillare nel mondo industrializzato, con centinaia di milioni di esemplari nelle fabbriche, negli uffici, nelle case. L'informatica, un sistema concettuale e pratico del tutto nuovo, è così alla portata di tutti. All'altro estremo, nelle versioni dei grandi e grandissimi elaboratori gestionali e dei supercalcolatori scientifici (mainframe), esso ha ampliato il campo dei problemi che, per volumi di dati in gioco o per complessità e onerosità di calcolo, sarebbero altrimenti irresolubili. Fra questi due estremi esiste e si rinnova in archi di tempo molto brevi un vero e proprio universo di macchine dalle prestazioni più diverse e con costi accettabili per il sistema produttivo: minicalcolatori, workstation (stazioni di lavoro con potenza elaborativa e corredo di periferiche in genere superiore a quelli dei PC collegati in rete locale o Internet); microprocessori per il controllo di macchinari e di processi, ecc.. La denominazione di elaboratore elettronico digitale sintetizza le seguenti peculiarità essenziali: A) l'elaborazione dell'informazione (il termine elaboratore convive con il termine calcolatore, che ha le proprie radici nella storia dell'elaborazione automatica, ma con un significato ristretto al solo calcolo); B) il ruolo dell'elettronica, dato che l'elettrone è il veicolo dell'elaborazione (anche se il fotone potrebbe essere un futuro competitore, come già avviene per la trasmissione dell'informazione con fibre ottiche); C) la digitalizzazione, che specifica l'impiego di valori discreti, nella pratica due (per esempio le tensioni +5 V; 0V), astrattamente identificati come due stati codificati con uno e zero. Le informazioni codificate in cifre binarie, il cui numero dipende dalla ricchezza dell'informazione da rappresentare e dalla precisione della rappresentazione stessa, vengono elaborate tramite la normale aritmetica in base due realizzata da circuiti elettronici capaci di utilizzare le regole dell'algebra di Boole. Quest'algebra manipola variabili a due stati e fu ideata nell'Ottocento come un meccanismo logico rigoroso per operare su affermazioni di cui si intenda determinare la verità o falsità: essa si presta alle operazioni logiche necessarie all'elaboratore per svolgere le proprie funzioni. Il calcolo algebrico ordinario rientra nello schema dell'algebra di Boole, se su base binaria. Pertanto sia le operazioni logiche sia le operazioni aritmetiche possono usare gli stessi schemi circuitali di base. In altri termini, tramite l'algebra di Boole, è possibile codificare il programma di elaborazione dell'informazione (istruzioni), ma anche rappresentare nello stesso modo l'informazione stessa (dati). Istruzioni e dati diventano così una serie di zeri e uno e sono indistinguibili; la loro natura viene riconosciuta grazie alla loro posizione in memoria (indirizzo) e nei registri (sistemi di accumulo temporaneo di indirizzi, istruzioni e dati), che l'elaboratore stesso definisce. Ne consegue che, in linea di principio, l'elaboratore non svolge necessariamente una funzione determinata a priori, ma esegue le funzioni definite dai programmi: calcoli scientifici, elaborazione di testi e di immagini, sintesi del parlato, banca di dati, elaborazioni logiche (intelligenza artificiale), ecc. La macchina ha quindi capacità e impieghi generali. I suoi limiti “fisici” sono nella potenzialità elaborativa. Quest'ultima ha i suoi parametri più importanti nella velocità di elaborazione (in genere misurata in milioni di istruzioni eseguibili al secondo, MIPS), nella capacità di memoria, nella velocità di comunicazione. La macchina inoltre, essendo programmabile, si presenta come un sistema complesso in cui si possono identificare componenti fisici (la macchina hardware) e logici (i programmi software) e in cui il bilanciamento fra queste due grandi categorie, a un dato stadio di sviluppo tecnologico, è un problema di progettazione. La logica cablata è rigida mentre quella realizzata con programmi è flessibile; d'altra parte la soluzione hardware permette più elevate velocità di funzionamento ma soprattutto si presta alle economie di serie, di miniaturizzazione e di progettazione automatica che, al contrario, la soluzione software non consente.

Elaboratori elettronici digitali: i primi calcolatori elettromeccanici

Dopo i tentativi, anche molto significativi ma pur sempre parziali, dei precursori , una prima concezione completa dei calcolatori a programma fu elaborata dall'inglese C. Babbage con la sua “macchina analitica”. La macchina di Babbage non venne realizzata se non in qualche sua parte, ma il suo schema logico e funzionale si ritrova alla base dei moderni elaboratori elettronici. Il primo elaboratore elettromeccanico, chiamato Z3 e realizzato in Germania nel 1941, impiegava componenti meccanici ed elettromeccanici (relè); il programma, introdotto mediante banda perforata, era interamente memorizzato e consentiva un'esecuzione molto veloce delle operazioni aritmetiche senza necessità di alcun intervento umano. Nel 1944, negli Stati Uniti, l'Harvard University e l'IBM misero a punto un elaboratore elettromeccanico molto avanzato (Mark I). Anch'esso disponeva di programma memorizzato introdotto da banda perforata e, a differenza dello Z3 in cui i dati venivano introdotti manualmente, prevedeva l'impiego di schede perforate. Nello stesso tempo veniva realizzato in Gran Bretagna (1943) il primo elaboratore elettronico digitale, il Colossus, che peraltro rimase segreto fino al 1975. L'ENIAC, realizzato negli USA nel 1946 (e impiegato fino al 1955), è pertanto il progenitore dei cosiddetti elaboratori elettronici di prima generazione, in quanto si è potuto mettere a frutto l'esperienza acquisita immediatamente. L'evoluzione dell'elettronica digitale nel dopoguerra (dai tubi termoelettronici ai circuiti integrati monolitici a integrazione su larghissima scala, Very Large Scale Integration, VLSI) ha cambiato radicalmente la capacità operativa dei moderni sistemi di elaborazione. Nonostante il principio di funzionamento degli elaboratori non sia sostanzialmente mutato, le modifiche nella sua architettura dettate dalla crescente complessità e potenza della macchina e dall'esigenza di sfruttare appieno i progressi tecnologici sono rilevanti.

Elaboratori elettronici digitali: organizzazione logica

Un elaboratore elettronico digitale è costituito da un insieme di organi interni collegati da bus e interagenti fra loro. In rapporto alle due funzioni di base di comunicazione con il mondo esterno e di elaborazione vera e propria, si possono distinguere gli organi per l'acquisizione di dati e programmi e per la restituzione dei risultati (memorie e interfacce ingresso/uscita) e gli organi adibiti all'elaborazione, raggruppati nell'unità centrale (CPU). Quest'ultima si articola in una o più unità aritmetiche e logiche (ALU) e in un'unità di controllo. L'unità centrale CPU è in grado di coordinare le memorie principali dell'elaboratore nonché, tramite un'interfaccia di comunicazione, una serie di organi esterni denominati “unità periferiche”. L'unità aritmetica e logica (ALU) svolge il lavoro vero e proprio dell'elaboratore trattando le informazioni codificate, su comando dell'unità di controllo. Essa effettua operazioni sui dati contenuti in memoria: di tipo aritmetico (somme, sottrazioni, moltiplicazioni, divisioni e le operazioni derivate) o di tipo logico (confronto fra configurazioni, trasferimenti interni di dati tra le diverse unità, scelte effettuate in base a logiche prefissate che decidono in merito all'esecuzione o meno dell'istruzione successiva). L'ALU comprende i registri per la memorizzazione temporanea dei dati in via di elaborazione e i circuiti per le operazioni logiche e aritmetiche. L'unità di controllo comanda l'attività di elaborazione e i processi di informazione delle altre unità eseguendo sequenzialmente un programma, e realizzando le seguenti attività: A) preleva le istruzioni del programma stesso dalla memoria e le interpreta; B) attiva o disattiva le vie di comunicazione (bus); C) controlla, entro certi limiti, la corretta esecuzione del programma, intervenendo in caso di guasto o di errata istruzione, per garantire un'elevata affidabilità di esecuzione dell'elaborazione. L'attività dell'unità di controllo è a sua volta guidata dal clock di sistema. Questo è una sorta di contatore (una sua singola fase è detta ciclo), che scandisce la velocità con cui le istruzioni vengono eseguite dal processore stesso. L'interpretazione di alcune istruzioni richiede un singolo ciclo per la loro esecuzione, mentre altre, più complesse, possono richiederne diversi. Nei processori più innovativi possono essere eseguite più istruzioni in un singolo ciclo di clock. La frequenza del clock di un processore è uno degli indici della sua velocità e funzionalità. La “memoria” ha come funzione quella di immagazzinare dati e istruzioni. Essa è organizzata in parole, di dimensione costante e dipendente dall'architettura dell'elaboratore, in modo che ogni parola contenga un'unità informativa. La corrispondenza fra posizione fisica dei dati e loro organizzazione logica è mantenuta nelle cosiddette mappe di memoria. Generalmente, insiemi di dati collegati logicamente, per esempio un file o una lista, sono mantenuti in parole di memoria contigue (blocco). A seconda delle politiche di organizzazione della memoria, insiemi di dati di dimensioni superiori a quelli del primo blocco libero, possono essere disposti in blocchi separati anziché in un unico, dando luogo a fenomeni di frammentazione. Le mappe mantengono quindi anche le informazioni sulla corretta sequenza in cui, dai vari blocchi, si può ricostruire l'insieme di dati originari. La memoria si distingue in principale e secondaria (detta anche memoria di massa). La memoria principale è quella che contiene i programmi in esecuzione (compreso il sistema operativo) e i dati su cui tali programmi operano. Essa si compone in effetti di due diversi tipi di memoria: una permette una memorizzazione dei dati in maniera permanente (ROM, Read Only Memory, memoria di sola lettura), mentre la seconda, identificabile con la memoria di lavoro dell'elaboratore, permette una continua modifica del proprio contenuto (RAM, Random Access Memory, memoria ad accesso casuale: termine improprio per individuare una memoria a lettura/scrittura). La memoria ROM è destinata a mantenere le istruzioni e i dati necessari al caricamento completo del sistema operativo nella cosiddetta fase di avviamento (bootstrap). La memoria RAM si definisce memoria volatile, in quanto richiede una continua alimentazione per ricostruire il proprio contenuto, che non potrà quindi essere mantenuto allo spegnimento del computer. Lo scopo di questa memoria non è dunque quello di mantenere le informazioni nel tempo, ma solo per il periodo necessario a che un programma venga eseguito, garantendo un rapido accesso ai dati necessari per l'esecuzione. È da qui, infatti, che la CPU preleva i programmi da eseguire e i dati su cui effettuare le operazioni, secondo le istruzioni dettate dai programmi stessi. La memoria secondaria è più lenta di quella principale, ma è presente in quantità molto maggiore, costituendo un organo esterno rispetto al nucleo dell'elaboratore. Essa ha lo scopo di preservare le informazioni nel tempo: si tratta, dunque, di una memoria permanente, che mantiene le sue informazioni anche allo spegnimento dell'elaboratore. Inoltre la tastiera alfanumerica, collegata a un codificatore digitale, ha un ruolo particolare e con l'ausilio di un visualizzatore (video o display) permette il colloquio fra utente ed elaboratore. Altri sistemi di ingresso immettono dati automaticamente (lettori di schede, di nastri, di dischi, di immagini, ecc.) o facilitano l'accesso all'elaboratore (light pen, mouse, trackball, joystick, ecc.). Tra le unità di uscita dei dati rientrano i visualizzatori citati e i sistemi reversibili di lettura (per dischi, nastri magnetici, ecc.). Stampanti e tracciatori di curve continue (plotter) sono le uscite che possono fornire l'informazione su supporto cartaceo. L'interazione con mondi di realtà virtuale è spesso basata su dispositivi particolari, quali il casco o il guanto, ma si stanno sviluppando sistemi più sofisticati: in particolare dispositivi multimodali possono essere sfruttati per interagire sia con ambienti di realtà virtuale sia con programmi di uso comune. Per esempio in situazioni in cui non sia possibile usare una tastiera o un mouse si può ricorrere all'uso di voce e di gesti coordinati tra loro: sensori in grado di rilevare l'orientamento dello sguardo o dei gesti permettono di indicare aree dello schermo a cui applicare comandi espressi vocalmente. Queste forme di interazione sono sperimentate soprattutto in ambito militare o per permettere la comunicazione a persone che presentano problemi motori. In generale, la diffusione dell'elettronica e la miniaturizzazione dei processori permettono di incorporare elaboratori in apparati di uso quotidiano, in modo da tradurre le uscite di un elaboratore in comandi per la gestione di questi apparati.

Elaboratori elettronici digitali: il software

La struttura software di un elaboratore è parte integrante della macchina che, proprio per questo, acquista flessibilità e adattabilità alle necessità dell'utente. In generale essa è costituita dalle seguenti categorie di programmi: A) il sistema operativo, un insieme di programmi presenti nell'elaboratore che ne gestiscono le risorse e che consentono all'unità centrale, dopo l'avviamento (bootstrap), il colloquio con l'utente, l'esecuzione dei comandi ricevuti, la comunicazione con altri elaboratori e in generale con le sue periferiche. B) L'insieme dei linguaggi di programmazione e dei relativi compilatori; essi permettono di scrivere programmi in linguaggi comprensibili all'uomo, che vengono tradotti dai compilatori o dagli interpreti nel linguaggio macchina. C) I programmi applicativi, cioè tutti quelli il cui scopo non è quello di permettere il funzionamento del computer, ma di soddisfare le specifiche esigenze dell'utente e che possono essere eventualmente da questi sviluppati. Il sistema operativo trasforma l'elaboratore in macchina di facile accessibilità e la sua potenzialità è fattore essenziale per utilizzarne in modo completo le prestazioni. Particolare rilievo ha assunto a partire dalla fine degli anni Novanta il sistema Linux, frutto della cooperazione volontaria di un gran numero di programmatori sparsi in tutto il mondo. L'evoluzione dei sistemi operativi prevede un sempre maggior ricorso a interfacce grafiche (GUI), per facilitare l'interazione dell'utente con la macchina. I sistemi operativi si distinguono quindi principalmente per il tipo di interfaccia utente, che può essere “a grafica” oppure “a caratteri”. Appartengono alla prima categoria quelli sviluppati appositamente per il mondo dei PC e quindi Windows, Mac-OS, Amiga OS e OS/2 di IBM. Alla categoria dei sistemi operativi a caratteri appartengono i sistemi operativi utilizzati originariamente nei grossi centri di calcolo come la famiglia dei sistemi Unix, Solaris, Dec o Linux, che possono comunque essere dotati di interfaccia grafica, residente su terminali dotati di protocollo X-term. Sfruttando questa possibilità, questi sistemi sono poi stati resi disponibili anche agli utenti finali, prima su workstation e poi anche su personal computer, facendo ricorso a interfacce grafiche. Fra i linguaggi di alto livello storicamente più importanti ricordiamo il Pascal (che ha integrato i principi della programmazione strutturata), il COBOL (specialmente concepito per le applicazioni commerciali), il FORTRAN (particolarmente utilizzato per il calcolo scientifico), l'ADA (utilizzato soprattutto nell'ambito di progetti finanziati dal Dipartimento della Difesa statunitense e che ha introdotto primitive per la sincronizzazione di processi concorrenti), il C e la sua versione a oggetti C++ (che uniscono caratteristiche di alto livello con primitive per una programmazione vicina al livello macchina, permettendo performance maggiori), il BASIC (che ha conosciuto la sua maggiore fortuna come linguaggio di programmazione per i primi personal computer, e successivamente evoluto nel Visual Basic, particolarmente utilizzato per costruire semplici prototipi di sistemi interattivi), mentre a partire dagli anni Novanta ha assunto particolare importanza il linguaggio Java, grazie alle sue caratteristiche di portabilità e di eseguibilità su qualsiasi piattaforma senza necessità di ricompilazione, così da renderlo il linguaggio di scelta per la creazione di applicazioni eseguibili all'interno di browser web (applet). Ogni elaboratore dispone poi di un proprio linguaggio macchina nel quale va tradotto qualsiasi linguaggio. Un livello intermedio è costituito dal linguaggio di assembly, che fornisce dei codici mnemonici per l'accesso alle istruzioni del livello macchina e che viene quindi interpretato dall'assembler dell'elaboratore. Infine, i sistemi operativi permettono una programmazione a basso livello della gestione di risorse attraverso propri linguaggi di comandi, quali quello di shell di Unix, o quello DOS. L'insieme delle applicazioni disponibili è vastissimo, data la grande versatilità dell'elaboratore stesso. I primi elaboratori avevano lo scopo di eseguire calcoli, dunque i primi programmi applicativi erano essenzialmente di tipo matematico, ma ben presto ci si rese conto che potevano vantaggiosamente essere utilizzati per memorizzare informazioni e per elaborarle. Tra i programmi applicativi va evidenziata una particolare categoria, detta software di base, che si interpone tra il sistema operativo vero e proprio e le applicazioni utente. Si tratta generalmente di data base, come Oracle, Informix o DB2 e dei servizi che gestiscono la comunicazione tra i vari processi che sono concorrentemente in esecuzione su una stessa macchina o su più macchine collegate in rete. Una particolare categoria di software è il firmware, che sostituisce l'hardware e quindi viene collocato nella memoria ROM in sede di costruzione dell'elaboratore. Il firmware è costituito da microprogrammi, studiati in genere per l'unità di controllo; per esempio un moltiplicatore può essere realizzato con circuiti cablati (hardware) o, in alternativa, mediante microprogrammi (firmware) che pilotano il sommatore per effettuare la moltiplicazione.

Elaboratori elettronici digitali: i primi studi

La quasi totalità dei moderni elaboratori elettronici digitali si basa sul principio realizzativo proposto nel 1946 da J. von Neumann, che prevede l'esecuzione delle operazioni in sequenza e un'unica memoria per raccogliere sia i dati sia le istruzioni, anch'esse espresse mediante simboli numerici codificati aventi la stessa struttura dei dati. Il principio viene applicato agli elaboratori elettronici di prima generazione, ossia a quelli realizzati con la tecnologia termoelettronica (tubi a vuoto). Questi primi elaboratori funzionano con ordini impartiti mediante connessioni elettriche modificabili (cavi, da cambiare a ogni cambiamento di programma) per cui risulta necessario fermare la macchina per alterare la sequenza delle istruzioni. Lo schema di Von Neumann aumenta quindi enormemente la flessibilità e la capacità di autogestione dei sistemi. Le applicazioni riguardano inizialmente i calcoli scientifici e tecnici (per esigenze militari di balistica, di fisica nucleare, ecc.); quasi contemporaneamente vengono sviluppati modelli meno mastodontici e costosi per applicazioni di tipo generale (general purpose) che trovano impiego nelle università, nella burocrazia, nell'industria, oltre che per calcoli scientifici e progettuali, per operazioni statistiche (censimento) e commerciali (fatturazioni, ecc.). A confronto con le soluzioni di ultima generazione l'architettura è embrionale e dettata dalla tecnologia dei tubi a vuoto, ingombranti, fragili e poco affidabili: un'unità aritmetica con pochissimi registri e con controllo diretto delle unità periferiche; un'unità di controllo costruita con logica cablata, che realizza una sola funzione per componente. A un ingombro rilevante (dato che la sola unità aritmetica occupa un locale) fa riscontro una capacità di memoria molto piccola (per esempio, 1000 parole da 16 bit per la memoria centrale, realizzata con linee di ritardo in mercurio e particolari tubi a raggi catodici). I supporti per i dati in ingresso e in uscita sono schede e nastri perforati, compatibili con i flussi di informazioni richiesti (quantità limitate e basse velocità – circa 50 secondi per un'operazione). I linguaggi di programmazione sono linguaggi macchina o assemblatori elementari, dove a ogni istruzione del linguaggio assemblatore corrisponde una specifica istruzione del linguaggio macchina. Il funzionamento è a lotti (batch processing) per cui i dati vengono raccolti e solo in seguito sottoposti tutti insieme all'elaboratore con attese molto lunghe. Non esistono specializzazioni per il personale, per cui l'analisi del problema, la programmazione, la verifica della procedura e il controllo dell'esecuzione vengono svolte dallo stesso addetto. La ricerca guasti, particolarmente complessa e gravosa, è eseguita manualmente mediante diagnosi sui singoli circuiti.

Elaboratori elettronici digitali: gli anni Cinquanta e Sessanta

Alla fine degli anni Cinquanta le innovazioni imprimono una svolta radicale con la sostituzione dei tubi a vuoto con i transistori e la realizzazione di unità di memoria a nuclei magnetici di ferrite, aventi ingombro sensibilmente ridotto. Convenzionalmente questi nuovi elaboratori sono indicati come “elaboratori della seconda generazione”, macchine con dimensioni cento volte minori, che dissipano mille volte meno energia e sono senza confronto più affidabili, più veloci e sostanzialmente più economiche. L'unità aritmetica e logica si potenzia arricchendosi di registri mentre l'architettura di base evolve verso un controllo a due livelli: ogni unità è provvista di un proprio sottosistema di controllo, mentre il coordinamento è affidato a un'apposita unità di temporizzazione. Per aumentare la velocità di elaborazione viene introdotta nell'elaboratore la possibilità di acquisire e coordinare le richieste di interruzione (interrupt) da parte delle unità periferiche. Il caricamento dei dati, per esempio, interrompe momentaneamente l'esecuzione, che riprende automaticamente alla fine. Vengono realizzati elaboratori con accesso diretto ai dati in memoria. Un'unità di processo aggiuntiva specializzata per la gestione delle unità periferiche svincola l'unità centrale di processo (CPU) da questa funzione permettendole di proseguire indisturbata nell'esecuzione del programma. L'aumentata mole dei dati e l'incremento della velocità amplia il ruolo dei sistemi periferici a nastro magnetico come memorie ausiliarie di massa. Limiti nella lettura dei dati memorizzati su nastro, in quanto la ricerca dell'indirizzo è di tipo sequenziale, favoriscono lo sviluppo di memorie ausiliarie magnetiche a tamburo e a dischi rigidi, più rapide in quanto ad accesso casuale. Si verifica anche una separazione fra macchine scientifiche, che richiedono alte velocità di elaborazione e grandissima flessibilità nel variare algoritmi e procedure, e macchine gestionali, in grado di operare su grandi masse di dati con elaborazioni semplici e ripetitive, separazione dettata dal grado di maturazione tecnologica. Infine si sviluppano elaboratori in tempo reale (real time processing) e sistemi finalizzati al controllo numerico delle macchine utensili e dei processi industriali. Si specializzano le attività dell'uomo: l'analista, che progetta gli algoritmi e le procedure per l'esecuzione dei problemi degli utenti; il programmatore, che traduce in un linguaggio comprensibile all'elaboratore le formulazioni dell'analista e verifica l'operabilità del programma; l'operatore alla macchina, che provvede alla supervisione in tempo reale dell'esecuzione del lavoro dell'elaboratore. Viene sviluppata la multiprogrammazione con più programmi presenti contemporaneamente nella memoria principale ed eseguiti durante le fasi di attesa, determinate dalle operazioni di ingresso e di uscita dei dati, e si generalizza l'impiego di modeste memorie tampone (buffer), con tempi di accesso molto più brevi per la memorizzazione temporanea nelle fasi di immissione ed emissione dei dati; elaboratori e periferiche, che sono dotati di velocità assolutamente diverse, si rendono così indipendenti. L'elaborazione a partizione di tempo (time sharing) tra utenti diversi collegati a una sola unità di elaborazione centralizzata permette un suo impiego più efficace. I vari programmi provenienti da terminali e quindi da utenti diversi, sono trattati dall'elaboratore con un'apparente contemporaneità, mentre in realtà si stabilisce un ordine di priorità in rapporto all'urgenza. Per esempio, quando il programma in esame richiede dati presenti in una periferica, durante il tempo di ricerca di questi, la CPU elabora un altro programma. La crescente quantità di organi periferici collegati all'unità centrale estende l'impiego di unità di processo ausiliarie che migliorano l'interfaccia con l'unità centrale e sono coordinate da un organo di gestione comune (controller). Esso, funzionando in pratica da dispositivo multiplexer, determina anche la cadenza ottimale dei collegamenti dell'unità di elaborazione, sia con le unità ausiliarie di memoria, sia con le unità di ingresso e di uscita, attivando in successione le corrispondenti vie. La gestione delle attività di elaborazione diventa complessa e va effettuata automaticamente e in modo corretto per cui acquistano importanza crescente i sistemi operativi, che sostituiscono l'operatore umano nelle azioni veloci, ripetitive e prive di contenuto intellettuale.

Elaboratori elettronici digitali: gli anni Settanta

Tra il 1960 e il 1970 nascono gli “elaboratori della terza generazione”, basati su circuiti integrati monolitici in luogo di quelli a componenti discreti; si verifica di nuovo una sensibile diminuzione dell'ingombro e della potenza dissipata mentre aumenta l'affidabilità conseguente alla drastica riduzione dei cablaggi circuitali. Un ulteriore salto di qualità riguarda la velocità di elaborazione (il tempo di un'operazione diventa inferiore al secondo) e la capacità di trattare elevati flussi di informazioni. Nascono sistemi di elaborazione che adottano una “architettura distribuita”, ossia una rete di più elaboratori collegati fra loro (“sistema multielaboratore”). Essa può essere una “struttura gerarchica” in cui si possono individuare un elaboratore principale e diversi elaboratori satelliti (anche distribuiti su una vasta area geografica). Questi ultimi sono elaboratori veri e propri (unità centrale di processo, unità di memoria e organi di ingresso e di uscita locali) e sono completamente autonomi per la soluzione di problemi entro un determinato livello di complessità, salvo ricorrere all'elaboratore principale per i casi meno frequenti di problemi di ampia portata; processori di controllo periferico assicurano le compatibilità dei collegamenti. L'architettura può essere anche una struttura “paritetica” in cui le diverse unità periferiche hanno uguali potenzialità, sono collegate tramite processori di controllo e si scambiano il lavoro tra loro in caso di necessità. La configurazione assunta dai sistemi di elaborazione reali è stata in genere intermedia tra le due strutture elementari indicate. Ma lo sviluppo più importante è la miniaturizzazione resa possibile dalla tecnologia dei circuiti integrati che apre la strada al chip (piastrina) e ai microprocessori, sistemi autonomi che eseguono funzioni logiche, aritmetiche e di memoria e sono raccolti in spazi ridottissimi (qualche millimetro di lato). I primi microprocessori furono costruiti con registri di larghezza di 4 bit (un nibble); anche il bus dei dati era ampio 4 bit, trattati in parallelo. Seguì una generazione a 8 bit (un byte) che è tuttora la base di moltissimi calcolatori di piccole dimensioni e di moltissime applicazioni industriali.

Elaboratori elettronici digitali: gli studi recenti

Le prestazioni di un elaboratore sono determinate da molteplici fattori. Per quanto riguarda il processore, molto importante è la velocità del suo clock (a parità di modello, aumentando il clock, aumentano le prestazioni), il numero e la velocità dei registri interni al processore e la sua architettura (16, 32 o 64 bit). Con gli sviluppi tecnologici della microelettronica, l'apporto innovativo dell'integrazione su vasta scala (LSI, Large Scale Integration, VLSI, Very Large Scale Integration) è stato tale da permettere la realizzazione di microprocessori molto potenti e da determinare la nascita convenzionale di una “quarta generazione” di elaboratori. Una seconda famiglia di microprocessori ha potuto essere progettata a 16 bit su un solo chip; ma anche questa, insufficiente per le esigenze degli utilizzatori, è stata superata e si è passati recentemente a una larghezza di 32 bit, ossia allo standard scelto per i grandi calcolatori fin dal principio. Oggi tutti questi microprocessori convivono in diversi segmenti di mercato, mentre i microprocessori a 64 bit si stanno trasferendo da macchine avanzate utilizzate solo in ambiti in cui sono richieste alte prestazioni ai personal computer di uso comune. Il principale vantaggio offerto da questa innovazione è di aumentare la quantità di memoria RAM indirizzabile direttamente, riducendo le operazioni di trasferimento (paginazione o swapping) di dati fra memoria principale e secondaria. Tuttavia c'è un limite alla crescita dei fattori fisici, dettato dallo stato della tecnologia. La velocità del clock, per esempio, non può essere aumentata al di là di certi valori (che pure evolvono nel tempo), se non disponendo di nuovi materiali e di sistemi per dissipare velocemente il calore del processore stesso. Raggiunti i limiti dettati dalla tecnologia in un certo momento, per aumentare le prestazioni degli elaboratori non c'è che sviluppare un'architettura differente. Le evoluzioni dell'elaboratore si sono perciò caratterizzate su due percorsi di sviluppo di architetture innovative fra loro distinti: il primo è quello che considera il microprocessore attuale come troppo complesso, dato il numero elevato di istruzioni elementari di cui è dotato. Sono stati progettati pertanto microprocessori più semplici, dotati di un numero di istruzioni di base sensibilmente minore; sono i cosiddetti RISC (Reduced Instruction Set Computer) che hanno prestazioni più elevate, specie di velocità. Il secondo percorso è rivolto ad architetture in cui uno o più dispositivi permettono l'esecuzione contemporanea di più istruzioni, anziché operare in successione. Sebbene diverse fra loro, queste innovazioni hanno in comune un elemento fondamentale: il parallelismo che possiamo distinguere a livello di istruzione, che prevede generalmente la presenza di un solo processore, e a livello di processore vero e proprio, che prevede la presenza di diversi processori (spesso in gran numero), che cooperano alla risoluzione di un medesimo problema. Fra le tecniche utilizzate citiamo il pipelining, le architetture vettoriali, e le architetture distribuite. Il pipelining prevede l'utilizzo dell'unità aritmetica come una catena di montaggio applicata all'esecuzione delle istruzioni. L'esecuzione di una singola istruzione di un programma comporta diverse fasi. L'idea alla base del pipeline è quella di far svolgere contemporaneamente le diverse fasi connesse all'esecuzione di un'istruzione, relativamente a istruzioni diverse, vale a dire il caricamento dell'istruzione dalla memoria, la sua decodifica, il caricamento degli operandi, l'esecuzione dell'istruzione vera e propria e l'impostazione di alcuni registri, a seconda del risultato dell'istruzione stessa. La pipeline è generalmente adottata dai processori RISC, ma anche processori non RISC hanno adottato questo meccanismo. Una estensione dell'architettura pipeline è quella doppia. L'idea è di utilizzare appunto due pipelines che eseguano in parallelo coppie di istruzioni, per incrementare così la velocità di esecuzione di un programma. In realtà, per poter eseguire contemporaneamente due istruzioni è necessario che queste non siano in conflitto fra loro, per esempio che non utilizzino entrambe uno stesso registro, e inoltre che l'una non abbia bisogno del completamento dell'altra per essere eseguita (per esempio una sequenza di operazioni matematiche). Dunque, in realtà, non è sempre possibile l'esecuzione contemporanea di due istruzioni, anche disponendo di due pipelines. Per esempio, il processore INTEL Pentium dispone appunto di due pipelines, chiamate pipeline principale (‘u' pipeline) e pipeline secondaria (‘v' pipeline), quest'ultima dedicata a eseguire solo alcune istruzioni di tipo aritmetico. Da notare, inoltre, che la presenza di una doppia pipeline poteva essere sfruttata solo da particolari programmi predisposti ad hoc. Un approccio diverso alla soluzione di questo problema è quello di dotare la CPU di una sola pipeline, in cui però una delle fasi, in particolare quella di esecuzione vera e propria dell'istruzione, è replicata diverse volte. In pratica vi saranno una sola unità per caricare le istruzioni, una per decodificarle, una per caricare gli operandi e molte per l'esecuzione vera e propria delle istruzioni stesse. La considerazione alla base di questo approccio è che la fase di esecuzione vera e propria dell'istruzione è la più lenta. Dunque, in una pipeline semplice, le istruzioni in esecuzione nelle varie fasi dovranno spesso attendere che si liberi l'unità deputata all'esecuzione vera e propria dell'istruzione stessa. Replicando questa unità si eliminerà questo intoppo e il numero di istruzioni portate a termine nell'unità di tempo sarà maggiore. Questo tipo di architettura è detta superscalare ed è, per esempio, adottata dal processore INTEL Pentium II. Una forma particolare di parallelismo è offerta da macchine che permettono l'esecuzione di istruzioni capaci di operare contemporaneamente su tutti i componenti di un insieme di dati anziché su un elemento alla volta. Molti problemi matematici, infatti, legati, per esempio, alla fisica, alla chimica o all'ingegneria richiedono di effettuare calcoli non su singoli numeri, ma su insiemi di numeri (per esempio matrici cioè un insieme di righe e colonne riempite da numeri). Un array computer è dotato di un gran numero di processori, che eseguono contemporaneamente la medesima operazione su dati diversi (per esempio sui vari numeri che compongono una matrice). Calcolatori di questo tipo possono essere impiegati anche nell'elaborazione di immagini digitali: un'immagine in forma digitale è costituita proprio da una o più matrici di numeri. Un'alternativa semplificata all'array processor, che non è tuttavia un computer parallelo vero e proprio, in quanto i vari processori che lo compongono eseguono in un certo istante tutti la medesima istruzione su una memoria a loro riservata, diversa per ciascuno, è il vector processor: esso si presenta esternamente come un array processor, ma in realtà è costituito da un hardware più semplice. La nascita dei vector processors è da ricondursi alla difficoltà costruttiva degli array processors, al loro alto costo e alla loro difficoltà di programmazione. Si realizza con questo concetto un parallelismo parziale. La soluzione radicale è quella adottata nei supercalcolatori, costituiti da più “unità centrali” e che si distinguono dai sistemi multielaboratori per la concezione fortemente integrata anche a livello di programmazione. Tali unità possono funzionare per programmi distinti, simultaneamente su parti diverse di uno stesso programma e possono interagire (con scambio di dati) tramite canali di collegamento. Con tali strutture si raggiungono velocità superiori al Gigaflop (migliaia di miliardi di operazioni a virgola mobile al secondo) e in alcune architetture anche al Teraflop (migliaia di Gigaflop). È questa la cosiddetta architettura parallela: interconnessione di più microprocessori che devono funzionare in modo coordinato scambiandosi dati e messaggi assicurando l'ordinato svolgimento del programma o programmi. Le architetture parallele si distinguono fra SIMD (Single Instruction Multiple Data), in cui tutti i processori eseguono la stessa istruzione ognuno sui propri dati, e MIMD (Multiple Instruction Multiple Data), in cui ogni processore ha un proprio meccanismo di controllo, pur operando in cooperazione con gli altri. Si parla, in questo caso, anche di multiprocessori. Un multiprocessore è infatti un calcolatore dotato di molte CPU, fra loro autonome, che condividono la memoria centrale. Ciascun processore è del tutto autonomo dagli altri, può eseguire istruzioni indipendentemente dagli altri e accedere a una qualsiasi cella della memoria centrale. Elaboratori di questo tipo sono stati prodotti con svariate architetture, ma presentano tutti un medesimo problema: è molto complesso dal punto di vista tecnologico dotarli di un numero elevato di CPU. In particolare è critica la gestione del flusso di dati (ciascun processore deve poter comunicare con l'intera memoria e questo richiede, se il numero delle CPU è elevato, un numero di interconnessioni troppo alto). Un'alternativa è quella di connettere le varie CPU alla memoria tramite un unico bus comune, ma ciò è molto penalizzante dal punto di vista delle prestazioni. Infatti, poiché il bus è inaccessibile a tutte le altre unità quando è impiegato per la comunicazione tra due di esse, si verificherebbero con molta probabilità situazioni di saturazione che rallenterebbero intollerabilmente le comunicazioni. In compenso i multiprocessori risultano relativamente semplici da programmare. I vari processori possono, infatti, comunicare e scambiarsi dati tramite la memoria condivisa. La rete ideale è ovviamente quella che prevede un collegamento diretto tra ciascuna unità e tutte le altre, ma essa è realizzabile praticamente solo quando il loro numero è limitato a pochi microprocessori. Quando si tratta di molte unità, come nel caso dei supercalcolatori a elevato parallelismo, la connettività completa è impossibile e si ricorre a schemi ad anello, ad albero, a ipercubo. È interessante osservare come le architetture parallele offrano la possibilità di incrementare la potenza di calcolo, aumentando il numero di unità collegate a seconda delle necessità. Date le difficoltà costruttive dei multiprocessori si è sviluppata una famiglia alternativa di elaboratori paralleli: i multicalcolatori. Un multicalcolatore è costituito da molti processori interconnessi fra loro e dotati ciascuno di una sua memoria privata, ma non di una memoria comune condivisa fra tutti. I singoli processori comunicano fra di loro, scambiandosi messaggi. Generalmente non accade che ogni processore sia connesso a tutti gli altri, ma solo a un numero limitato di questi (i vicini). Per inviare messaggi a un processore P2, che non gli sia prossimo, il processore P1 dovrà inviarlo a un suo vicino, che provvederà a propagarlo con il medesimo meccanismo. I vari processori sono connessi fra di loro secondo svariate tipologie, quali griglie bidimensionali o tridimensionali. Mentre i processori di un multiprocessore in genere non superano le poche centinaia (valori tipici sono 16, 64: il calcolatore SP della IBM, uno dei più popolari multiprocessori, prevede fino a un massimo di 256 processori), sono stati costruiti multicalcolatori con oltre 10.000 nodi (per nodo si intende un singolo processore). Una categoria particolare di multicalcolatori è quella dei cluster computer. Questi, più che essere un unico calcolatore dotato di molti processori, sono un gran numero di calcolatori distinti, ciascuno dotato di una sua vita autonoma (almeno entro certi limiti), interconnessi fra loro con una rete di comunicazione efficiente quale Fast Ethernet, capace di sostenere una velocità di trasferimento di 100 Mbit/s. Va comunque rilevato il rallentamento dello sviluppo di elaboratori a parallelismo massivo, mentre i progressi avvenuti principalmente nei microcalcolatori, con la conseguente diffusione e riduzione del loro costo, hanno portato allo sviluppo di una nuova categoria di calcolatori paralleli e supercomputer, le NOW (Network of Workstation, reti di calcolatori). Si tratta di un insieme di calcolatori, diffusi commercialmente (workstation o PC) e dunque reperibili a basso costo, interconnessi fra loro da una rete locale, anche questa in genere di tipo commerciale. Tali NOW sono in genere dotate di software particolare per ottimizzare le comunicazioni fra i vari calcolatori. In particolare, i cluster di tipo Beowulf sono basati su reti di sistema private e su una infrastruttura che sfrutta software open source, tipicamente Linux. Lo scopo iniziale di queste macchine era permettere lo sviluppo e il test di un software destinato poi a girare effettivamente su calcolatori paralleli ben più costosi. Il rapido sviluppo delle prestazioni dei PC, nelle reti locali e in generale dei componenti destinati al mercato di massa, ha fatto si che le NOW venissero più frequentemente utilizzate in ambienti di calcolo effettivi, al posto dei sofisticati ma costosissimi calcolatori paralleli (prodotti in quantità limitata). Diversi progetti in questo senso sono stati realizzati utilizzando processori Alpha della Compaq. Per esempio, il progetto Valhal, operativo dal 1999 al 2004 in Danimarca prevedeva 140 nodi connessi in Fast Ethernet, con una capacità di picco di 168 Gigaflop, da utilizzare per calcoli di meccanica quantistica e simulazioni a livello atomico di materiali complessi; il Tera AlphaServer SC supercomputer, installato presso la Commissione per l'Energia Atomica francese nel 2002, include 2560 processori Alpha a 64 bit, connessi con una tecnologia Quadrics appositamente sviluppata, e capaci di produrre picchi di 5 Teraflop, funzionando a regime a 1,3 Teraflop. Lo sviluppo di Internet ha favorito un'estensione della NOW, venendo a definire quello che è oggi chiamato elaborazione su Internet o su griglia (grd). È infatti possibile rendere il proprio elaboratore nodo di una rete per cooperare alla realizzazione di progetti che comportano grandi quantità di calcolo. In questo caso processi particolari sono mantenuti vivi, ma in stato di inattività su ogni elaboratore connesso a Internet e che si sia registrato come cooperante al progetto. Nel momento in cui l'elaboratore non stia svolgendo attività per il proprio utente, questi processi si attivano per scambiare informazioni con altri nodi della rete, per ricevere parti del lavoro da compiere o per comunicare risultati parziali. Su questo modello è costruito il progetto SETI@home per l'analisi dei segnali radio catturati dall'osservatorio di Arecibo, alla ricerca di segnali di intelligenza extraterrestre, o in molti progetti matematici per la ricerca di numeri primi. Fra gli sviluppi più recenti, oltre a quelli nel campo dei supercalcolatori, delle tecniche RISC e delle ricadute che si prospettano per gli elaboratori in tecnologie diverse da quella al silicio – quale quella ad arseniuro di gallio intrinsecamente più veloce (anche se con costi molto elevati) o quella ottica (fibre ottiche) – si citano i seguenti: la diffusione crescente di stazioni di lavoro (workstation) tecniche e scientifiche di notevole potenzialità (tanto da avvicinarsi ai minielaboratori) catalizzata dalla disponibilità di numerosi programmi nel campo dei calcoli complessi e della grafica, molto efficienti in quanto operanti a velocità elevate, dell'ordine dei 10 MIPS (milioni di istruzioni per secondo); la disponibilità sul mercato di massa di intere famiglie di PC portatili con diverse periferiche adatte con prestazioni elevate anche per la grafica e per la fruzione di materiale multimediale. Alle versioni da valigetta cosiddette laptopsi stanno affiancando le handtop e i palmtop (da tenere in mano) in grado di fungere da notebook (agenda), da calcolatrice, da piccola macchina da scrivere. La miniaturizzazione dei processori da un lato, la diffusione dei telefoni cellulari e l'aumento delle loro capacità di calcolo dall'altro, portano a una convergenza nel segno del mobile computing, realizzato attraverso piccoli dispositivi portatili (PDA, Personal Digital Assistant, o telefonini UMTS) che possono svolgere piccole elaborazioni, connettersi con altri dispositivi attraverso reti mobili, o con stazioni server attraverso sensori diffusi nell'ambiente, per richiedere l'esecuzione di particolari compiti, e presentare interfacce semplificate all'utente.

Elaboratori analogici e ibridi: caratteristiche e funzioni

Gli elaboratori analogici rappresentano le grandezze fisiche mediante variabili continue, generalmente tensioni elettriche ma a volte anche grandezze meccaniche come pesi o lunghezze. Per quanto molto rapidi, sono poco precisi e quasi per nulla versatili: la soluzione dei problemi si ottiene mediante misurazioni e quindi la precisione dipende dall'apparato di misura; normalmente si può arrivare solo alla quarta cifra significativa. Gli elaboratori analogici operano in parallelo, risolvendo contemporaneamente le varie parti di cui è costituito un problema, mentre gli elaboratori digitali sono macchine sequenziali, cioè effettuano un'operazione dietro l'altra e ciò implica una velocità di calcolo inferiore. Gli elaboratori ibridi sono costituiti da elementi dei primi e dei secondi. Schematicamente, in un elaboratore si distinguono alcuni organi, o unità, che hanno struttura fisica differente nell'ambito di uno stesso tipo di elaboratore e, ancor più, in elaboratori di tipo differente. Inoltre, organi che hanno importanza fondamentale in elaboratori di un tipo possono essere assenti, o svolgere funzioni marginali, in elaboratori di tipo differente. In generale, si hanno: organo di ingresso; organo di memoria, presente negli elaboratori digitali e non in quelli analogici, per quanto anche in questi ultimi si possa individuare la corrispondente funzione; organo di calcolo, detto più propriamente, negli elaboratori digitali, organo aritmetico; organo di governo, o di controllo; organo di uscita. Gli organi di entrata/uscita sono sostanzialmente differenti negli elaboratori digitali e in quelli analogici. Gli elaboratori analogici si dividono in diretti (più propriamente, simulatori) e indiretti (detti, senz'altro, calcolatori analogici). Nei simulatori i dispositivi analogici sono basati sull'esistenza di un'analogia fisica diretta tra il prototipo studiato e la struttura assunta dall'elaboratore. Tale analogia si riconosce comparando le equazioni che descrivono il comportamento dinamico o statico dei due sistemi e verificando la corrispondenza biunivoca tra gli elementi dell'analogo e del prototipo. I simulatori possono essere elettrici, quali gli analizzatori di reti, meccanici, costituiti da membrane in tensione, di altro tipo, per esempio sistemi analogici elettrochimici e sistemi a luce polarizzata. Gli elaboratori analogici indiretti includono molti più elementi matematici che fisici: il comportamento del sistema in studio si traduce dapprima in un sistema di equazioni algebriche o differenziali. Si prende quindi un gruppo di elementi, o unità di calcolo, capaci di effettuare ciascuno un'operazione matematica specifica e li si connette in maniera tale che la stessa connessione costituisca la soluzione del problema. Anche questo gruppo di elaboratori si divide in elaboratori meccanici e in elaboratori elettrici. Le operazioni fondamentali effettuate da un calcolatore analogico sono: moltiplicazione di una variabile per un coefficiente costante; somma di due o più variabili; integrazione e derivazione di una variabile rispetto al tempo; prodotto di due variabili; generazione di funzioni di una variabile. Ciascuna di queste operazioni corrisponde a una serie di dispositivi od organi, più o meno specializzati che, nel complesso, costituiscono il calcolatore. D'altro canto, le variabili e le costanti del problema si traducono in variabili e in costanti di macchina, di natura adeguata al tipo di calcolatore (grandezze meccaniche, elettriche, ecc.), che sono i dati introdotti nella macchina e sui quali l'elaboratore opera. Negli elaboratori analogici elettronici l'amplificatore operazionale svolge oggi le funzioni di calcolo (integrazione, derivazione, ecc.).

Elaboratori analogici e ibridi: programmazione

La forma usuale di programmazione di un calcolatore analogico consiste nel connettere tra loro le diverse entrate e uscite degli organi di calcolo. Queste connessioni possono effettuarsi direttamente o, come negli elaboratori analogici elettronici, per mezzo di un pannello centrale di programmazione nel quale confluiscono le entrate e le uscite degli organi di calcolo. In generale, l'elaboratore può trovarsi in stati diversi, selezionabili dall'operatore: stato di riposo, in cui tutte le tensioni delle variabili e delle costanti sono nominalmente uguali a zero; stato in cui le tensioni sono portate ai valori corrispondenti alle condizioni iniziali del problema e nel quale il calcolatore può mantenersi indefinitamente; stato di calcolo, nel quale i valori delle tensioni variano in funzione del tempo; stato di attesa, in cui il calcolo cessa e tutte le tensioni restano al valore posseduto nel momento dell'interruzione. Riportando di nuovo l'elaboratore allo stato di calcolo, il funzionamento riprende. Nella possibilità di portare l'elaboratore in questo stato risiede la funzione di memoria di questi tipi di elaboratori.

Elaboratori analogici e ibridi: campi di applicazione

L'elaboratore analogico, per il suo operare in forma continua e in parallelo, è un elaboratore estremamente veloce. Tenendo conto che in un problema particolare si possono combinare anche 1000 unità in parallelo, si comprende come possa essere molto più veloce di un elaboratore digitale. Per questa intrinseca caratteristica di rapidità, gli elaboratori analogici sono impiegati soprattutto come simulatori di fenomeni fisici e come componenti di sistemi di regolazione, cioè nei casi in cui sia necessario ottenere il risultato quasi contemporaneamente all'introduzione dei dati. Il suo impiego è relativamente semplice, per quanto richieda una conoscenza del problema e del singolo elaboratore molto maggiore che nel caso degli elaboratori digitali. L'introduzione dei dati di un problema non richiede un gran tempo di preparazione; la modifica dei parametri e delle grandezze in studio è altrettanto facile. Per essere la soluzione tanto veloce, da alcuni decimi di secondo ad alcuni minuti, l'effetto delle modifiche apportate si può osservare immediatamente, cosa che dà luogo a una visione molto chiara del problema che si studia. Un'altra caratteristica che ne rende l'impiego molto interessante è che, per la propria struttura, esiste la possibilità di intercalare elementi del sistema stesso che si sta studiando e osservare l'effetto di tale inclusione nel sistema complessivo simulato dall'elaboratore. Come contropartita, il fatto che tali elaboratori usino amplificatori provoca l'introduzione di rumori e di derive che si traduce in perdita di precisione dell'elaboratore stesso, mentre con gli elaboratori digitali, operando con numeri e programmi adeguati, si può raggiungere qualunque precisione, aumentando la capacità dei registri. Nelle macchine analogiche, i rumori e la non linearità degli amplificatori crescono all'aumentare del numero delle cifre significative richieste per il risultato e pertanto tale numero non può crescere indefinitamente. Da tutto ciò discende che i problemi che meglio si adattano agli elaboratori analogici sono quelli che comportano la risoluzione di sistemi di equazioni differenziali, lineari o non lineari, a coefficienti costanti oppure variabili. Naturalmente, problemi di gestione amministrativa, contabilità, elaborazione di dati, che sono risolti ottimamente da elaboratori digitali non possono essere trattati con macchine analogiche. L'elaboratore analogico, la cui importanza ha riguardato campi della simulazione molto critici, come il volo, certe applicazioni militari e l'energia nucleare civile, nonché quello della strumentazione elettronica, ha riacquistato un ruolo centrale con il rinnovato interesse per i cosiddetti “neurocomputer” in versione analogica o ibrida. Sono stati realizzati chip analogici capaci di apprendimento, una proprietà fondamentale richiesta ai circuiti neuronali, mentre chip ibridi hanno dimostrato in laboratorio di possedere le proprietà richieste di permanenza di memoria. Per gli studi e la sperimentazione in questo campo si rimanda alle singole voci: computer a comando mentale, computer a DNA, computer a riconoscimento vocale, computer quantistico.

Elaboratori elettronici digitali: componenti fisici

Mentre nel campo della comunicazione si stanno diffondendo tecniche che mirano a ottenere velocità maggiori di quelle consentite dal trasferimento attraverso i tradizionali cavi di rame, quali fibre ottiche o radiofrequenze, le tecnologie principali utilizzate negli elaboratori digitali, in particolare per quanto riguarda memoria (principale e secondaria) e unità di calcolo rimangono quelle basate sull'elettronica. La memoria secondaria è disponibile su supporti molto diversi fra di loro. Il dispositivo di memorizzazione più diffuso è il disco magnetico. Esso è costituito da uno o più piatti di materiale magnetico e da testine sorrette meccanicamente da bracci e in grado di scrivere e leggere informazioni sui piatti magnetici. I dischi sono mantenuti in rotazione da un motore e le testine sono in grado di spostarsi radialmente rispetto ai piatti. In particolare, i dischi presenti nei moderni computer hanno una capacità di memorizzazione dell'ordine di decine di Gigabyte (un Gb è circa un miliardo di byte), mentre la memoria principale è in genere dell'ordine di centinaia di Megabyte (un Megabyte è circa un milione di byte). Gli standard più diffusi per i dischi rigidi sono lo standard IDE e quello SCSI (si legge scasi). Essi hanno subito delle evoluzioni: per esempio i dischi IDE sono stati ormai sostituiti dai più veloci dischi EIDE. Più complessa è stata l'evoluzione dei dischi SCSI. Quelli originali (SCSI-1) trasferivano dati (in lettura o scrittura) alla velocità di 5 Mb al secondo, tramite un bus operante a 5 MHz. La versione Ultra SCSI trasferisce dati a 40 Mb al secondo e utilizza un bus a 20 MHz. Inoltre gli SCSI originali trasferivano i dati con un parallelismo di 8 bit per volta: Ultra SCSI trasferisce invece 16 bit per volta. Malgrado i progressi compiuti negli ultimi anni nelle prestazioni dei dischi fissi e nella loro affidabilità, le prestazioni di questi non possono definirsi soddisfacenti se paragonate con quelle della CPU, che hanno subito un incremento di gran lunga maggiore. Per ovviare a questa disparità sono state proposte varie soluzioni, una delle quali, in particolare, il RAID (Redundant Array of Inexpensive Disks, serie ridondante di dischi poco costosi). Negli ultimi anni del Novecento si sia assistito a un vero boom nell'incremento del clock dei processori. I primi processori per personal computer avevano frequenze di clock di pochi MHz, successivamente sono diventati disponibili a un prezzo più che contenuto processori con clock di 1000 MHz o più. Esempi classici di CPU sono il Motorola 68000, che ha equipaggiato diversi computer, fra cui alcuni modelli della Apple, o ancora il processore Sparc, creato dalla Sun Microsystems. Ma le CPU più diffuse e più conosciute sono senz'altro quelle prodotte dalla statunitense INTEL. Questa famiglia di processori annovera modelli famosissimi quali: INTEL 486 e INTEL Pentium. Quest'ultimo è il processore più diffuso nei moderni PC. La società statunitense AMD, dopo essersi imposta sul mercato con processori quali K6 e K6 II ha potenziato il processore Athlon, che può raggiungere la soglia di 1 GHz per il suo clock. I primi computer eseguivano un insieme piuttosto limitato di istruzioni, per lo più elementari; con il progredire della tecnica e della loro diffusione, è divenuto possibile dotare tali elaboratori di un insieme di istruzioni più ampio. Questo tipo di processori è in genere denominato di tipo CISC (Complex Instruction Set Computer). I processori CISC hanno dominato la scena del mondo dei computer dagli anni Sessanta e le case più famose, come per esempio IBM (maggiore produttrice di mainframe, macchine di grande potenza elaborativa utilizzate da grandi organizzazioni quali banche o enti pubblici) o la stessa INTEL hanno equipaggiato i loro computer con questo tipo di processori. Con un approccio diametralmente opposto nella progettazione di processori è stato realizzato il RISC (Reduced Instruction Set Computer), che prevede la possibilità di eseguire poche istruzioni, semplici ma molto veloci. I DEC Alpha, gli UltraSparc della Sun, i Power PC Motorola e i G3 e G4 utilizzati sui Macintosh si basano sull'approccio RISC o su quelli da esso derivati. In effetti c'è da dire che sebbene i processori RISC siano i più efficienti, i più diffusi sono gli INTEL Pentium, che non sono completamente RISC, ma hanno solo in parte assorbito le idee alla base di questa architettura, in quanto il passaggio a un'architettura RISC non li renderebbe compatibili con i vecchi INTEL 8086, processori in dotazione ai PC IBM dei primi anni Ottanta.

Bibliografia

G. C. Moisil, Théorie structurelle des automates finis, Parigi, 1967; G. W. Gear, Computer Organization and Programming, New York, 1969; P. A. Ligomenides, Information - Processing Machines, New York, 1969; W. B. Riley, Electronic Computer Memory Technology, New York, 1971; F. Filippazzi, Tecnologia dell'elaboratore elettronico, Milano, 1977; D. Andrews, D. Simeone, Da S/36 ad AS 400, Milano, 1991.