Estratto del documento

Storia dell'elaboratore

Abaco

Il primo elaboratore risale al 2400 a.C. e prende il nome di strumento con cui si fanno operazioni in modo veloce.

Regolo

Nel 1621, dopo 4000 anni, è stato inventato il regolo. Era una stecchetto usata dagli ingegneri fino a 40 anni fa, che utilizzava la proprietà dei logaritmi di trasformare i prodotti in somme per semplificare le operazioni. Entrambi sono strumenti che possono aiutare nel calcolo ma necessitano di essere attivati da un operatore.

Invenzioni del XVII secolo

Nel XVII secolo vediamo un'importante invenzione da parte del filosofo e matematico Pascal, che nel 1641 inventò la Pascalina, che con un sistema di ruote e ingranaggi esegue le somme. Successivamente Leibniz modificò la Pascalina per fare anche i prodotti.

Era industriale

Nel 1801 con l’avvento dell’era industriale furono introdotti i primi telai programmabili. Non facevano conti, tessevano, ma l’importanza sta nella programmabilità. Il più importante fu quello di Marie Jacquard (1752-1834). Il concetto di programmabilità venne esteso al calcolo da Charles Babbage (1791-1871).

Censimento del 1890

Nel 1890 fu fatto un censimento negli Stati Uniti e per l’occasione si fece una gara per determinare la maniera più economica e accurata. Vinse Hollerith che si ispirò ai biglietti forati degli autobus per effettuare il censimento. Costruì una macchina per interpretare le schede forate ed ebbe tanto successo che nel 1896 fondò una società di produzione di macchine chiamata Tabulating Machine Company. Nel 1924 cambiò nome e divenne International Business Machine Company (IBM). È ora azienda leader per la produzione di macchine di calcolo.

Macchine calcolatrici

Negli anni '20/'30 le macchine calcolatrici da meccaniche diventarono elettromeccaniche, in cui i fori delle schede fanno scattare impulsi elettrici che controllano gli organi meccanici. Ciò consente riduzione del tempo di calcolo.

Mark 1

Nel 1944 fu costruito ad Harvard il calcolatore Mark 1: Automatic Sequence Control Calculator, composto da 78 calcolatrici meccaniche collegate da 800 km di cavi e 3300 relè interruttori. Aveva le dimensioni di 16x2,4x0,5 m e pesava 4,5 tonnellate. Era azionata con nastri forati. Questa macchina poteva memorizzare 72 numeri con 23 cifre decimali ciascuno ed eseguiva:

  • Somme e sottrazioni in 0.3 s
  • Moltiplicazioni in 6 s
  • Divisioni in 15 s
  • Logaritmi in 1 min

Fu costruito durante la seconda guerra mondiale e finanziato dall’IBM.

ENIAC

Nel 1946 fu costruito un altro calcolatore, l’ENIAC: Electronic Numerical Integrator And Computer. Era il primo calcolatore completamente elettronico, non c'erano ingranaggi. Fu inventato da Eckert e Mauchly in Pennsylvania. Questo calcolatore, invece che degli ingranaggi, faceva uso di tubi a vuoto che a seconda del livello di pressione facevano passare corrente o meno (stando a rappresentare un 1 o uno 0), e quindi di codificare il programma. Aveva il vantaggio di avere un cambio di stato velocissimo, dell’ordine di 10-6 secondi. Era costituito da 18000 tubi a vuoto e occupava 180 m2 di superficie per un peso di 30 tonnellate. Faceva 300 moltiplicazioni al secondo. Quando venne messo in moto per la prima volta causò un black out. Non era programmabile, però, per fargli eseguire un programma diverso dovevano smontare e rimontare una parte del congegno. Era inoltre molto costoso in quanto per funzionare necessitava dell’intervento di 30 persone.

EDVAC

Ultimo supercalcolatore della prima generazione (costruito nel 1951) fu il capostipite dei calcolatori moderni: Electronic Discrete Variables Automatic Computer. Implementò il concetto di software che proviene dal modello concettuale di Von Neumann (1903-1957). Era in grado di acquisire e memorizzare una sequenza di istruzioni senza dover fare modifiche volta per volta. Aveva una memoria di 1000 parole (parole di 44 bit), occupava 45 m2 e pesava 8 tonnellate. Richiedeva una potenza di 56 kW.

Evoluzione dei calcolatori

Dopo la metà degli anni '50 si diffondono i calcolatori della prima generazione che ricalcano il modello dell’ENIAC; erano macchine grandi ed ingombranti che basano la loro tecnologia sui tubi a vuoto e fanno 2000 operazioni al secondo.

Transistor

