Estratto del documento

Introduzione

Il calcolatore: Divisione tra parte hardware (insieme dei dispositivi e oggetti tangibili come circuiti integrati, memorie, stampanti, ecc.), parte software (insieme delle istruzioni e informazioni necessarie per risolvere i problemi a cui il sistema è preposto. Un insieme di istruzioni, codificate in termini comprensibili a un calcolatore, sufficienti a risolvere un problema viene detto programma) e parte firmware (software integrato in un componente elettronico, es. chip, o dispositivo, in grado almeno di avviare il componente stesso e di farlo interagire con altri componenti).

Macchine a più livelli

L’insieme di istruzioni eseguite direttamente dall’hardware di un calcolatore è detto linguaggio macchina o Assembly (L0). A questo linguaggio non è adatto ai programmatori quindi viene creato un linguaggio L1 più facile da utilizzare che opera tramite computer virtuali e questo processo può essere replicato più volte e ad ogni livello è necessario un traduttore, codificato in linguaggio i-1, che traduca le istruzioni in linguaggio macchina i in istruzioni in linguaggio macchina i-1.

La compilazione è quando il traduttore legge il programma in linguaggio macchina i e produce un nuovo programma in linguaggio i–1. L’interpretazione è quando il traduttore legge il programma in linguaggio macchina i ed esegue direttamente la traduzione sulla macchina virtuale a livello i–1. I calcolatori moderni si basano su architetture a più livelli (normalmente 5).

Partendo dal più basso si ha:

  • Livello logico digitale: Rappresenta l’hardware del calcolatore, i suoi componenti sono detti porte o circuiti elementari.
  • Livello della microarchitettura: La macchina virtuale di questo livello è in grado di effettuare microistruzioni che, ad esempio, prelevano due numeri da registri o dalla memoria e li sommano.
  • Livello ISA: la macchina virtuale di questo livello esegue il linguaggio Assembler del calcolatore. La complessità e il numero delle istruzioni presenti a questo livello (instruction set) variano da calcolatore a calcolatore.
  • Livello del Sistema Operativo: La macchina virtuale di questo livello ha un livello di astrazione simile a quella sottostante. Tuttavia molte delle istruzioni eseguibili a questo livello vengono fornite con un insieme di funzionalità più sofisticate quali, ad esempio, una diversa organizzazione della memoria e la possibilità di far funzionare più programmi contemporaneamente.
  • Livello applicativo: Consiste in linguaggi che possono essere utilizzati dai programmatori (Basic, Pascal, C, C++, Java, Lisp, Prolog, ecc.).

Traduzione di programmi C, C++

Da un file in linguaggio sorgente (esempio .cpp o .c) viene eseguito il Compilatore che traduce i singoli moduli di un programma quindi si creano file in linguaggio oggetto (esempio .obj o .o). Poi tramite il Linker si collegano i moduli e risolve i riferimenti inter-modulo arrivando infine al file in linguaggio eseguibile (esempio .exe) che poi tramite il Loader carica il programma in memoria e trasforma i riferimenti tra le istruzioni in indirizzi di memoria avendo quindi il programma in esecuzione. Il traduttore è detto compilatore quando il linguaggio sorgente è di alto livello, è detto assemblatore quando il sorgente è linguaggio assembly.

