Un calcolatore digitale è una macchina in grado di svolgere dei compiti assegnati eseguendo delle istruzioni.

Un programma è una sequenza di istruzioni che serve per portare a termine un task.

L’insieme di queste istruzioni primitive , tra quali :

  • sommare due numeri
  • controllare se un numero
  • copiare una porzione di dati da una parte all’altra della memoria
  • … formano il linguaggio macchina.

Nel corso del tempo, per gestire meglio la complessità che si formava , si è voluto strutturare i computer come una serie di livelli di astrazione, in modo che i computer possano essere progettati in modo più sistematico e organizzato. APPROCCIO STRUTTURALE

Approccio strutturale o Astrazione

Il problema : "gli umani voglio fare X ma i computer possono fare soltanto Y"

Ci sono due modi per risolvere il problema di far eseguire un programma scritto in un linguaggio facile per noi (L1) da un computer che capisce solo il linguaggio macchina (L0).

  1. TRADUZIONE (compilatore) : (fase iniziale) possiamo sostituire ogni istruzione - del programma scritto in L1 - con una equivalente sequenza di istruzioni in L0. Questo nuovo programma sarà costituito da sole istruzioni L0 e può essere eseguito dal computer.

  2. INTERPRETAZIONE : invece di creare un nuovo programma per L0 , possiamo scrivere un programma in L0 (interprete) che prenda come input i programmi scritti in L1 , e che li esegue esaminando un’istruzione alla volta e “traducendola al volo” in una sequenza di istruzioni L0

Possiamo quindi definire una serie di linguaggi, ciascuno dei quali è più pratico da utilizzare rispetto al precedente , continuando cosi finché non otteniamo uno abbastanza adeguato. Inoltre ciascun linguaggio utilizza quello precedente come base.

Quindi abbiamo una situazione del genere :

(“Un livello non può “skippare” subito ad un’altro linguaggio”)

Se si scrivono programmi utilizzando una macchina di alto livello non ci si deve preoccupare degli interpreti o dei traduttori sottostanti (“Il motore di una macchina a noi non ci interessa mentre guidiamo, la parte alta non conosce la parte bassa”).

Attuali macchine multi-livello

Ad oggi la maggior parte dei computer ha due o più livelli.

Come possiamo vedere il LIVELLO 0 rappresenta il vero e proprio HARDWARE del computer. (in verità esiste un livello -1 dedicato ai dispositivi )

0 - Livello logico digitale

Sono le ==PORTE== (GATE) :

  • costruite utilizzando componenti analogici (transistor)
  • possono essere modellate come dispositivi digitali
  • prendono uno o più INPUT e calcolano un OUTPUT - (in 0 e 1) - con una funzione come AND o OR.
  • è possibile combinare più porte per formare una memoria a 1 bit (memorizza valori 0 e 1). Con Gruppi di memorie di 1 bit (16 bit , 32 bit o 64 bit ) si possono formare i REGISTRI
1 - Livello di micro-architettura

Qui risiede una memoria locale formata da gruppi di registri (8-32 bit) e un circuito chiamato ALU (Arithmetic Logic Unit) , capace di eseguire semplici operazioni aritmetiche. GDB Memoria-principale Processori

I registri sono connessi alla ALU formando un percorso dati (data path) , dove avviene una operazione di selezione di uno o due registri , permettere alla ALU di operare su di essi (es. sommandoli) e memorizzare il risultato in uno dei registri.

Queste operazioni vengono gestite direttamente dall’hardware.

2 - Livello di architettura dell’insieme di istruzioni - ISA

Costituito dal livello ISA (Instruction Set Architecture Level) ovvero l’insieme delle istruzioni che sono eseguite in modo interpretato dai circuiti elettronici (direttamente dalla CPU).

3 - Livello macchina del OS

Livello ibrido , siccome ci sono due modi di eseguire le istruzioni:

  • Esecuzione diretta dall’hardware, dove ci sono istruzioni identiche al livello ISA , queste vengono eseguite direttamente dall’hardware.
  • Esecuzione tramite OS, dove non ci sono istruzioni del livello ISA (e non posso essere eseguite quindi direttamente dall’hardware), vengono eseguite allora da un interprete che lavora sul livello ISA ovvero il SISTEMA OPERATIVO (OS) Inoltre in questo livello vengono aggiunte nuove funzionalità come l’esecuzione concorrente dei programmi.