Alla fine degli anni '50 c’è l’avvento dei cristalli di silicio e germanio in grado di trasmettere corrente se sottoposti a tensioni superiori ad una certa soglia. Sono analoghi ai tubi a vuoto ma molto più piccoli (mm al posto di cm) e molto più veloci nel cambio di stato. Arrivano quindi i calcolatori di seconda generazione che sono in grado di fare 40000 operazioni al secondo.

Circuiti miniaturizzati

Nel 1964 l’IBM lancia dei circuiti miniaturizzati in silicio in grado di integrare molti transistor e questo consente di arrivare a 2 milioni di operazioni al secondo e costi di manutenzione e mantenimento molto inferiori. Infatti, negli anni '70, la miniaturizzazione ha permesso di portare il calcolatore nelle case.

PC e calcolatrici portatili

Nel 1977 Sharp produsse la prima calcolatrice portatile e la Apple introdusse il primo PC.

Flop

Flop: è l’unità di misura di potenza di un calcolatore, floating point operation per second. Due anni fa il più potente era il Sequoia, un IBM Bluegene/Q cluster (assemblamento di processori a 16 core). Aveva circa 1572564 core, in grado di sviluppare una potenza di 20.1 pflop (20.1x1015) operazioni al secondo. Consuma circa 7.89 MW di potenza (considerare che la centrale di Porto Tolle ha una potenza di 2,54 kW e consente l’8% del fabbisogno italiano). Ogni anno la potenza del calcolatore più potente raddoppia, tra 10 anni avremo calcolatori 1000 volte più potenti.

Evoluzione futura

Nel 1977 Tflop 10^12, 2009 pflop 10^15, 2018 exflop 10^18. Ma ci siamo ancora lontani e il rallentamento è dovuto al consumo di energia, in questo momento si punta a ridurre il consumo. Ora i processori consumano 0.48 kW/tflop, ossia 23 volte in meno del più efficiente del 2007 (Power 6). Se una volta si cercava di miniaturizzare e moltiplicare le operazioni, ora la ricerca è orientata all’energy efficiency e si stima di poter arrivare all’exflop nel 2020. Ora sono molto in voga le GPU, le schede grafiche, per fare i conti. Hanno molti core a bassa frequenza, consumano poca energia.

Computer

È una macchina per:

  • Memorizzare dati
  • Interagire con dispositivi
  • Eseguire programmi

Programma: è una sequenza di istruzioni che il computer esegue per svolgere una determinata attività. Le istruzioni che il computer esegue in realtà sono molto semplici, tutto ciò è molto veloce sicché sembra eseguire in modo fluido operazioni complesse.

Programmazione

È l'arte di scrivere programmi, ovvero sequenze di istruzioni che il computer è in grado di interpretare ed eseguire. Alla base di ogni programma vi è sempre un algoritmo.

  • Sequenza ordinata di passi
  • Ciascuno di questi passi deve essere eseguibile
  • I passi devono essere non ambigui: non devono venire prese decisioni arbitrarie
  • Ogni algoritmo deve avere una fine

Scrivere un programma significa tradurre in un linguaggio di programmazione un determinato algoritmo.

Rappresentazione dati

Come memorizzano i dati i computer: tutte le informazioni sono rappresentate come sequenze di zeri e di uno. Generalmente si attribuisce zero alla presenza di un determinato fenomeno fisico e uno all'assenza di un determinato fenomeno fisico (può essere tensione, stato di polarizzazione, ecc). Non solo i dati ma anche i programmi per il calcolatore sono sequenze di zeri e uno. Se vogliamo scrivere un programma dovremmo scrivere una determinata sequenza di zeri e uno, cosa impossibile per un essere umano. Perciò sono stati inventati i linguaggi di programmazione.

Linguaggi di programmazione

Sono dei veri e propri linguaggi, una sintassi ben definita, che permette al programmatore di dare istruzioni al computer.

Come funziona la programmazione:

  1. Il programmatore scrive un programma chiamato sorgente.
  2. Questo programma, che è un file di testo che noi siamo in grado di comprendere, viene dato al compilatore, facendolo diventare un file eseguibile (o linguaggio macchina). Viene trasformato un programma da estensione .txt a estensione .exe.

Per la programmazione in f90 è convenzione utilizzare un programma in estensione prog.f90 che diventi poi prog.exe. In genere i linguaggi di programmazione si distinguono in:

  • Programmi di basso livello: le cui istruzioni sono più simili al linguaggio macchina. Sono pochi comandi molto semplici.
  • Programmi di alto livello: si avvicinano sempre di più al nostro modo di ragionare. Molti comandi e complessi.

In ordine di complessità crescente:

  • Assembler
  • Fortran 77
  • Fortran 90 (per lo più usato per applicazioni numeriche matematiche)
  • C
  • C++
  • Java
  • Python

