Estratto del documento

Calcolatori elettronici - prof. Danese

Preparazione all'esame

Capitolo 1 - Il calcolatore: astrazioni e tecnologia

Per prima cosa ricordiamo che i calcolatori possono essere divisi a grandi linee in tre gruppi:

  • I PC (Personal Computer) che tutti conosciamo, dove vengono sfruttati software scritti da diversi programmatori.
  • I server a cui si accede attraverso la rete che non sono altro che dei PC con maggiore potenza di calcolo, velocità e capacità di memoria, utilizzati per grandi carichi di lavoro. Fanno parte dei server i supercomputer formati da migliaia di processori con memorie da diversi terabyte.
  • I calcolatori embedded (o dedicati) che comprendono i microprocessori presenti ormai dappertutto, come nella nostra macchina o nella lavatrice. Si chiamano "dedicati" proprio perché sono programmati per svolgere una singola applicazione, o poche applicazioni collegate tra di loro, ma in maniera precisa e con poca probabilità di errore.

In realtà da qualche anno si è aggiunta a queste tre categorie una quarta: i dispositivi mobili (PMD, Personal Mobile Devices) di cui fanno parte i tablet e gli smartphone. Si tratta di dispositivi alimentati a batteria, con connessione wireless, su cui è possibile scaricare dalla rete dei software (le apps) e gestirli mediante il touchscreen; infatti i PMD non hanno né mouse né tastiera.

Possiamo dire che i PMD stiano pian piano sostituendo i PC e, nel frattempo, anche i server sono stati sostituiti dai cloud, enormi centri di calcolo creati da grandi compagnie come Google o Amazon.

Innovazioni nell'architettura dei calcolatori

  • La legge di Moore che stabilisce che ogni 18-24 mesi viene duplicato il contenuto di un circuito integrato; questo permette l’avanzare della tecnologia e la diminuzione delle dimensioni per il calcolatore.
  • L’uso dell’astrazione che permette di dividere in più livelli (via via complessi) il progetto cosicché sia più facile lavorarci.
  • Il parallelismo che permette di migliorare le prestazioni grazie all’utilizzo di più risorse contemporaneamente. Uno speciale parallelismo è la pipeline.
  • La gerarchia delle memorie che divide, appunto, le memorie dalla più veloce (piccola e molto costosa) alla più lenta (ma economica e di grande capacità). Nella gerarchia delle memorie troviamo anche la memoria cache che “illude” il programmatore di avere una grande memoria ma alla velocità della più costosa.
  • L’affidabilità è un dettaglio mai trascurabile! È necessario che il calcolatore non sia solo compatto e veloce ma che limiti il più possibile la comparsa di errori; per questo motivo solitamente è possibile trovare più risorse uguali (ridondanza) così da avere sempre una scorta in caso di guasto.

Cosa c'è dietro un programma: i linguaggi di programmazione

Il calcolatore, come già sappiamo, è in grado di eseguire solo istruzioni di basso livello scritte in un linguaggio di soli zeri e uni; il programmatore, invece, utilizza un linguaggio più vicino al comune inglese per scriverle. Per questo motivo sarà compito di diversi software convertire il linguaggio utente nel linguaggio calcolatore... e questo è un esempio di astrazione.

Il software applicativo sono, appunto, le applicazioni ovvero l’interfaccia più intuitiva tra l’utente e la macchina. Il software di sistema si divide invece in due parti:

  • Il sistema operativo che gestisce gli I/O, le memorie e consente alle applicazioni di utilizzare simultaneamente il calcolatore.
  • Il compilatore che traduce il programma scritto in linguaggio di alto livello in istruzioni eseguibili dall’hardware.

Ricapitoliamo un attimo, quindi, che cosa si intende per istruzione e come essa viene scritta. Il calcolatore riconosce solo due simboli (il codice binario) e la composizione di una stringa di essi dà vita alle istruzioni. Scrivere direttamente un programma in binario è molto complicato e per questo motivo è stato inventato il linguaggio assembler che associa ad una stringa binaria una versione simbolica dell’istruzione (add sta per “somma due numeri”). Essendo che, comunque, il linguaggio assembler non è così semplice, sono stati creati altri tipi di linguaggi, chiamati di alto livello, che utilizzano codici molto vicini al classico inglese rispettando comunque costrutti ben specifici. Questi codici hanno il vantaggio di poter essere imparati con facilità e non dipendono dall’hardware su cui verranno eseguiti.