Generazioni e architettura del calcolatore

  • Generazione 0, calcolatori meccanici: Il primo a costruire macchine calcolatrici automatiche fu Blaise Pascal che nel 1642 realizzò un dispositivo a ingranaggi in grado di eseguire addizioni e sottrazioni complete. In seguito, nel 1672, Leibniz inventò una macchina in grado di fare anche moltiplicazioni e divisioni. Successivamente Charles Babbage progettò l’Analytical Engine cioè la prima Macchina di Turing completa.
  • Generazione 1, valvole termoioniche e relè: Questi ultimi due, inclusi i transistor, permettono di memorizzare un’informazione binaria. La prima della generazione fu COLOSSUS in Inghilterra, nata dall’esigenza di decodificare i messaggi tedeschi durante la seconda guerra mondiale. Successivamente venne ENIAC negli Stati Uniti per calcolare tabelle per puntamento dell’artiglieria pesante. Essa era formata da 18K valvole, 6K interruttori e 3K relè, pesando circa 30 tonnellate. Venne poi IAS detta Macchina di Von Neumann e che è uno dei più importanti punti di riferimento dell’ingegneria informatica, la sua architettura è tutt’ora alla base dei moderni calcolatori. Infine fu IBM 701, primo computer di casa IBM divenendo nei successivi 10 anni leader di mercato.
  • Generazione 2, transistor: Il transistor fu inventato nel 1948. Il primo minicalcolatore fu PDP-1 della DEC dotato anche di display grafico che permise ad alcuni studenti dell’MIT di programmare il primo videogioco della storia Spacewar. Poi venne PDP-8 con l’innovazione del Bus cioè un insieme di fili usato per collegare i componenti di un calcolatore. Infine ci fu CDC 6600 di casa CDC che fu la prima macchina parallela della storia, destinata al calcolo.
  • Generazione 3, circuiti integrati: Inventati nel 1958, i circuiti integrati permisero di inserire dozzine di transistor su una singola piastrina di silicio favorendo dimensioni, velocità e costo. L’IBM 360 portò per la prima volta la possibilità della multiprogrammazione, ovvero più programmi alla volta.
  • Generazione 4, Very Large Scale Integration: Con i progressi tecnologici si fu in grado di integrare su un solo chip un numero sempre maggiore di transistor cominciando l’era dei Personal Computer. Il primo fu IBM 5150 con sistema operativo MS-DOS fornito da una piccola azienda, ai tempi, la Microsoft Corporation di Bill Gates. Altre società si buttarono nel commercio dei PC come Commodore, Atari e Apple ma solo quest’ultima sopravvisse con il successo Machintosh dovuto alla prima GUI. Un passo in avanti fu passaggio dell’architettura da 32 a 64 bit nel 1992 tutt’ora in atto.
  • Generazione 5, computer invisibili e computazione omnipresente: Questa generazione è legata soprattutto alle forti riduzioni di dimensioni e all’integrazione in altri oggetti (Sistemi Embedded) come negli elettrodomestici, orologi, giocattoli, ecc. e da qui il nome di Computer Invisibili inoltre oggigiorno con Smartphone e Tablet che dispongono di capacità di calcolo, periferiche e sensori possiamo parlare di computazione omnipresente.

Presente e futuro: Tra le poche previsioni che non sono state disattese per quanto riguarda il livello di evoluzione dei calcolatori vi è la Legge di Moore che nel 1965 notò che il numero di transistor su un singolo chip raddoppiavano ogni 18 mesi e tutt’ora sembra essere confermata. Questa crescita ha riguardato anche, per esempio, la capacità dei Dischi Rigidi passando da 10 MB (1980) a 12TB (2017) oppure nelle telecomunicazioni e reti passando, in 20 anni, da 300 bit/s a 200Mbit/s.

Rappresentazione digitale dell'informazione

I Sistemi Digitali: Un segnale è analogico quando i valori utili che lo rappresentano sono continui in un intervallo e non numerabili, mentre si dice digitale quando i valori utili che lo rappresentano sono discreti e finiti.

L’Aritmetica dei Calcolatori: La precisione con cui i numeri possono essere espressi è finita e predeterminata poiché la memoria è limitata. La rappresentazione è normalmente ottenuta utilizzando il sistema binario.

Numeri a Precisione Finita: Sono quelli rappresentati con un numero finito di cifre. Le operazioni con questi numeri causano errori quando si esce dal loro range di tipo Underflow quando il risultato dell’operazione è minore del più piccolo valore rappresentabile, di tipo Overflow quando il risultato dell’operazione è maggiore del più grande valore rappresentabile. Inoltre questi numeri, a differenza dei numeri interi, non sono chiusi rispetto alle operazioni di somma, sottrazione e prodotto; e anche l’algebra è diversa.

Notazione Posizionale: I sistemi di numerazione posizionale associano alle cifre un diverso valore in base alla posizione che occupano nella stringa che compone il numero. Inoltre un sistema posizionale è definito dalla base utilizzata e un sistema in base B richiede B simboli per rappresentare valori tra 0 e B-1. Alcuni sistemi sono il Decimale, il Binario, l’Esadecimale. Quindi per ogni numero esistono rappresentazioni diverse per ogni base.

Conversione tra basi

  • Da binario ad ottale: 3 cifre binarie = 1 cifra ottale. Quindi raggruppare dalla virgola binaria i bit a 3 a 3. Per l’operazione contraria dividere ogni cifra ottale in 3 bit.
  • Da binario ad esadecimale: 4 cifre binarie = 1 cifra esadecimale. Quindi raggruppare dalla virgola binaria i bit a 4 a 4. Per l’operazione contraria dividere ogni cifra esadecimale in 4 bit.
  • Da decimale a binario: si procede sottraendo al numero da decomporre la più grande potenza di 2 minore del numero da decomporre. Il processo viene applicato ricorsivamente al resto della sottrazione. Il risultato binario si ottiene ponendo a uno le cifre corrispondenti alle potenze che sono state utilizzate nella decomposizione.
  • Da binario a decimale: si procede traducendo le singole cifre binarie alle corrispondenti potenze di due in base decimale e sommando i risultati parziali.