Hardware: architettura di Von Neumann (EDVAC)

  1. CPU: central processing unit
  2. RAM: memoria principale
  3. Memoria secondaria (hard disk)
  4. Dispositivi di I/O: dispositivi con cui l'utente comunica con la macchina.

Tutte queste componenti sono collegate tra di loro da un bus di trasportazione che trasporta i dati da un elemento all'altro.

CPU: Central Processing Unit

È composta da:

  1. ALU: Aritmetic Logic Unit, unità aritmetico logica, servirà ad eseguire le operazioni aritmetiche e i confronti logici.
  2. Registri: sono memorie molto piccole e molto veloci che contengono i dati durante la loro elaborazione.
    • Ordinari
    • Speciali: ce ne sono due e sono il contatore di programma (PC), che è un registro in cui la CPU tiene in memoria qual è la prossima operazione da eseguire. Man mano che il programma viene eseguito la CPU deve leggere e interpretare il programma, serve a ricordare alla CPU in quale parte del programma si trova. L'altro registro speciale è il registro d'istruzione (IR): serve a ricordare l'istruzione che viene eseguita al momento.
  3. Unità di controllo: è la parte più importante, che esegue le istruzioni del programma secondo il ciclo definito Fetch-Decode-Execute. Quindi la prende, la decodifica e la esegue.

RAM: Random Access Memory

È la memoria principale, è una memoria volatile: significa che quando spegniamo il computer tutti i dati in essa contenuti vanno persi, a parte la ROM: è una piccola parte della RAM che non è volatile (Read Only Memory), sostanzialmente contiene dati permanenti per il sistema operativo. La più piccola informazione contenuta nel computer è il BIT (Binary Digit) e può valere 0 o 1. Tuttavia, l'unità di memoria più piccola non è il BIT ma il BYTE: cioè un insieme di 8 bit. È l'unità più piccola dotata di indirizzo proprio.

Indirizzo: è un codice, un numero intero che identifica univocamente un determinato byte. L'indirizzo è generalmente compreso tra 0 e n-1, dove n è il numero di byte di cui il computer dispone.

In genere i byte vengono raggruppati in:

  • KB: 210 byte, 1024 bit
  • MB: 220 byte, 1024 KB
  • GB: 230 byte, 1024 MB
  • TB: 240 byte, 1024 GB

Parole: In genere i byte vengono raggruppati in parole, che è un insieme intero di byte (in genere 4). I calcolatori hanno due modi per leggere i byte all'interno della parola: possono essere letti dal primo all'ultimo o dall'ultimo al primo.

  • BIG-ENDIAN: leggono i byte dal primo all'ultimo
  • LITTLE-ENDIAN: leggono i byte dall'ultimo al primo

Fisicamente la memoria del calcolatore è composta di piastrine di memoria: sono delle piastrine di bit, tante unità e ciascuna di queste unità è in grado di contenere un bit. Dobbiamo unire questa piastrina di bit ad altre 7 piastrine di bit per ottenere un byte. Le metto assieme e assegno un indirizzo comune a tutti i bit che appartengono allo stesso livello. Prendo questa unità che ho appena costruito e la assemblo in gruppi di quattro, assieme costituiscono la mia parola. Tutti i byte avranno lo stesso indirizzo. Se ogni byte ha indirizzo, per esempio, B. La parola avrà indirizzo A=4B. Le parole avranno indirizzi multipli di 4. Se voglio accedere ad un particolare byte all'interno della parola aggiungo 0 per il primo byte, 1 per il secondo e così via.

Memoria interallacciata

Questo tipo di assemblaggio della memoria si chiama memoria interallacciata. La memoria RAM si chiama così perché il costo per leggere un qualsiasi byte all'interno della memoria. In generale che l'indirizzo di un byte sarà rappresentato come una stringa di zeri e di uno.

  • Le ultime due cifre ci dicono quale byte della parola considero (00 01 10 11).
  • Le cifre prima vengono chiamate indirizzo interno e ci dicono a che punto del byte dobbiamo porci.

Caché

È una parte molto importante del processore, ed è sostanzialmente una piccola memoria molto veloce in cui memorizzare i dati in elaborazione. La RAM non è una memoria così veloce, i dati impiegano un certo tempo ad arrivare dalla RAM al processore. Perciò è stata inventata un'altra memoria intermedia tra la RAM e i registri. È molto piccola e molto veloce e si trova a ridosso del processore. Per essere efficiente la caché utilizza indirizzi piccoli. Ci sono una serie di dati in RAM che io devo elaborare, prima di portarli al processore li metto in caché. Se mi servono dati nuovi, libero la caché e metto dati nuovi. Se invece mi servono di nuovo ci metto molto meno in quanto ai dati posso accedere subito. L'idea è mettere in piedi un metodo per mettere i dati in caché e decidere se il dato mi serve o no, se mi serve lo tengo, se non mi serve lo rimando indietro.