I componenti del calcolatore

Tutti i calcolatori hanno lo stesso scopo: acquisire dati dall’esterno (input) e fornire un’elaborazione di essi come output. Per questo motivo tutti gli hardware sono supportati da periferiche di I/O e fanno parte di esse:

  • Lo schermo a cristalli liquidi (LCD, Liquid Crystal Display), sottile e a basso consumo energetico. Esso è formato da una matrice attiva di punti chiamati pixel dove ogni pixel è composto da 24 bit (8 per ogni colore RGB).
  • Il touchscreen utilizzato nei PMD utilizza una tecnologia capacitiva; questo significa che il nostro dito, una volta toccato lo schermo, fa variare il campo elettrico e quindi la capacità in quel punto.

Le componenti più interessanti del calcolatore si trovano, però, al suo interno:

  • Il processore, chiamato solitamente CPU (Central Processing Unit), è la parte attiva del calcolatore, in grado di svolgere le istruzioni dei programmi. Esso comprende l’unità di elaborazione dei dati, chiamato datapath, e l’unità di controllo che hanno il compito, rispettivamente, di eseguire le istruzioni e di controllare tutte le risorse che l’istruzione coinvolge.
  • La memoria DRAM (Dynamic Random Access Memory) è il luogo dove vengono memorizzati i programmi in esecuzione e i loro dati. Ricordiamo che una memoria ad accesso casuale ha un tempo fisso per trovare al suo interno i dati, indipendente dalla cella in cui si trovano.
  • La memoria cache, formata da una memoria SRAM (Static Random Access Memory), memorizza i dati utilizzati più di recente così da poterli reperire in brevissimo tempo essendo essa una memoria molto veloce.

Sia la memoria interna del calcolatore sia la cache sono memorie volatili e quindi, se viene interrotta l’alimentazione del calcolatore, esse si cancellano. Per questo motivo, nel calcolatore sono presenti anche memorie di massa, dischi rigidi non volatili, dove memorizzare i risultati ottenuti dalle istruzioni cosi da non perderli.

Sia le memorie principali che di massa si possono trovare nella gerarchia delle memorie di cui abbiamo già parlato in precedenza dove, al vertice, troviamo la cache. Questo discorso vale per i PC ma c’è da fare una piccola precisazione per i dispositivi mobili: essi utilizzano come memorie di massa non i dischi rigidi bensì le memorie flash, piccole memorie non volatili a semiconduttore.

Il dialogo tra l’interno del calcolatore e l’esterno sono le istruzioni scritte dal programmatore convertite in linguaggio macchina che prendono il nome di architettura del calcolatore o ISA (Instruction Set Architecture).

Un altro dialogo fondamentale è quello tra calcolatori grazie alla rete che permette appunto a più calcolatori di scambiarsi informazioni, di condividere le stesse periferiche e anche l’accesso non locale, ovvero gli utenti possono accedere a distanza al calcolatore.

Il tipo di rete più diffusa è sicuramente la rete Ethernet che, però, non permette distanze superiori a 1Km ma ha una buona velocità di 40GByte; l’Ethernet viene usato quindi per la creazione delle cosiddette LAN (Local Area Network) che connetto, ad esempio, un piano di un edificio. Si parla invece di WAN (Wide Area Network) per indicare l’ossatura di Internet, creata in fibra ottica, che collega i vari continenti. Inutile dire che, in realtà, oggigiorno ha preso piede anche la tecnologia wireless (radio) per la comunicazione tra calcolatori.

Valutarne le prestazioni

Cosa vogliamo migliorare sempre di più del nostro calcolatore? Non tutti potrebbero rispondere la stessa cosa. Un singolo utente probabilmente, infatti, vorrebbe semplicemente ridurre il tempo di esecuzione di ogni programma (task), che prende il nome di tempo di risposta, mentre un centro di calcolo sarà sicuramente più interessato ad incrementare il numero di task che il calcolatore è in grado di eseguire in un’unità di tempo (throughput). È anche vero però che, molto facilmente, la riduzione del tempo di risposta influenzerà il throughput e viceversa.

Vediamo qualche equazione generica che ci permette comunque di valutare le prestazioni di un calcolatore. Questo significa che per aumentare le prestazioni di x è necessario diminuire i suoi tempi di esecuzione.

