ARCHITETTURA DEL COMPUTER Il computer va considerato come

ARCHITETTURA DEL COMPUTER
Il computer va considerato come un insieme di unità funzionali.
I computer moderni si basano sull'architettura di Von Neumann che ha le seguenti caratteristiche:
- 4 componenti (memoria, ALU, CU, I/O) unite da un BUS;
- un programma memorizzato (istruzioni sono registrate in memoria);
- l’esecuzione sequenziale delle istruzioni.
Memoria e cache
La memoria registra dati e istruzioni da eseguire; esistono due tipi fondamentali di memoria:
(1) ROM (Read-Only Memory)
ad accesso casuale ma non sovrascrivibile (informazioni di sistema precaricate in produzione)
(2) RAM (Random Access Memory)
- suddivisa in celle ciascuna con un indirizzo
- accessi sempre destinati a specifici indirizzi
- estratta o registrata sempre una cella completa
- cella = 8 bit = 1 byte di memoria
Esiste un rapporto tra bit ed indirizzi memoria: una cella da 1 byte consente i valori 0-255; per valori
interi più alti -> 16 o 32 bit; per numeri reali -> 32 o 64 bit
Bit
Memoria
10
1KB
16
64KB
20
1MB
32
4GB
40
1TB
Da non confondere l'indirizzo della cella con il suo contenuto!
Esistono due principali operazioni sulla memoria:
- Read, che legge e copia il valore contenuto nella cella di indirizzo indicato;
- Write, che sovrascrive il valore specificato nella cella di indirizzo indicato.
Il tempo medio di accesso alla memoria è di 5-20 nsec.
I registri di memoria servono a implementare le operazioni di lettura e scrittura; poichè ci sono due
operandi (indirizzo e valore) ci sono anche i due corrispondenti registri: MAR (Memory Address
Register) e MDR (Memory Data Register). Il tutto è coordinato da un controllore di
lettura/scrittura.
La memoria cache (termine da quasi tutti pronunciato come se fosse una parola inglese e che invece
deriva dal francese cacher, nascondere) non faceva parte dell’originaria architettura di Von Neumann,
ma è stato necessario introdurla perchè nel tempo si è verificato uno scollamento tra incremento della
velocità tra processori e memorie RAM. Infatti, dal 1980 al 2000 la velocità dei processori è aumentata
di un fattore 3000 e quella delle memorie solo di un fattore 100 (effetto collo di bottiglia). Per
compensare sono necessarie memorie ad alte prestazioni (5-10x vs. RAM), troppo costose tuttavia per
sostituire completamente la RAM. Il problema è stato risolto adottando memorie cache di dimensioni
inferiori: ciò non rappresenta un problema in quanto è preposta a memorizzare solo gli elementi più
recenti (sulla base della logica che probabilmente serviranno ancora nel breve periodo).
I/O e Memoria di massa
Le unità di Input (ingresso)/Output (uscita) sono i dispositivi con cui il computer comunica; è inoltre
necessaria una memoria non volatile (dispositivi di memoria di massa) per conservare i dati. Sia i
sistemi di I/O che le memorie di massa sono estremamente variabili (prodotti da centinaia di aziende).
I dispositivi fondamentali di I/O sono distinti sulla base della rappresentazione delle informazioni:
leggibili dall’uomo (tastiera, monitor, stampante) o leggibili dal computer (memorie di massa). Le
più comuni memorie di massa (hard disk, dischetti, CD/DVD, pen drives) sono dispositivi DASD
(Direct Access Storage Device), divisi in celle con indirizzi come la RAM, ampiamente utilizzati in
quanto abbastanza veloci; invece i dispositivi SASD (Sequential Access Storage Device) come le unità
a nastro sono utilizzate per i processi di backup.
ALU (Arithmetic/Logic Unit) e CU (Control Unit)
L’unità aritmetico/logica (ALU) è il sottoinsieme che esegue le operazioni matematiche e logiche
(somme, sottrazioni, confronti) e che, insieme alla Control Unit costituisce il processore. Le
componenti del data path della ALU sono:
- registro (celle memoria ad alta velocità)
- bus (collega alla circuiteria)
- circuiteria ALU (esegue le operazioni)
L’unità di controllo (CU), preposta all’esecuzione delle istruzioni ricevute (programma memorizzato),
(1) preleva (fetch) dalla memoria l’istruzione, (2) la decodifica (decode) per determinare l’azione e (3)
la esegue (execute) inviando i comandi (ad ALU, I/O e memorie).
Le istruzioni sono rappresentate in linguaggio macchina.
Linguaggio macchina
Le istruzioni in questo linguaggio sono espresse in codice binario e strutturate per campi:
- campo op code (codice operazione): intero che univocamente contrassegna un’istruzione specifica
- campi indirizzo (da 0 a 3 in genere): contengono gli indirizzi di memoria dei valori sui quali sarà
eseguita l’operazione, ovvero degli operandi.
Il set di istruzioni è l’insieme delle operazioni che possono essere eseguite da un processore
(specifiche dei produttori -> incompatibilità HW-SW)
Architetture RISC e CISC
Nei computer RISC (Reduced Instructions Set Computers) la circuiteria hardware è semplificata e
richiede, per operazioni più complesse, istruzioni multiple, mentre in quelli CISC (Complex
Instructions Set Computers) la circuiteria hardware è più completa (e costosa) ma svolge
direttamente operazioni più complesse. La maggior parte dei processori ha struttura mista.
Architetture non Von Neumann
il modello sequenziale di Von Neumann ha dei limiti che corrispondono ai limiti fisici dei processori.
Per velocizzare la trasmissione dei dati si può ricorrere alla riduzione delle distanze fisiche
(miniaturizzazione), ma almeno per il momento, risulta sempre più difficile miniaturizzare la circuiteria
oltre i livelli già raggiunti, senza un drastico cambiamento delle tecnologie. Tuttavia, quando non è
possibile raddoppiare la velocità, si possono dividere i compiti -> calcolo parallelo. Le architetture
parallele rientrano in alcune grandi categorie sulla base dell'organizzazione ALU-CU:
- SIMD (Single Instruction Multiple Data Stream): singola CU e multiple ALU (supercomputer anni
‘80)
- MIMD (Multiple Instruction Multiple Data Stream): processori multipli (cluster computing).
I processori di un cluster MIMD possono anche essere dislocati (grid computing).
Macchina virtuale, software di sistema e sistema operativo
Per utilizzare un computer di Von Neumann è necessaria l’interfaccia tra utente e hardware:
- presenta le informazioni in modo comprensibile (ovvero senza richiedere competenze approfondite);
- consente all’utente di accedere alle risorse;
- evita danni accidentali all’HW, a programmi e dati.
Il software di sistema è strutturato come macchina/ambiente virtuale che, interposta tra utente e
hardware, fa anche da “interprete”. Esso comprende in realtà un insieme di programmi per la gestione
di vari aspetti dell’attività del computer. Il programma che controlla le attività complessive del
computer è il sistema operativo (OS) che comunica con gli utenti attivando i pacchetti sw: (1)
interfaccia (grafica) utente, (2) traduttori, gestori di (3) memoria o (4) informazioni, (5) sistemi di
I/O, (6) scheduler e (7) programmi di utilità.
Componenti dell'OS
(1) GUI (Graphics User Interface): fornisce all’utente un’interfaccia semplificata e intuitiva e nel
tempo ha sostituito (per gran parte degli utenti) l’interfaccia a riga di comando. In pratica, la GUI
associa i comandi ad azioni bidimensionalmente allocate spostando il cursore e “cliccando” con mouse
o trackpad (o con dita o pennette su schermi touch-sensitive).
(2) traduttori: sono programmi divisi in assemblatori, compilatori e interpreti che consentono di
programmare in linguaggi di alto livello (user oriented) invece che in linguaggio macchina; spesso
includono componenti accessori (editor di testi e debugger).
(3) gestori di memoria: allocano spazio in memoria per i programmi in esecuzione e per i dati e lo
recuperano quando non è più utilizzato. La gestione può essere più dinamica o con spazi prefissati.
(4) gestori di informazioni: gestiscono l’organizzazione, la memorizzazione ed il recupero delle
informazioni sulle memorie di massa, strutturandole in directory, cartelle e file.
(5) sistemi di I/O: pacchetti di SW preposti all’utilizzo dei vari dispositivi di I/O del computer
(6) scheduler: mantiene l’elenco dei programmi pronti ad essere eseguiti dal processore e ne controlla
l’ordine di esecuzione (consentendo il multitasking).
(7) programmi di utilità, quali ad esempio editor di testo, guida in linea, pannelli di controllo e
programmi di disegno base.
Linguaggi di programmazione
Il linguaggio macchina è un linguaggio di prima generazione: diretto e veloce per la macchina, ma
arduo per il pensiero (testuale e simbolico) degli umani. Nei linguaggi di seconda generazione o
assemblativi la corrispondenza biunivoca tra comando simbolico e comando in linguaggio macchina li
fa definire linguaggi di programmazione di basso livello. Invece, nei linguaggi di programmazione
di alto livello (es. C++, Java) a ciascun comando simbolico possono corrispondere più comandi in
linguaggio macchina.
Un programma scritto in linguaggio assemblativo è chiamato programma sorgente (che non è
direttamente compreso dal computer). Anche i programmi scritti in linguaggi di alto livello non sono
direttamente compresi dal computer. La traduzione di un programma nel suo equivalente in linguaggio
macchina (programma oggetto) è svolta da:
- assemblatori per i linguaggi di basso livello
- compilatori per i linguaggi di alto livello
Linguaggi in Bioinformatica
Sostanzialmente per la scrittura di un software bioinformatico può essere utilizzato qualsiasi linguaggio
e spesso ciò dipende dalle capacità di programmazione. In tempi recenti sono stati molto utilizzati Perl
e Python, entrambi linguaggi di alto livello. Perl si è evoluto nel tempo grazie alla disponibilità di
moduli man mano creati dall’ampia comunità di sviluppatori; questo linguaggio interpretato (ovvero
tradotto al momento dell’esecuzione) è particolarmente adatto ad interfacciarsi con altri linguaggi.
Python è un linguaggio object oriented, cioè basato su oggetti che interagiscono (come ad es. C++ e
Java); rispetto a Perl presenta una sintassi più essenziale ed uniforme (per renderne il codice più
leggibile). Sebbene segua il paradigma (filosofia di programmazione) object oriented, Python è un
linguaggio multi-paradigma. Come Perl, Python si sta diffondendo in Bioinformatica anche grazie
alla disponibilità di ampie librerie dagli sviluppatori e per la facilità di scrivere software modulari.
Trasmissione dei dati
Inizialmente la trasmissione è avvenuta attraverso reti telefoniche commutate (digitale - analogica digitale). La necessità di commutazione deriva dal fatto che il segnale analogico ha valori continui
(spesso modulati per variazione del voltaggio), mentre il segnale digitale ha i valori discontinui: 0, 1.
Per trasmettere informazioni digitali, è quindi necessario un convertitore o modem, il cui nome deriva
dalle due funzioni (MO, DEM) che esso media: MOdula il segnale analogico (onda portante), in
ampiezza e frequenza, in modo che assuma i due stati distinti (0 e 1) del segnale digitale in ingresso e
DEModula l’onda portante “digitalizzata” per interpretarne il codice in termini digitali. Negli anni ‘80
si trasmettevano 1200-9600 bit per secondo (bps), passati negli anni ‘90 ai 56000 bps dei modem 56
Kbps, integrati per anni nei PC desktop.
Negli anni 2000 la tecnologia diviene in grado di garantire trasmissioni in banda larga (> 256 Kbps)
su linee DSL (Digital Subscriber Line) o su fibra ottica, che sfrutta la velocità di trasmissione della
luce. La linea DSL si basa ancora sui cavi telefonici, ma consente la trasmissione digitale dei dati in
modo che il traffico analogico (voce) e quello digitale (dati) non si disturbano a vicenda. Considerato
che l'utente medio più frequentemente scarica (download) dati dalla rete di quanto non ne carichi
(upload), le linee DSL per utenze comuni sono ADSL (Asymmetric DSL) che forniscono più banda in
download (2-8 Mbps) e meno in upload (0.25-1 Mbps). La trasmissione veloce può alternativamente
avvalersi delle fibre ottiche e dei cavi della TV digitale (DTV). Le fibre ottiche sono cavi in materiale
vetroso nei quali un fascio laser si propaga a diverse lunghezze d’onda e con una velocità circa 40
Gbps. Le fibre multicanale giungono a velocità di Tbps e sono usate per le dorsali geografiche ed in
ambiti metropolitani. La tecnologia Ethernet (messa a punto nei laboratori Xerox, negli anni ‘70) è la
tecnologia a banda larga più diffusa in ambito professionale e commerciale; supporta infatti le
connessioni interne di case, edifici e complessi. Ethernet aveva una velocità iniziale 10 Mbps (cavi
coassiali); i protocolli Fast Ethernet l'hanno portata a 100 Mbps (coassiale, ottico, rame). E' del 1998
Gigabit Ethernet, mentre cinque anni dopo la velocità è decuplicata (2003, Ten-Gigabit Ethernet).
Le comunicazioni wireless sfruttano segnali radio, microonde ed infrarossi. Esistono reti wireless
locali di due tipi molto comuni: Wi-Fi e Bluetooth. Le reti Wi-Fi (Wireless Fidelity) diffondono il
segnale abbastanza bene fino a 50-100 metri dagli hot spot (access point alla rete cablata). La
tecnologia Bluetooth invece è destinata a comunicazioni in un raggio meno ampio (fino a 10-15 metri),
soprattutto con periferiche, adottando quindi un più basso voltaggio per aumentare l'autonomia.
Affiancano le reti locali le reti wireless wide-area, tipicamente quelle per gli smartphone, con ripetitori
che coprono nel raggio di vari Km.
Reti LAN (Local Area Network)
Le reti locali LAN sono preposte alla connessione di periferiche e computer vicini in aree delimitate
(uffici, campus, aziende...) e possono assumere tre topologie fondamentali:
La rete LAN Ethernet usa la topologia a bus in cui un nodo invia il messaggio (con indirizzo di
destinazione) e tutti i nodi ricevono ed esaminano l’indirizzo: solo il destinatario lo accetta, mentre gli
altri nodi lo ignorano. Esistono reti LAN Ethernet a cavo condiviso in cui il cavo viene steso
nell’edificio/complesso ed i vari PC client si inseriscono nella LAN tramite tranceiver; nelle reti LAN
Ethernet a cavi multipli invece, più cavi supportano una serie di sottoreti LAN. Queste possono
essere collegate da un ripetitore che si limita a mettere in condivisione il traffico delle varie LAN, o da
un più evoluto bridge/switch che smista direttamente il traffico ai nodi. Nella rete LAN Ethernet con
Hub, quest'ultimo è connesso alla rete e cavi interni vanno dalle porte dell’hub ai nodi.
Reti WAN (Wide Area Network)
Le reti WAN mediano le comunicazioni su aree geografiche vaste utilizzando e collegando reti
pubbliche e private (linee dedicate punto a punto). Le WAN adottano la tecnologia store-and-forward
di commutazione a pacchetto dei dati. Un pacchetto di dati è in pratica l'unità di trasmissione; i
messaggi vengono “spezzati” in N pacchetti e inviati come tanti autocarri portacontainer lungo
un'autostrada. Quando il nodo ha ricevuti tutti i pacchetti, li riassembla in un unico messaggio. Questa
strategia di parcellizzazione e distribuzione è stata messa a punto da analisti militari per superare il
problema del blocco dei dati in caso di sabotaggio o distruzione di un nodo. Nella figura che segue si
può infatti notare che, in caso di nodi bloccati o non più presenti (in rosso), i dati possono raggiungere
comunque il nodo di destinazione seguendo percorsi alternativi ("tutte le strade portano a Roma"):
Struttura complessiva di internet
Internet come la conosciamo è ormai una mix estremamente ricca e complessa di differenti sottoreti
LAN e WAN connesse da router. Un bridge connette reti dello stesso tipo, mentre un router connette
anche reti di tipo diverso (fungendo in qualche modo da “interprete”). La connessione alla rete globale
avviene tramite i servizi di un ISP (Internet Service Provider) che può essere locale, regionale o
nazionale. Gli ISP regionali e nazionali si collegano a loro volta agli ISP internazionali nella rete di
livello 1 o dorsale Internet. Poichè i computer in rete adottano differenti sistemi operativi (Windows,
Mac OS, Linux, Unix....), è necessario poter comunicare “malgrado le differenze", adottando dei
protocolli di rete condivisi ai vari livelli di comunicazione.
Protocolli di rete
I protocolli di rete rappresentano un insieme di regole e convenzioni basate su accordi internazionali. Il
gestore non profit di tale sistema è l’Internet Society (www.isoc.org), un'associazione che include più
di 100 fondazioni, agenzie governative, università ed aziende. Esiste una gerarchia di protocolli
(stack, pila) su 5 livelli, definita anche TCP/IP (dal nome dei due protocolli più importanti):
I protocolli di Livello 1 (livello fisico) regolano lo scambio di cifre binarie sul mezzo di trasporto
fisico (doppino telefonico, fibra ottica, wireless...). E' importante per ciascun bit specificare:
- la sua presenza sulla linea;
- il tempo di tale presenza;
- rappresentazione digitale o analogica;
- livelli voltaggio per 0 e 1;
- forma del connettore tra PC e linea.
I protocolli di Livello 2 (collegamento dati) si occupano invece di:
- rilevamento e correzione degli errori di trasferimento;
- identificazone di inizio e fine del messaggio.
I protocolli di livello 2 si dividono in
- protocolli 2a (controllo di accesso al mezzo), per l'arbitraggio di messaggi contemporanei su una
linea condivisa. In tale ambito Ethernet ha un approccio basato sulla contesa (no gerarchia, trasmette
chi accede prima);
- protocolli 2b (controllo di collegamento logico) che hanno il compito di correggere errori ed
utilizzano algoritmi di Automatic Repeat reQuest -ARQ).
I livelli 1 e 2 dipendono da collegamenti fisici (dal nodo A al B solo se collegati), i protocolli di
Livello 3 (livello di rete) “guidano” dal mittente all’indirizzo del destinatario finale (tra due nodi
qualsiasi nella rete) e necessitano quindi di uno schema universale di indirizzamento, l'IP (Internet
Protocol), basato su un IP addess numerico ed un host name testuale. Il Domain Name System
(DNS) consente la conversione host name <-> IP address (enorme db su macchine distribuite). Grazie
al DNS, il sender conosce l’IP address del destinatario e lo inserisce nel messaggio; noto l’IP address, i
pacchetti possono saltare fra nodi fino a destinazione (routing), come illustrato in precedenza e
riportato di seguito per comodità:
Se il livello 3 porta fino all’host mediante il suo IP (indirizzo generale), i protocolli di Livello 4
(livello di trasporto) specificano il numero di porta cui i dati sono indirizzati (indirizzo specifico).
Tutte le applicazioni internet (livello 5) hanno numeri di porta noti (esempi: http, porta 80; smtp,
porta 25...). Il Transport Control Protocol (TCP) rappresenta il principale protocollo di trasporto.
I protocolli di Livello 5 (applicazioni) specificano le regole per implementare i servizi all’utente quali
ad esempio posta elettronica (email), chat, world wide web, file transfer....
Le singole pagine web sono identificate con una stringa simbolica definita Uniform Resource Locator
(URL) che ha la sintassi
protocollo://indirizzo_host/pagina
esempi:
hyper text transfer protocol (pagine web)
http://indirizzo_host/pagina
simple mail transfer protocol (invio email)
smtp://indirizzo_host/pagina
Il protocollo http (hyper text transfer protocol) con sintassi
http://indirizzo_host/pagina
identifica un documento ipertestuale che si trova sul computer host; per usare http si deve stabilire una
connessione tra browser web e porta 80, che viene stabilita con protocollo TCP/IP. Il computer
client invia un messaggio di richiesta http ed il server invia un messaggio di risposta (status) e,
quando è disponibile, anche la pagina richiesta.
SSH (Secure SHell) è un protocollo di rete che ha sostituito il vecchio e ormai poco sicuro Telnet
perchè consente connessioni cifrate tra computer host. La sicurezza della trasmissione crittografica
ha reso SSH lo standard per l’amministrazione di server Unix. SSH tuttavia esiste anche per client
Unix, Linux, Mac OS X e Windows. SSH usa la porta 22 di TCP. SSH è divenuto a pagamento, ma
esiste una versione libera (Open SSH).
La email raggiunge qualsiasi parte del mondo in <1’ anche nel caso debba passare per 15-20 nodi e
consente destinatari multipli (problema spam) e comunicazione in tempo differito. Esistono poi varianti
della email quali newsgroup/forum (bacheche elettroniche) che sostanzialmente viaggiano come
email, ma allocano domande e risposte su pagine web o le reindirizzano a tutti. La chat consente
rispetto all'email la comunicazione in tempo reale.
Le prime idee sul WWW (World Wide Web) nacquero negli anni ‘60 (MIT) come progetto di “The
Galactic Network”; in quegli anni e nei successivi furono definiti i protocolli di rete WAN, la divisione
dei dati in pacchetti, il routing e si costituirono ARPANET ed i primi link tra università. Un breve
excursus storico: 1972: email, 1973: TCP/IP; fine anni ‘70, standard internazionali; anni ‘80 Telnet,
FTP; inizio anni ‘90 Internet e WWW (CERN, Ginevra, link, web pages, URL)
© Francesco Filippini, 2016-2018