Tra i livelli 3 e 4 vi è una spaccatura fondamentale. I livelli inferiori (fino ad ora fatti) non sono progettati per essere utilizzati dal programmatore medio (che si occupa di problemi applicativi) ma concepiti per eseguire interpreti e traduttori necessari per il supporto dei livelli più alti , scritti dai programmatori di sistema. Infatti i linguaggi dei livelli inferiori 1,2,3 sono numerici (adatte alle macchine).

4 - Livello del linguaggio assemblativo

Livello del linguaggio assemblativo (assembly) , ovvero una forma simbolica di uno dei linguaggio sottostanti. È un livello che fornisce ai programmatori un modo per scrivere programmi per il livelli 1,2,3 , in modo ovviamente più facile.

Per poter eseguire i programmi scritti nel linguaggio assemblativo è necessario tradurli - grazie all’ASSEMBLATORE - in uno dei linguaggi 1 , 2 o 3 e poi interpretarli dall’appropriata macchina virtuale.

5 - Livello del linguaggio orientato al tipo di problema

Consiste generalmente di linguaggi ad alto livello , definiti per essere utilizzati dai programmatori di applicazioni (C, C++, Java, Python …) , che sono generalmente tradotti al livello 3 o 4 da un traduttore detto compilatore (C,C++) , ma in alcuni anche interpretati ( Python ).

I programmi in Java sono tradotti inizialmente in un linguaggio tipo ISA chiamato JAVA BYTE CODE che poi viene interpretato per una macchina virtuale costruita apposta.


Quindi i computer sono progettati come una serie di livelli, ciascuno costruito sopra quello che lo precede e ciascun livello presenta operazioni diverse. L'insieme di queste operazioni, dei dati e delle funzionalità che ogni livello possiede è chiamato ARCHITETTURA.

L'architettura di un livello tratta gli aspetti visibili ai programmatori di quel livello (ex. memoria disponibile non come è realizzata la memoria).

Lo studio di come sono progettati le parti di un computer visibili ai programmatori è chiamato ARCHITETTURA DEGLI ELABORATORI


Evoluzione delle macchine multi-livello

I circuiti insieme ai dispositivi di I/O formano l' HARDWARE , ovvero gli oggetti "toccabili" piuttosto che idee astratte, algoritmi o istruzioni.

