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