Ma che cos’è il tempo di esecuzione? Chiamato anche tempo assoluto o tempo di risposta, è il tempo impiegato dal calcolatore per completare un task, cioè il tempo dalla richiesta di risorse e accesso alla memoria fino al completamento dell’esecuzione con relativi risultati. Si parla invece di tempo di CPU per indicare solo il tempo di occupazione della CPU ovvero il tempo speso dal processore per lavorare effettivamente sull’istruzione. A sua volta questo tempo può essere suddiviso in due parti: il tempo per l’effettiva esecuzione del programma (tempo di CPU utente) e il tempo per le funzioni del sistema operativo in preparazione all’esecuzione (tempo di CPU di sistema).

Ricapitolando, quindi, possiamo schematizzare i tempi in questo modo: I progettisti, però, preferiscono misurare le prestazioni in termini di velocità con cui l’hardware è in grado di eseguire le istruzioni elementari e per questo utilizzano come “misura” i cicli di clock o periodi di clock, oppure il loro inverso cioè la frequenza di clock.

Detto questo possiamo quindi scrivere una nuova equazione: Ricordiamo ancora una volta che il periodo di clock è l’inverso della frequenza e quindi l’equazione può essere riscritta anche con questo parametro. Detto questo possiamo dire che per migliorare le prestazioni dell’hardware (e quindi il tempo richiesto per un programma) è possibile ridurre i cicli di clock oppure la sua durata.

Facciamo caso che nell’equazione sopra abbiamo parlato di programma, quindi non di una singola istruzione bensì di tante istruzioni; per questo motivo essa non potrà che dipendere anche dal numero di istruzioni di cui è composto il programma. Questo parametro influenza il numero di cicli di clock che la CPU dovrà svolgere: Non è detto che ogni istruzione necessiti lo stesso numero di cicli di clock, per questo motivo se ne stima una media che solitamente viene indicata con la sigla CPI.

Riscriviamo quindi l’equazione base non più in relazione al programma ma alle istruzioni: tempo di CPU = numero istruzioni x CPI x periodo clock.

Ora manca capire come misurare i vari parametri per poter svolgere poi il calcolo:

  • Il tempo di esecuzione della CPU può essere misurato semplicemente mandando in esecuzione il programma.
  • La durata di un ciclo di clock si trova specificata nel manuale del calcolatore.
  • CPI e numero di istruzioni, invece, risultano difficili da calcolare. Infatti, come già detto, il CPI varia da istruzione ad istruzione e quindi da programma a programma; conviene di più cercare di calcolare il numero di istruzioni magari con un simulatore dell’architettura.

La barriera dell'energia

Fino ad ora abbiamo visto parti fondamentali di un calcolatore, come valutarne le prestazioni e anche i punti da seguire per continuare a migliorare la tecnologia. A tutto questo va aggiunto, però, un dettaglio non trascurabile: la potenza.

Essa rappresenta un limite soprattutto per i dispositivi mobili che hanno una batteria di durata limitata e quindi devono gestire al meglio la loro dissipazione di potenza; la sfida è quindi cercare di puntare su batterie a risparmio energetico così da essere più efficienti e durature.

Come sappiamo già da altri corsi, la tecnologia alla base dei circuiti integrati dei calcolatori più comuni è la CMOS (Complementary Metal Oxid Semiconductors), quindi transistor a metallo ossido semiconduttore che hanno la caratteristica di assorbire energia elettrica soprattutto in fase di commutazione (da acceso a spento e viceversa).

Da sistemi uniprocessore a sistemi multiprocessore

Dopo aver speso qualche parola sull’energia torniamo alle nostre prestazioni. Come già detto, i calcolatori più efficienti per un singolo utente possono essere quelli che diminuiscono il tempo di elaborazione di un programma mentre per delle aziende può essere il throughput, che abbiamo già detto essere quanti programmi possono essere eseguiti per unità di tempo. Dal 2006, la tecnologia evolve nella direzione delle aziende, puntando sempre più su calcolatori a multiprocessore (chiamati multicore) cioè a calcolatori che contengono più processori su singolo chip.

