Informatica Appunti della lezione 11
Architettura dei calcolatori
La maggior parte degli strumenti informatici oggi in uso si basano sull architettura di Von Neumann E un modello astratto che include tutti i componenti funzionali (ossia distinti dagli altri per la funzione che svolgono) di un computer
CPU: Central Processing Unit, processore CPU unità controllo ALU RAM: Random Access Memory, Memoria Centrale RAM memoria ele)ronica, vola.le, veloce, costosa HD: Hard Disk, Hard Drive, disco rigido, disco fisso memoria magne.ca, non vola.le, lenta, economica* ROM Read Only Memory bus *adesso ci sono anche i dischi SSD (solid state disk): memoria ele)ronica, non vola.le, più veloce dell HD ma meno della RAM, ancora molto costosa output input periferiche alcune, come il touch- screen sono sia di input sia di output
L architeeura del calcolatore Per descrivere le diverse parf di un calcolatore e le loro connessioni, si fa tueora riferimento all architeeura di Von Neumann, proposta per la prima volta in un rapporto tecnico del 1945 (John von Neumann, Budapest 1903 Wahington D.C. 1957) Su tale architeeura si basa la maggior parte dei calcolatori odierni
ArchiteEura di von Neumann I componenf dell architeeura sono: la CPU (Central Processing Unit), che esegue le istruzioni dei programmi la RAM (Random Access Memory), la memoria principale di Fpo eleeronico dove sono scriee le istruzioni da eseguire e i daf da elaborare mentre il calcolatore è acceso il disco fisso, la memoria secondaria di Fpo magnefco dove sono conservate le istruzioni e i daf anche quando il calcolatore è spento le periferiche, componenf addizionali che permeeono all utente di trasferire informazione verso il calcolatore (input) o di oeenere informazione dal calcolatore (output) il bus, il canale di comunicazione che conneee tu\ i componenf di cui sopra
Il funzionamento della CPU La CPU funziona a ciclo confnuo, dall accensione del calcolatore fino allo spegnimento, eseguendo le seguenf azioni a ripefzione: fetch, prelevamento dell istruzione da eseguire decode, decodifica del codice dell istruzione prelevata execute, esecuzione dell istruzione decodificata
CPU RAM La CPU preleva le istruzioni da eseguire sempre dalla RAM Per questo mofvo, ogni programma in esecuzione deve essere presente nella RAM Le istruzioni (e anche i daf su cui eseguire le istruzioni) sono trasferire dalla RAM verso disposifvi di memoria presenf nella CPU, chiamaf registri L unità di controllo della CPU supervisiona il trasferimento e la decodifica dell istruzione, e ordina alla ALU (unità aritmefco logica) l operazione da eseguire I risultaf sono salvaf sui registri, e da lì trasferif alla RAM
RAM disco La RAM è basata su disposifvi eleeronici, che funzionano con tempi molto rapidi, ma che necessitano di alimentazione eleerica per preservare l informazione in essi contenuta Il disco fisso è invece cosftuito da materiale ferro- magnefco, la cui leeura e scrieura è molto più lenta, ma le informazioni salvate permangono anche a calcolatore spento Per questo mofvo, tu\ i programmi sono conservaf nel disco fisso, e trasferif alla RAM quando il calcolatore è acceso e vengono mandaf in esecuzione TuEe le modifiche ai daf faee tramite un programma in esecuzione, se sono presenf solo nella RAM ma non nel disco fisso sono perse se l alimentazione eleerica viene meno Quando si salva un file (di faeo, un insieme di daf), si ordina il trasferimento dei daf dalla RAM al disco, in modo da conservare l ulfma versione anche dopo lo spegnimento del calcolatore All accensione del calcolatore, il primo programma che viene caricato (cioè trasferito dal disco alla RAM) è il sistema operafvo, che funziona per tueo il tempo in cui il calcolatore è acceso e serve a gesfre tuee le sue risorse
periferiche RAM Per inserire daf all interno del calcolatore, l utente deve usare le periferiche di input Ad esempio, durante l esecuzione di una istruzione cin >> x, il calcolatore aeende un valore inserito tramite tasfera, da inviare in una parfcolare cella di memoria RAM, corrispondente alla variabile x Da lì, il valore sarà mandato alla CPU per essere elaborato (ad es. per eseguire x = x + 5)
RAM periferiche Le periferiche di output ricevono daf provenienf dalla RAM e li inviano verso il mondo esterno al calcolatore (ad es. visualizzandoli su uno schermo o stampandoli su carta) Istruzioni come cout << x prevedono il trasferimento del contenuto di una cella di memoria RAM (corrispondente alla variabile x) verso una specifica periferica (lo schermo)
Sistema OperaFvo Windows Vista, Windows 7, Mac OS X, Linux, Debian, Red Hat, etc etc Il sistema operafvo è un programma che serve a gesfre TUTTE le risorse presenf in un calcolatore Risorse: periferiche, memorie, CPU. Le risorse sono usate dai vari programmi in funzionamento sul calcolatore. Tra quesf il più importante è il sistema operafvo, che gesfsce tali risorse. Il sistema operafvo è il PRIMO* programma ad entrare in funzione. *con la precisazione nella seguente slide
Il problema del bootstrap Il problema di come avviare un calcolatore Fortunatamente, ci sono anche memorie eleeroniche che conservano l informazione. (ad es.: la scheda SD della vostra macchina fotografica digitale) All accensione, la CPU esegue un programma scrieo nella ROM che fa trasferire le istruzioni del sistema operafvo dal disco fisso alla RAM Una volta nella RAM, il sistema operafvo può essere eseguito dalla CPU e il computer si avvia a disposizione dell utente
Memorie Dispositivi in grado di conservare al loro interno informazione per un intervallo di tempo significativo RAM chiavetta USB Hard disk CD/DVD SD card
Tecnologie diverse elettronica ottica magnetismo
Caratteristiche diverse Velocità Non volatilità Tolleranza ai guasti
Caratteristiche diverse Costo (a parità di dimensione)
Hard disk E il dispositivo di memoria con la maggiore capacità: centinaia di GB contro qualche unità di GB degli altri dispositivi E anche il dispositivo più suscettibile ai guasti a causa delle parti meccaniche che lo compongono (testina di lettura/ scrittura su braccio mobile e dischi magnetici rotanti), ed è il più lento I dischi sono divisi in settori concentrici, ciascuno dei quali diviso in blocchi Quando c è la richiesta di una scrittura/lettura di un dato in un blocco, la testina deve essere posizionata sul blocco corretto Tale posizionamento necessita di un tempo con due componenti: seek time (posizionamento sul settore giusto) e latenza (attesa della rotazione del disco perché il blocco giusto raggiunga la testina) A tali tempi bisogna aggiungere il tempo necessario per il trasferimento dei dati dal disco alla RAM (transfer time)
Memorie elettroniche non volatili Le chiavette USB, le SD card, e i più recenti hard disk a stato solido sono basati su tecnologia elettronica, ma, a differenza delle RAM, non sono volatili La non volatilità è data da uno strato di ossido scrivibile e cancellabile (per mezzo di appositi valori di tensione) che si accompagna in questi dispositivi ai circuiti elettronici In origine chiamati memorie flash perché l alta tensione usata per cancellarle era paragonata a un flash (Toshiba, primi anni 80) I primi modelli potevano solo essere cancellati completamente, oggi la cancellazione è selettiva e l utente può scegliere quali file cancellare e quali conservare
Gerarchia di memorie Tutti i dispositivi di memoria che sono presenti nell architettura di un calcolatore sono organizzati in una gerarchia più veloce Registri Cache RAM più grande Hard disk
Gerarchia di memorie Ogni livello comunica solo con i livelli immediatamente adiacenti I registri sono dispositivi di memoria direttamente connessi alla CPU (es.: PC, il Program Counter, contiene l indirizzo in memoria della prossima istruzione da eseguire) La cache è un dispositivo di memoria direttamente connesso coi registri che riporta il contenuto di una parte della RAM Quando i dati viaggiano tra cache, registri, e CPU, non attraversano il bus del calcolatore, perché questi 3 dispositivi sono tutti costruiti su una stessa scheda elettronica (perciò si ottiene velocità molto maggiore)
Uso della gerarchia Quando necessita di un dato da elaborare, la CPU lo cerca nel dispositivo di memoria più vicino Se il dato non viene trovato, lo si cerca nel dispositivo di memoria successivo, con un costo maggiore in termini di tempo Nel peggiore dei casi, il dato va recuperato nell hard disk, il dispositivo più lento di tutti
Gestione della gerarchia La situazione ideale (irrealizzabile) sarebbe che la CPU avesse sempre i dati necessari a disposizione nei registri Ottimizzare l uso della gerarchia vuol dire ridurre al minimo il ricorso ai livelli di memoria inferiori Per perseguire questo scopo ci si basa su due principi derivati dall esperienza
Principio di località spaziale Se la CPU necessita di un dato x, è probabile che necessiterà presto dei dati vicino a x in memoria Questo perché molto spesso i dati sono organizzati in strutture contigue (array, struct, etc ) Seguendo questo principio, quando si cerca un dato x nei livelli inferiori della gerarchia di memorie, non si trasferisce solo x, ma un intero blocco di dati contenente x In questo modo, se la CPU necessita dei dati intorno a x questi sono già disponibili nei livelli alti della gerarchia, con risparmio di tempo
Principio di località temporale Se la CPU necessita di un dato x, è probabile che necessiterà di nuovo di x nel prossimo futuro Questo perché molto spesso i programmi contengono cicli (for, while, etc ) Seguendo questo principio, quando un blocco viene trasferito ai livelli alti (es.: da RAM a cache) e non c è più spazio disponibile (es.: la cache è piena), si sovrascrive il blocco non usato da più tempo, perché è quello che meno probabilmente sarà richiesto dalla CPU in futuro La strategia di sacrificare il blocco meno usato da più tempo si chiama LRU (Least Recently Used)
Codifiche
Il concetto di codifica La codifica è una corrispondenza biunivoca tra entità di qualunque genere e numeri interi Visto che il processore elabora numeri, tutto ciò che può essere descritto mediante tali numeri può essere oggetto di elaborazione da parte del calcolatore: testi immagini suoni
Codifica di testi Bisogna far corrispondere a ogni carattere un particolare numero Esistono molte convenzioni a riguardo, tra cui ad esempio la tabella ASCII (American Standard Code for Information Interchange), oggi inglobata nella più nuova codifica UTF-8 (vedi slide seguente)
UTF-8 Universal Character Set Transformation Format 8bit
Codifica di immagini Nel far corrispondere a ogni immagine un numero, si può procedere in 2 modi diversi Approccio raster : si divide l immagine in elementi di dimensioni molto ridotte, caratterizzati da un unico colore (pixel: picture element), a ogni colore si corrispondere una codifica (ad es. RGB: terna di valori numeri che indicano quanto rosso, quanto verde, quando blu ci sia nel colore codificato). L immagine diventa una sequenza di numeri che descrive i colori di ciascun pixel che la compone Approccio vettoriale : l immagine viene vista come un insieme di figure geometriche colorate. La codifica avviene grazie alle formule matematiche che descrivono le figure, e alla già menzionata codifica del colore.
Un immagine divisa in pixel
Tabella RGB
Grafica vettoriale: dai rudimenti ai risultati finali
Codifica di suoni Sapendo che i suoni sono prodotti da onde che si muovono in un fluido (solitamente aria), basta avere una descrizione matematica di tali onde per avere una codifica L ampiezza dell onda corrisponde all intensità del suono (suono forte/suono debole) La frequenza dell onda all altezza del suono (note alte/note basse) La forma dell onda al timbro del suono (voce/ pianoforte/motore/etc )
forma ampiezza frequenza
Campionamento Per avere una descrizione numerica dei valori dell onda dobbiamo campionarla, ossia registrare il suo valore un certo numero di volte nell unità di tempo Il numero di campioni nell unità di tempo prende il nome di frequenza di campionamento Più è alta la frequenza di campionamento, migliore + la ricostruzione dell onda originale, perché abbiamo a disposizione più campioni Avere più campioni naturalmente vuol dire che la descrizione dell onda risulta più lunga (ad es. un file MP3 di una canzone diventa più grande se la canzone è camionata a frequenza più elevata)
Descrizione formale dei circuiti elettronici che realizzano le operazioni logiche sui segnali binari
CircuiF logici (1) Negazione, NOT,! IN OUT 0 1 1 0 IN OUT
CircuiF logici (2) Congiunzione, AND, && IN1 IN2 OUT= IN1 AND IN2 0 0 0 0 1 0 1 0 0 1 1 1 IN1 IN2 OUT
CircuiF logici (3) Disgiunzione, OR, IN1 IN2 OUT= IN1 OR IN2 0 0 0 0 1 1 1 0 1 1 1 1 IN1 IN2 OUT
CircuiF logici (4) Disgiunzione esclusiva, XOR, IN1 IN2 OUT= IN1 XOR IN2 0 0 0 0 1 1 1 0 1 1 1 0 IN1 IN2 OUT
Precedenze degli operatori! precede &&, che precede, che precede!a&&b C è equivalente a ((!A)&&B) C Le parentesi vincono sulle precedenze: in!((a B)&&C) la disgiunzione viene eseguita per prima, poi la congiunzione, da ulfmo la negazione
Alcune regole per semplificare!a&&a 0!A A 1!(A&&B)!A!B!(A B)!A&&!B 0&&A 0 0 A A 1 A 1 1&&A A Trasformando le espressioni logiche seguendo queste regole rende i circuif più semplici: (!A&&A) (!B&&C)!B&&C
Tipi di espressioni Tautologie: espressioni, come!a A, che valgono sempre 1 (sono sempre vere) qualunque sia il valore di A Contraddizioni: espressioni, come!a&&a, che valgono sempre 0 (sono sempre false) qualunque sia il valore di A TuEe le altre espressioni che possono essere sia vere sia false, a seconda dei valori delle loro componenf, si dicono confngenze.
CircuiF sommatori (1) Half- adder (A+B = Somma con Carry)
CircuiF sommatori (2) Full- adder (A+B+Carry in ingresso = Somma con Carry in uscita)