Per tutte le altre conversioni passare sempre dal binario.

Il calcolatore e i numeri binari: L’unità di misura è il BYTE formato da 8 bit dove quello più a destra è il meno significativo. Sequenze più lunghe del byte sono dette WORD e sono sempre multipli del byte (16/32/64/128 bit).

Unità di misura del sistema binario

Il bit rappresenta la più piccola unità di informazione memorizzabile. Sono stati definiti molti multipli.

Numeri binari negativi

Ci sono 3 rappresentazioni per i numeri negativi:

  • Grandezza e Segno: Il bit più a sinistra viene utilizzato per il segno (0 positivo, 1 negativo) e il resto definiscono la grandezza in valore assoluto.
  • Complemento a due: Il bit più a sinistra viene utilizzato per il segno (0 positivo, 1 negativo) e il resto, partendo dal valore assoluto, vanno invertiti tutti 0 con 1 e viceversa, e infine si aggiunge 1 al risultato.
  • Eccesso 2m-1: Rappresenta i numeri come somma di se stessi con 2m-1 dove m è il numero di bit utilizzati per rappresentare il valore. Si noti che il sistema è identico al complemento a due con il bit di segno invertito. In pratica i numeri tra –128 e 127 sono mappati tra 0 e 255.

Le rappresentazioni in complemento a due ed eccesso sono le più efficienti poiché permettono di trattare la sottrazione come somma di numeri con segno opposto.

Somma tra numeri binari: Il procedimento di somma binaria è equivalente a quella decimale con il riporto che, però, si genera quando entrambi gli addendi hanno valore 1. Utilizzando il complemento a due si ha che: il riporto generato dai bit più a sinistra viene ignorato, se gli addendi sono di segno opposto non si può verificare un overflow, l’overflow si verifica se il riporto generato nel sommare i bit di segno è diverso dal riporto utilizzato per sommare i bit di segno.

Mascherature dei bit

Una maschera di bit è una qualsiasi configurazione di un insieme di bit di lunghezza predefinita. Queste mascherature possono essere eseguite tramite operatori che lavorano bit a bit (Bitwise operator):

  • AND bit a bit: dati due byte in input, restituisce un byte, in cui un bit è 1 se e solo se i bit corrispondenti nei due operandi sono posti a 1.
  • OR bit a bit: dati due byte in input, restituisce un byte in cui un bit è 1 se o almeno uno dei bit corrispondenti nei due operandi sono posti a 1.

Come impostare a 1, uno o più bit, di una locazione di memoria X?
X = X OR maschera Dove, nella maschera, solo i bit di interesse sono impostati a 1 e i rimanenti a 0.

Come impostare a 0, uno o più bit, di una locazione di memoria X?
X = X AND maschera Dove, nella maschera, solo i bit di interesse sono impostati a 1 e i rimanenti a 0.

Come verificare se uno o più bit, di una locazione di memoria X, sono impostati a 1?
Y = X AND maschera Dove, nella maschera, solo bit di interesse impostati a 1. Se Y=0 condizione non verificata.

Come verificare se uno o più bit, di una locazione di memoria X, sono impostati a 0?
Y = X AND maschera Dove, nella maschera, solo bit di interesse impostati a 1. Se Y=0 condizione verificata.

Numeri floating-point

Alcuni problemi richiedono una gamma di valori più vasta degli interi, come numeri molto grandi o molto piccoli. Perciò si usa una notazione indipendente dal numero di cifre significative, cioè il floating-point in forma: 10eN = F x , con N numero da rappresentare, F mantissa, che determina la precisione, esponente che determina la gamma dei valori.

Questa notazione consente più rappresentazioni per uno stesso numero, perciò si è creata una codifica standard in cui F è compreso tra 0.1 e 1 compresi. A differenza dei numeri reali, la densità dai float non è infinita e quindi si può compiere, in alcuni casi, un’Errore di Arrotondamento. Per incrementare la densità dei numeri è necessario aumentare il numero di cifre della mantissa. La codifica standard sopra citata prevede tre formati: la Singola Precisione, la Doppia Precisione, la Precisione Estesa.