Esempio di utilizzo della caché

Ho una RAM a 23 bit. A me interessa l'indirizzo della parola. Mi servono 10 bit, ignoro il 22esimo e il 23esimo che mi individuano il byte all'interno della parola e considero i 10 precedenti. I bit restanti vengono chiamati bit alti. Questi dieci bit li utilizzo per identificare l'indirizzo in caché. Avrò la mia caché che avrà 1023 posizioni, quella che corrisponde a questo indirizzo, vado alla posizione e scrivo i bit alti. Accanto ai bit alti andrò a memorizzare il valore della parola. Se mi serve una determinata parola il computer prende l'indirizzo, trascura gli ultimi due bit, mette da parte i bit alti e prende i bit bassi. Mi definiscono una posizione in caché, vado alla posizione e vedo se c'è corrispondenza tra i bit alti e quelli in caché. Se c'è corrispondenza li utilizzo, se non c'è prendo il valore in RAM (operazione costosa).

La rappresentazione numeri nel calcolatore

Dobbiamo rappresentare i numeri come una sequenza di zeri e di uno, quindi dobbiamo usare una rappresentazione in base due. Quindi se ho un determinato numero in base 10 posso rappresentarlo come polinomio:

  • (N)10 = am x 10m + am-1 x 10m-1 + ... + a1x 10 + a0
  • (M)2 = bn x 2n + bn-1 x 2n-1 + ... + b0

dove i sono le cifre comprese tra 0 e 1. Ad ogni numero in base 10 corrisponde un numero in base 2. Mi è sufficiente dividere entrambe le rappresentazioni per 2, semplicemente abbatto di un'unità la potenza. Se in base dieci da luogo ad un numero intero, sicuramente in base due dovrà dare un numero frazionario (in quanto b0 compreso tra 0 e 1). Se da luogo ad un numero intero b0 non può che essere 0, se da luogo ad numero frazionario allora b0 non può che essere 1. Adesso abbiamo determinato b0, andando avanti dividendo per due possiamo determinare allo stesso modo b1, ecc fino ad avere la rappresentazione del numero in base 2.

Esempio di conversione in base 2

(357)10 = (178)10 + 1/2 quindi b0 è 1

(178)10 = (89)10 + 0 quindi b1 è 0

Vado avanti così fino a determinare 357 in base 2 che è (101100101)2. Se da questo voglio tornare in base 10 mi basta usare la definizione.

1 x 28 + 0 x 27 + 1 x 26 + 1 x 25 + 0 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20

Rappresentazione dei numeri reali

Purtroppo però non tutti i numeri sono interi. Ora ipotizziamo di voler rappresentare un numero reale.

(R)10 = a1 x 10-1 + a2 x 10-2 + ... + ar x 10-r

R è più piccolo di 1 = 0,a1a2a3..... Se prima per riuscire a ricavarmi questa quantità dovevo man mano dividere per due, ora a mia volta moltiplico per due. Osservo che a questo punto mi trovo ad avere b-1 x 20 che può essere 0 o 1 a seconda che io mi trovi ad avere una parte intera o no.

Esempio di rappresentazione in base 2

(0.25)10 moltiplico per 2= (0.5)10 +0 moltiplico per 2= (0.0)10 +1

Quindi la rappresentazione in base 2 di 0.25 è (0.01)2. Occorre però fare attenzione perché mentre la rappresentazione dei numeri interi è sempre possibile, la rappresentazione dei numeri frazionari è a volte difficoltosa. Se provassimo a convertire per esempio (0.1)10 potremmo andare avanti all'infinito con una sequenza periodica. Questo significa che all'interno del nostro calcolatore dovremo approssimare i numeri, il che significa che dovremo tenere sempre conto di un errore. Questa faccenda degli errori di rappresentazione dei numeri ha provocato dei problemi in passato.

Standard di rappresentazione dei numeri

Scegliere quanti bit dedicare alla rappresentazione del numero è arbitrario, l'arbitrarietà però crea dei problemi perché lo stesso programma lanciato su due calcolatori diversi crea risultati diversi. Perciò si è deciso di seguire uno standard che è l'IEEE 854. Questa sigla sta per Institute of Electrical and Electronic Engineers. Vengono definiti due modi di rappresentare.

Anteprima
Vedrai una selezione di 10 pagine su 86
Informatica - Appunti Pag. 1 Informatica - Appunti Pag. 2
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 6
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 11
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 16
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 21
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 26
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 31
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 36
Anteprima di 10 pagg. su 86.
Scarica il documento per vederlo tutto.
Informatica - Appunti Pag. 41
1 su 86
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 AdeleBASTI di informazioni apprese con la frequenza delle lezioni di Informatica 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 Padova o del prof Janna Carlo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community