Questo, ovviamente, porta a dei problemi per i programmatori: i programmi devono essere scritti per sfruttare tutti i processori al meglio, per questo vengono continuamente aggiornati all’aumentare dei processori sul chip. Ma cosa intendiamo con “sfruttare al meglio”? Il parallelismo di più processori che lavorano contemporaneamente deve essere perfetto per essere funzionale: nessun processore deve gravare sulla perfetta organizzazione dell’esecuzione del programma, in parole povere, non deve essere in ritardo a fornire un risultato, se no il ritardo si ripercuoterebbe a valanga e perderebbe senso avere più processori anziché uno solo. A tutto questo si aggiunge lo scheduling, cioè la pianificazione e la divisione dei compiti tra i vari core prima della reale esecuzione; anch’esso deve essere veloce e funzionale per sprecare il minor tempo possibile.

La valutazione sul buon comportamento del calcolatore viene fatta con dei benchmark, programmi campione di vario genere che testano le prestazioni del dispositivo. Esistono anche benchmark per testare la potenza che inviano carichi di lavoro di ampiezza variabile in intervalli diversi di tempo.

Abbiamo già detto che esiste un particolare parallelismo chiamato pipeline. La caratteristica della pipeline è di nascondere la vera divisione dell’hardware al programmatore e al compilatore cosicché essi abbiamo l’impressione di avere un calcolatore che lavora le istruzioni in maniera sequenziale.

Errori e trabocchetti: riflettere per non sbagliare

  • Migliorare un componente di un calcolatore porta ad un aumento proporzionale al miglioramento nelle prestazioni. Questo non è assolutamente vero in quanto un solo componente potrebbe non migliorare in maniera significativa il calcolatore. La legge di Amdahl ci fornisce un’equazione per il reale miglioramento che avviene modificando un componente: tempo di esecuzione dopo miglioramento = tempo di esecuzione influenzato miglioramento + tempo di esecuzione non influenzato.
  • Progettare un’architettura che massimizza le prestazioni non è legato con progettare un’architettura che massimizzi l’efficienza energetica. Essendo che l’energia non è altro che l’assorbimento di potenza nel tempo, un hardware che esegue un programma in minor tempo avrà sicuramente vantaggi anche in potenza.
  • È possibile valutare le prestazioni del calcolatore anche trascurando alcuni parametri nell’equazione. No! È stato provato che utilizzare una formula “ridotta” non stima correttamente le prestazioni dell’hardware; è necessario quindi non trascurare nessun parametro. Ovviamente se non si posseggono tutti i dati per il calcolo difficilmente potrà essere svolto… ma esiste una formula alternativa per il calcolo non più basata sui tempi bensì sulla velocità: MIPS sta per Million Instructions Per Second e rappresenta il reciproco del tempo di esecuzione numero di istruzioni cioè la velocità di esecuzione delle istruzioni: più la macchina è veloce più sarà elevato il suo MIPS.

Attenzione, però! Non è possibile confrontare due calcolatori che utilizzano istruzioni diverse in quanto il MIPS sarebbe diverso e, inoltre, programmi diversi ottengono MIPS diversi anche per un singolo calcolatore.

Cosa abbiamo capito in questo capitolo: punto della situazione

  • L’unica misura valida per la valutazione delle prestazioni è il tempo di esecuzione che ricordiamo essere influenzato da più parametri: il numero di istruzioni, il numero di cicli di clock per istruzione e la durata del clock.
  • Per continuare a migliorare i calcolatori è necessario creare parallelismi sempre più efficienti e sfruttare al massimo la gerarchia delle memorie (e la memoria cache).
  • Le dimensioni dei chip non sono più la priorità, la nuova sfida riguarda il consumo di energia per i dispositivi mobili.

Capitolo 2 - Le istruzioni: il linguaggio dei calcolatori

Vediamo ora le principali istruzioni del linguaggio assemblativo e la loro corrispondenza ad un codice di alto livello come il C (o Java).

Come forse abbiamo già detto, ricordiamo cosa si intende con istruzioni: sono le parole del linguaggio del calcolatore e l’insieme di istruzioni che andremo ad elencare viene dal processore MIPS a seguire dagli anni Ottanta.

Anteprima
Vedrai una selezione di 10 pagine su 64
Preparazione all'esame di Calcolatori elettronici Pag. 1 Preparazione all'esame di Calcolatori elettronici Pag. 2
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 6
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 11
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 16
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 21
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 26
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 31
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 36
Anteprima di 10 pagg. su 64.
Scarica il documento per vederlo tutto.
Preparazione all'esame di Calcolatori elettronici Pag. 41
1 su 64
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Jettappunti di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pavia o del prof Danese Giovanni.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community