Lo standard prevede, inoltre, la rappresentazione dei float in forma normalizzata e non formalizzata:

  • Forma Normalizzata: La mantissa binaria normalizzata deve presentare uno 1 a sinistra della virgola binaria, con l’esponente che deve essere aggiustato di conseguenza. Tuttavia la forma normalizzata non permette di sfruttare appieno la gamma dei valori rappresentabili con 32 e 64 bit.
  • Forma Denormalizzata: La mantissa binaria può assumere qualsiasi configurazione, e viene usata per rappresentare valori inferiori a 2-126.

Rappresentazione dei caratteri

Ogni calcolatore dispone di un set di caratteri da utilizzare che sono codificati sotto forma di numeri, la mappatura dei caratteri è detta Codice di Caratteri e per comunicare è quindi necessario che tutti i calcolatori utilizzino la stessa mappatura che consiste nell’ASCII. Ogni carattere ASCII utilizza 7 bit, quindi sono possibili 128 configurazioni, ma i caratteri da 0 a 31 (1F in esadecimale) sono caratteri di controllo e non sono stampabili.

Rappresentazione di suoni

Fisicamente un suono è rappresentato come un‘onda, ma per essere usato come informazione digitale va codificato digitalmente, tramite due parametri: la Frequenza di Campionamento e il Numero di bit per la quantizzazione di ciascun campione, più è alta la frequenza e il numero di bit/campione e più la rappresentazione è accurata.

Rappresentazione di immagini

L’immagine video è rappresentata tramite matrice (griglia) di pixel in ognuno dei quali viene memorizzata l’intensità luminosa di un colore. I parametri importanti sono la Dimensione (Risoluzione), la Profondità, e il Formato di Rappresentazione in codifica Grayscale, RGB o Palette.

  • Codifica Grayscale: ogni pixel codificato con 1 byte quindi 256 livelli di grigio dove 0 = nero e 255 = bianco e immagine di dimensioni W x H occupa W x H bytes.
  • Codifica RGB: ogni pixel codificato con 3 byte (R,G,B) e ognuno specifica l’intensità di quel colore, numero di colori = 16K+ e immagine W x H occupa W x H x 3 bytes.
  • Codifica Palette: definisce colori, e colore di pixel = indice di colore in palette.

Architettura del calcolatore e delle sue periferiche

Organizzazione di un calcolatore: Un calcolatore è un sistema composto da processori, memorie e dispositivi di input/output collegati tra loro. Questa organizzazione è detta “Bus Oriented”, dove un bus è un insieme di connessioni elettriche, cioè fili, parallele utilizzate per trasportare tutte le informazioni da un componente all’altro.

L’architettura di Von Neumann: La sua grande intuizione fu quella di utilizzare la memoria non solo per i dati ma anche per i programmi, così questi potevano essere caricati in memoria evitando configurazioni con interruttori e cavi. I programmi e i dati sono trasferiti entrambi attraverso il bus dati mentre il bus indirizzi è utilizzato dalla CPU per indicare alla memoria le locazioni dove risiedono le informazioni da utilizzare.

La CPU: Il suo compito è quello di eseguire i programmi immagazzinati nella memoria leggendo le loro istruzioni ed eseguendole in sequenza. Essa è composta da:

  • Unità di controllo: che legge le istruzioni dalla memoria centrale e ne determina il tipo.
  • ALU: che esegue le operazioni necessarie all’esecuzione delle istruzioni (AND, OR, addizione binaria).
  • Registri: che sono una piccola memoria ad alta velocità utilizzata per memorizzare risultati temporanei e informazioni di controllo necessarie alla ALU. Il registro più importante è il Program Counter (PC) che indica la prossima istruzione da eseguire, l’Instruction Register (IR) è il registro che memorizza l’istruzione che si sta per eseguire.

All’interno della CPU i vari componenti sono a loro volta collegati tramite dei bus.

Il Data Path: In figura è rappresentato il classico data path per una CPU di Von Neumann. Il passaggio di due operandi attraverso la ALU e la memorizzazione del risultato viene detto Ciclo di Data Path. Ogni istruzione Assembly (ISA) viene eseguita in uno o più cicli di data path o, in architetture non parallele, cicli di Clock, misurato...

Anteprima
Vedrai una selezione di 17 pagine su 77
Architetture degli elaboratori Pag. 1 Architetture degli elaboratori Pag. 2
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 6
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 11
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 16
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 21
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 26
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 31
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 36
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 41
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 46
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 51
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 56
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 61
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 66
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 71
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori Pag. 76
1 su 77
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Vorgio di informazioni apprese con la frequenza delle lezioni di Architetture degli elaboratori 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 Bologna o del prof Maltoni Davide.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community