Appunti di informatica L'elaboratore elettronico COSA SI IMPARA IN QUESTA LEZIONE: Come è costituito un elaboratore Come l'elaboratore esegue un proramma Struttura dell'elaboratore Il termine elaboratore o calcolatore elettronico indica una vasta gamma di macchine, dai supercalcolatori per le analisi del Progetto Genoma o per le simulazioni meteorologiche, fino ai microprocessori incorporati negli apparecchi domestici (telefoni cellulari, televisori, lavatrici e frigoriferi). Ma noi ci riferiremo in particolare al calcolatore destinato all'uso generale, per applicazioni "da ufficio" o "da scrivania", il personal computer o PC. Un elaboratore (anche il PC più economico) è un apparato complesso, quindi è costituito da più parti o componenti. Alcuni componenti formano il nucleo centrale del calcolatore (il "cuore"). Essi sono detti componenti centrali. Nei calcolatori moderni, essi sono tutti ospitati su un'unica scheda di circuito stampato, detta la scheda madre (motherboard). La maggior parte di essi trova addirittura spazio all'interno di un unico circuito integrato, il microprocessore. Questi componenti sono imprescindibili per il funzionamento del calcolatore. Altri componenti sono concettualmente esterni al nucleo centrale del calcolatore, e sono pertanto detti componenti periferici o le periferiche. Ovviamente, specie nel caso dei portatili, spesso una periferica è in realtà fisicamente incorporata in unico blocco nel calcolatore. I componenti periferici non sono in linea di principio indispensabili per il funzionamento dell'apparato. In realtà, molti di essi sono necessari per poter utilizzare il calcolatore (p.es. tastiera e schermo). 1.1
COMPONENTI CENTRALI PRINCIPALI: Unità centrale di elaborazione/central Processing Unit/CPU: esegue i programmi. È temporizzata da un segnale, detto clock, che imposta il ritmo di esecuzione delle operazioni ed è generato da un apposito circuito presente sulla scheda madre. (Quindi la scheda madre impone la frequenza di clock.) La CPU è il componente principale del microprocessore, che può contenere però anche parti ausiliarie: memorie temporanee, elaboratori di istruzioni matematiche o di elaborazione segnali, circuiti di controllo e accesso alla memoria RAM, ecc. Memoria primaria: detta RAM (random access memory, memoria ad accesso casuale) perchè ha la caratteristica che, richiedendo ad essa un dato scelto a caso, essa è in grado di fornirlo in un tempo costante. Questa proprietà non l'hanno, per esempio, i nastri magnetici, che vanno prima avvolti fino a raggiungere il punto desiderato. Quindi i nastri possono servire come memorie ad accesso sequenziale. La memoria primaria contiene i programmi in esecuzione e anche i dati su cui i programmi stanno lavorando. PRINCIPALI: Tastiera: dispositivo di ingresso (input) di caratteri alfanumerici e simboli. Schermo/monitor: dispositivo di uscita (output) grafico. Mouse: dispositivo di ingresso, usato per il puntamento. Scheda video: dispositivo di conversione, codifica l'uscita grafica destinata al monitor per renderla visualizzabile. Disco rigido/disco fisso/hard disk: dispositivo di ingresso/uscita, per memorizzare le informazioni in modo stabile ma reversibile (si possono cancellare e modificare). È inamovibile (il disco è fisicamente sigillato all'interno del lettore, il drive, e nemmeno l'aria può raggiungerlo). Data la sua velocità, è usato anche come estensione della memoria di lavoro. Dischetto/Floppy disk: dispositivo di ingresso/uscita, per memorizzare le informazioni in modo stabile ma reversibile. È amovibile (posso sostituire un disco con un altro, semplicemente togliendolo dal drive). È notevolmente più lento di un hard disk. ALTRE : Stampante: dispositivo di uscita su carta. Lettore dischi ottici (CD-ROM, DVD-ROM): dispositivo di ingresso, analogo a floppy disk perché amovibile, ma più capace e non scrivibile. 1.2
Masterizzatore dischi ottici: scrive (tipicamente in modo irreversibile) i dischi ottici. I dischi usati sono di un tipo apposito. In lettura è identico al lettore descritto sopra. Scheda di rete: dispositivo per trasmettere e ricevere dati su una rete locale. Normalmente accetta un cavo di collegamento, ma può essere anche wireless (senza fili, cioè radio). Altre connessioni wireless: per trasmettere e ricevere dati su collegamenti a breve raggio (10, max 100 metri) l interfaccia Bluetooth (radio a bassa potenza). Per collegamenti a brevissimo raggio, a vista (max 1 metro) l interfaccia Fast Infrared (FIR), a tecnologia a infrarossi come il telecomando della TV. Modem: dispositivo per il collegamento a una linea telefonica. In versione analogica (56 Kb/s), ADSL (centinaia di kbps ma prestazioni non garantite), ISDN (128 kbps con garanzie di prestazioni) Scheda audio: dispositivo per l'acquisizione, l'elaborazione e l'emissione di informazioni acustiche, memorizzate in forma digitale. Interfaccia universale USB (Universal Serial Bus): non è una periferica in sé, ma vi si possono collegare moltissimi dispositivi tradizionali come quelli elencati sopra (inclusi dischi rigidi esterni, masterizzatori CD esterni...) e anche oggetti di nuova concezione come memorie esterne di archiviazione dati. Interfaccia multimediale Firewire o IEEE 1394: non è una periferica in sé, ma è progettata per il collegamento di periferiche audiovideo (dispositivi musicali digitali, videocamere digitali...). 1.3
Architettura interna dell'elaboratore Architettura significa come è costruito. Un personal computer è costruito secondo lo schema seguente. Processore ALU REGISTRI MEMORIA PRIMARIA Unità di controllo BUS Ogni blocchetto di questo schema rappresenta un circuito elettronico con precise funzioni. I circuiti sono tutti collegati fra loro in modo da poter interagire. In particolare, possiamo dire che esistono: parti per l elaborazione dei dati (processore) parti per la memorizzazione dei dati (memoria primaria; memorie secondarie e di massa poste su periferiche, p.es. disco rigido) parti per il trasferimento dei dati (all interno: il bus; tra interno ed esterno: periferiche) Come l'elaboratore esegue un programma L elaboratore dispone di vari programmi, che normalmente sono archiviati su disco rigido (hard disk). Questa è la memoria secondaria. Quando occorre eseguire un programma, esso viene trasferito in memoria primaria (la RAM). Una volta in memoria primaria, il programma può essere eseguito istruzione per istruzione. Un programma, poi, agisce su determinati dati. Anche questi dati devono essere in memoria primaria. Andranno poi a finire su memoria secondaria (p.es. sul disco rigido; p.es. su una memoria esterna USB) una volta terminato il lavoro. 1.4
Vediamo ora il funzionamento delle parti illustrate nel diagramma già visto, che replichiamo qui: bus, memoria, processore e periferiche. Processore ALU REGISTRI MEMORIA PRIMARIA Unità di controllo BUS IL BUS Il bus è un circuito di collegamento, che si occupa: 1) di fare in modo che ciascun circuito possa collegarsi a tutti gli altri per trasferire dati 2) di controllare che due circuiti non cerchino di trasferire dati contemporaneamente. Il nome deriva proprio dalla sua funzione di trasporto pubblico. Possiamo pensare il bus come se fosse diviso in corsie : ciascuna cosria trasporta informazioni di un determinato tipo. dati indirizzi LA MEMORIA PRIMARIA (RAM) La memoria è un circuito elettrico. linee di controllo (comandi vari) Dal punto di vista logico, ossia per il programma, essa è una sequenza di parole. Ogni parola ha una sua lunghezza (p.es. 32 bit = 4 byte). Ogni parola ha anche una sua posizione. C'è una parola nella posizione 0, una parola nella posizione 1, una parola nella posizione 2, una parola nella posizione 3... 1.5
Il numero che indica la posizione della parola si chiama il suo indirizzo. Quando sul bus dati compare, poniamo, l'indirizzo 12, la memoria sa che deve accedere alla tredicesima parola (N.B.: SI CONTA DA ZERO). Accedere per farne che cosa? La memoria sarà in grado di ricevere un comando che dice se quella parola va letta oppure scritta. Perchè dobbiamo ricordarci che stiamo parlando della memoria di lavoro, in cui occorre scrivere i programmi da eseguire e i dati, perchè successivamente il processore li possa leggere ed eventualmente nuovamente scrivere una volta modificati. Scrittura della memoria: sul bus compare un dato (nella corsia riservata ai dati). Poi sul bus compare un indirizzo (nella corsia riservata agli indirizzi). Infine sul bus compare il comando di scrittura memoria (sempre in una apposita corsia ). A questo punto, la memoria legge il dato e lo memorizza nella posizione richiesta. Lettura della memoria: sul bus compare un indirizzo (nella corsia riservata agli indirizzi). Poi sul bus compare il comando di lettura memoria (in apposita corsia ). A questo punto, la memoria prende il dato dalla posizione richiesta e lo mette sul bus (sempre nella corsia apposita) perchè chi lo ha richiesto possa leggerlo. LE Le periferiche sono dispositivi esterni, di cui abbiamo già visto un elenco. Si tratta degli oggetti che consentono la comunicazione con il mondo esterno (con le persone, con altre macchine, con la rete telefonica...). Possono avere funzione di ingresso (input): il mondo esterno introduce informazione nel calcolatore. Esempi: la tastiera, il mouse. Oppure possono avere funzione di uscita (output): il calcolatore emette informazione nel mondo esterno. Esempio: la stampante, il monitor. Oppure ancora possono avere entrambe le funzioni (input/output o I/O). Esempio: la scheda di rete, il modem. Una periferica normalmente si collega a una porta. Una porta è (come il nome lascia intendere) un oggetto che consente l'ingresso o l'uscita di informazioni. Esistono vari tipi di porte. In generale ogni tipo di porta può essere usato per più di un tipo di periferica. Ma qualcuna è più generale di altre. Per esempio: Le porte VGA si usano quasi solo per monitor video. 1.6
Le porte PS/2 si usano solo per mouse e tastiere. Le porte parallele o stampante o Centronics si usano quasi solo per le stampanti. Tendono comunque a essere sostituite dalle porte USB. Le porte Firewire si usano per qualunque dispositivo ad alta velocità (audio/video, ma anche scanner, masterizzatori DVD...) Le porte USB si usano per quasi qualunque tipo di periferica (mouse, tastiera, modem, scanner, dischi esterni, interfacce Bluetooth, periferiche di memorizzazione...) Una porta è formata da: 1. un connettore: una presa elettrica dove si attacca fisicamente un cavo o un apparecchio periferico. Esempio (schematico, visto di fronte): (altri esempi si possono avere guardando sotto un telefono cellulare). Ogni connettore ha una forma diversa da quelli di altri tipi di porte, per evitare di fare collegamenti non permessi. Di conseguenza un tipo di porta si può facilmente identificare guardando la forma del connettore. 2. un'interfaccia: alcuni circuiti elettronici che si occupano di consentire la trasmissione dell'informazione verso l'esterno (nel caso di output) o l'interno (nel caso di input). Per esempio, amplificatori che danno potenza al segnale elettrico, per consentirgli di viaggiare su cavi lunghi qualche metro. Altro esempio: circuiti che ricevono le parole tutte in una volta (si dice: in parallelo) e le ritrasmettono un bit alla volta in sequenza (si dice: in serie). 3. una memorietta piccola, che contiene una sola parola. Una memoria simile si chiama un registro. In questo registro si posteggia il dato in ingresso, in attesa che il calcolatore trovi un momento libero per trasferirlo in memoria primaria, oppure il dato in uscita, in attesa che la periferica se lo legga. 4. eventualmente, una memoria un po più estesa per parcheggiare più di una parola per un tempo un po più lungo. Questa memoria si chiama un buffer. Ma siccome le prestazioni degli elaboratori sono sempre più elevate, spesso il buffer non si fa presso la porta ma direttamente occupando uno spazio in memoria primaria (RAM), senza perdere in efficienza. IL PROCESSORE Il processore è quello che esegue i programmi. È un circuito elettronico molto complesso e quindi, al suo interno, si possono distinguere varie parti: 1. L'unità aritmetico-logica o ALU (arithmetic-logical unit). Essa esegue le istruzioni, che sono di tipo aritmetico (A + B) o logico (IF A = B). 1.7
2. L'unità di controllo. Essa prende le istruzioni e i dati dalla memoria, comanda la ALU perchè esegua le istruzioni, scrive i risultati in memoria, e comanda il flusso di esecuzione (vedi spiegazione sugli algoritmi). 3. Alcuni registri. Nei registri vengono temporaneamente posteggiati i dati che la ALU deve elaborare e vengono anche scritti i risultati. Se l'elaboratore fosse il mio ufficio, la memoria primaria sarebbe la scrivania su cui appoggio tutti i documenti che mi servono per il lavoro. Invece i registri sarebbero quei due o tre fogli su cui sto lavorando effettivamente in un dato momento. Un registro molto usato (che spesso come nell'esempio che segue è addirittura sottinteso nelle istruzioni) si chiama accumulatore. Per capire cosa succede all'interno dell'elaboratore proviamo a immedesimarci nel processore mentre esegue un pezzetto di programma, e a far finta di non essere in grado di pensare. La memoria primaria contiene questo programma (ogni istruzione è indicata con accanto l'indirizzo a cui si trova): Indirizzo Contenuto cella 12 LOAD 2 13 ADD 1 14 STORE 100 (...omissis) 100 0 Spiegazione in linguaggio umano: l'istruzione all'indirizzo 12 carica nell'elaboratore il numero 2 ; l'istruzione all'indirizzo 13 gli somma il numero 1 ; l'istruzione all'indirizzo 14 scrive il risultato dentro la cella di memoria all'indirizzo 100. Quello che c'è tra l'indirizzo 14 e l'indirizzo 100 non mi interessa e lo ho omesso. In pratica vogliamo fare 2+1. Vediamo passo passo cosa succede. Tra i registri del processore, ce n'è uno che si chiama PROGRAM COUNTER, contatore di programma. Esso ha una funzione speciale. Esso contiene l'indirizzo della prossima istruzione da eseguire. All'inizio dell'esempio, quindi, esso conterrà l'indirizzo 12. L'unità di controllo legge il program counter e sa che deve prendere l'istruzione contenuta all'indirizzo 12. Quindi l'istruzione all'indirizzo 12 viene letta dalla memoria primaria e messa in un altro apposito registro. A questo punto l'unità di controllo interpreta l'istruzione, comandando alla ALU di eseguirla. 1.8
(Questa istruzione sarà ovviamente una parola, cioè un numero in base 2. Però l'unità di controllo sa che questo numero è una istruzione di programma, e quindi lo interpreta correttamente. Per esempio, se l'istruzione LOAD 2 fosse codificata come 01110000, potrebbe essere interpretata anche come il numero decimale 112, oppure come il carattere ASCII numero 112, cioè una p minuscola. Invece l'unità di controllo sa che si tratta di una istruzione e come tale va considerata.) La ALU, l'unità di controllo, e tutto il resto sono circuiti elettronici. Quindi, quando diciamo comandare, intendiamo qualcosa di simile ad manovrare gli interruttori di una stanza per decidere quali luci vanno accese e quali spente; oppure a premere i pedali di un'auto per stabilire se aumentare, diminuire o mantenere la velocità. L'istruzione LOAD 2 viene eseguita (e il suo effetto è di mettere il valore 2 in un registro, di solito l'accumulatore). L'accumulatore contiene quindi, in questo momento, il valore 2. A questo punto il program counter viene incrementato: 12 + 1 13. Con un meccanismo simile a prima, viene caricata ed eseguita l'istruzione SUM 1: viene sommato 1 al valore dell'accumulatore, e il risultato rimesso nell'accumulatore. A questo punto l'accumulatore contiene il valore 3. Ulteriore incremento del program counter: 14 + 1 14. L'istruzione all'indirizzo 14 dice di scrivere in memoria all'indirizzo 100. (Scrivere che cosa? Sottinteso: il contenuto dell'accumulatore.) Dopo che questa istruzione è stata eseguita, in modo analogo alle altre, in memoria primaria ci sarà il risultato dell'elaborazione (cioè il valore 3) e si troverà all'indirizzo 100. 1.9