Il SOFTWARE consiste di algoritmi , ovvero i programmi (l'insieme delle istruzioni che formano il programma).

Nel corso del tempo la differenza tra i due si è sfocata :

hardware e software sono logicamente equivalenti

"L'hardware non è che software pietrificato."

by K.P. Lentz

Ma è vero anche il contrario , ogni istruzione eseguita dall’hardware può essere simulata via software.

Invenzione della microprogrammazione e sistema operativo

I primi “computer digitali” risalenti agli anni 40, avevano solo due livelli :

  • livello ISA (dove erano realizzati i programmi)
  • livello logico digitale (che eseguiva i programmi)

Nel 1951 Maurice Wilkes inventò il microprogramma per semplificare l’hardware e far eseguire i programmi a livello ISA da questo interprete, questa semplificazione permetteva l’uso di meno valvole.

La microprogrammazione nel corso degli anni venne eliminata (anni 60, 70), siccome alcuni ricercatori capirono che si poteva ridurre l’insieme delle istruzioni e facendo in modo che quelle rimanenti venissero eseguite direttamente (ovvero con un controllo hardware del percorso dati).

Questi primi computer digitali erano “fai da te”, ovvero che il programmatore doveva occuparsi di far funzionare la macchina personalmente. Nel corso degli anni però si è cercato di ridurre la quantità di tempo sprecato del programmatore (errori e cose varie), automatizzando il suo lavoro. Un programma chiamato SISTEMA OPERATIVO era tenuto sempre nel computer, che prendeva in input le schede di controllo (che leggeva) e il programma da eseguire.

Negli anni successivi, i OS divennero sempre più sofisticati, e al livello ISA vennero aggiunte nuove istruzioni e servizi, finché non iniziò a sembrare un nuovo livello, dove alcune istruzioni erano simili a quelle dell’ ISA ma altre erano diverse come le chiamate di sistema.

Pietre miliari nell’architettura dei computer

Utilizzo di valvole termoioniche (1° gen)

John Von Neumann si rese conto che anche i programmi , potevano essere rappresentati in forma di numeri all’interno della memoria del computer e che l’aritmetica decimale seriale utilizzata nell’elaboratore ENIAC, poteva essere sostituita da una aritmetica binaria parallela.

La macchina di VON NEUMANN era composta da cinque componenti:

  1. memoria
    • costituita da 4096 locazioni, ciascuna con 40 bit, ciascuna parola poteva contenere due istruzioni da 20 bit oppure un numero da 40 bit
    • le istruzioni erano composte da 8 bit (tipo di istruzione) e le restanti specificavano una delle 4096 parole di memoria
  2. unità aritmetico-logica (ALU)
    • all’interno vi è un accumulatore (una specie di registro a 40 bit)
  3. unità di controllo (CU)
  4. dispositivi Input
  5. dispositivi Output

L’insieme di ALU e CU erano il “cervello” del computer, oggi combinate in solo circuito chiamato CPU (Central Processing Unit) :

L’istruzione tipica era di sommare una parola di memoria all’accumulatore oppure ne copiava il contenuto in memoria.

Innovazione con transistor (2° gen)

Con l’invenzione dei transistor il mondo dei computer si rivoluzionò che l’uso delle valvole divenne obsoleto. Il primo computer a transistor fu costruito nel MIT, il TX-0 (poi il TX-2).

Pochi anni dopo la DEC introdusse il modello PDP-8 (12 bit), la sua innovazione fu l’utilizzo di unico bus (omnibus).

{^bus}

Un BUS è un insieme di cavi paralleli utilizzati per connettere i diversi componenti di un computer.

Invenzione circuiti integrati (3° gen)

Con l’invenzione dei circuiti integrati su silicio (Jack Kilby e Robert Noyce) , si permise di realizzare su unico chip decine di transistor che vide cosi la realizzazione di computer più piccoli, più veloci, ed economici.

Integrazione a larghissima scala (4° gen)

Con il passare dei tempi , si iniziò a produrre computer portabili. Nel disperato tentativo di continuare a costruire processori più veloci , alcune società di computer (IBM,DEC,Apple,…) iniziarono a virare verso architetture parallele. Nel 2001 IBM presentò l’architettura dual-core POWER4, la prima CPU che aveva due processori sullo stesso chip. Le prestazioni di questi multiprocessori portarono a un piccolo problema per i programmatori, siccome dovevano esplicitamente parallelizzare i programmi (compito difficile che porta a errori).

Computer a basso consumo e invisibili (5° gen)

I computer si rimpicciolirono, e le società iniziarono a pensare che un computer poteva essere costruito con dimensioni molto piccole, questo portò all’introduzione dei PDA (Personal Digital Assistant), portando alla realizzazione degli attuali smartphone creato dalla IBM negli anni 90 (Simon con touchscreen, telefono, giochi e email).

I computer nel corso della storia si stanno ora mai integrando in qualsiasi oggetto (elettrodomestici...), in poche parole essi saranno invisibili e faranno parte dei comuni gesti della vita di ogni giorno. Questo aspetto chiamato "pervasive computing" (ideato dallo scomparso Weiser), cambierà fortemente il mondo ... come lo fece la rivoluzione industriale.

Tipologie di computer

Legge di Moore

Secondo Gordon Moore (ex cofondatore di Intel), ogni nuova generazione di chip ha una quantità di memoria 4 volte maggiore a quella precedente e che quindi il numero di transistor in un chip aumentava a una velocità costante e questo sarebbe continuato per decenni.

Con il termine di LEGGE DI MOORE si intende che il numero di transistor raddoppia ogni 18 mesi, ovvero che il numero di transistor che può essere inserito su un chip aumenterebbe del 60% ogni anno.

Infatti lo suggerisce il grafico :

(4K 4000 bit)

Anche se la Legge di Moore continuerà a essere valida per alcuni altri anni, cominciano a vedersi all’orizzonte dei problemi legati alla dissipazione del calore, siccome l’uso di tanti transistor di piccole dimensione permette di raggiungere frequenze piu alte , ma allo stesso tempo richiede una tensione piu elevata.

Cluster

Siccome il rapporto prezzo/prestazioni dei server era migliorato, si è cominciato a connettere fra di loro un gran numero di server , che eseguono un software speciale che permette loro di lavorare su uno stesso problema (richieste web, es Google, circa 1 milione di server nei suoi data center).

Mainframe

Equipaggiato con numerosi dischi. Utilizzati per l’esecuzione di software vecchio ma hanno trovato il posto sopratutto nella gestione di enormi numero di transazioni di commercio elettronico. Apparato hardware con livelli di security altissimo, partizionabili (sezionare hardware e potenza di calcolo).

Esempi di famiglie di computer

Architettura x86

La famiglia INTEL :

Architettura ARM

Nei primi anni 80 , la società Acorn Computer (successo con il pc a 8 bit BCC Micro) iniziò a lavorare su una seconda macchina. Ispirati dal progetto Berkeley RISC (progetto con processore molto veloce) , decisero di costruire una propria CPU, ovvero la Acorn RISC Machine (ARM o Advanced RISC Machine). Dopo un po, Apple contattò Acorn per costruire un processore ARM per l’Apple Newton (computer palmare), il team ARM lasciò Acorn per creare la nuova società Advanced RISC Machines (ARM).

Il progetto ARM più degno di attenzione è l’ARM7 (1994) è ancora oggi largamente utilizzato , utilizzava cache separate per istruzioni e dati e incorporava l’insieme di istruzioni chiamato Thumb (versione più ristretta dell’insieme di istruzioni ARM a 32 bit) che consente ai programmatori di codificare molte delle operazioni comuni in piccole istruzioni da 16 bit (riducendo la quantità di memoria utilizzata dai programmi).

La società ARM non produce nessuno dei suoi microprocessori ma crea progetti, librerie e strumenti di sviluppo per ARM (per esempio la CPU utilizzata nel tablet Samsung Galaxy Tab è un processore basato su ARM).

Architettura AVR

Utilizzata nella piattaforma integrata open source ARDUINO (megaAVR).

Unità metriche

EsponenteValore esplicitoPrefisso
10⁻³0,001milli
10⁻⁶0,000001micro
10⁻⁹0,000000001nano
10⁻¹²0,000000000001pico
10⁻¹⁵0,000000000000001femto
10⁻¹⁸0,000000000000000001atto
10⁻²¹0,000000000000000000001zepto
10⁻²⁴0,000000000000000000000001yocto
EsponenteValore esplicitoPrefisso
10³1.000Kilo
10⁶1.000.000Mega
10⁹1.000.000.000Giga
10¹²1.000.000.000.000Tera
10¹⁵1.000.000.000.000.000Peta
10¹⁸1.000.000.000.000.000.000Exa
10²¹1.000.000.000.000.000.000.000Zetta
10²⁴1.000.000.000.000.000.000.000.000Yotta

Per esempio una linea di comunicazione a 1 Mbps trasmette 10⁶ bit/s. Dato che milli che micro iniziano con la stessa lettera , "" milli e "" micro

Dato che le dimensioni delle memorie sono sempre ==potenze di == , quindi K assume il significato di byte invece che . Quindi una memoria da 1 KB contiene 1024 byte.

Quindi una memoria da MB contiene byte.

Ma le linee di comunicazione sono su ==potenza di == , quindi una linea di comunicazione a Kbps può trasmettere bit/s.


Si incoraggia il lettore a studiare questi computer , ed eventualmente altri , con un occhio critico ; lo si spinge a cercare di capire il motivo per cui le cose sono in un determinato modo , oltre che a chiedersi come sarebbero potute essere diversamente , invece di accettarle passivamente.