















































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti corso obbligatorio informatica
Tipologia: Appunti
1 / 87
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!
















































































L’informatica viene nel corso analizzata nella concezione di disciplina scienti ca e non solo nel ruolo che ha assunto nella società contemporanea. A tal ne, si riporta di seguito un passo signi cativo del Manifesto dell'Informatica , un documento u ciale che de nisce il corretto approccio alla disciplina informatica e al suo insegnamento. “L'informatica è un elemento essenziale della società moderna, non solo perché necessaria al normale svolgimento di quotidiane attività, ma anche in quanto il suo sviluppo plasma e determina quello dell'intera società. Non esiste campo dell'attività umana in cui le scoperte dell'informatica non abbiano lasciato il segno. L'uso del calcolatore, infatti, è uscito dai campi tradizionali del calcolo scientifico per entrare in tutte le aree della produzione industriale, dalla medicina all'editoria. Due miliardi di persone si collegano ad Internet. Centinaia di milioni di miliardi (il numero non è un errore di battitura) di transistor – i componenti elementari delle tecnologie dell'informazione – popolano i prodotti che ci circondano, dall'automobile all'elettrodomestico, dalla pompa di benzina al videogioco, per l'equivalente della metà del valore economico di questi oggetti. Centinaia di miliardi di istruzioni software, manifestazioni di intelligenza umana, animano questi componenti e attraverso di essi tutti i processi che caratterizzano la nostra società moderna.” Nel linguaggio comune il termine “informatica” viene usato per riferirsi a tre aspetti tra loro distinti, seppur collegati:
○ Sicurezza informatica e crittogra a ○ Interazione uomo-macchina ○ Intelligenza arti ciale ○ Elaborazione digitale dei segnali ○ Programmazione ■ Sviluppo software ■ Sviluppo web ■ Sviluppo sistemi integrati L'informatica può essere coniugata ad altre discipline per dare vita a branche multidisciplinari come ad esempio bioinformatica , chimica computazionale , robotica , computer grafica e musicologia computazionale. Perché si possa arrivare all'informatica come la intendiamo oggi è stato necessario sviluppare parallelamente due diversi aspetti: quello tecnologico e quello loso co (in particolare logico-matematico). La serie di eventi, idee e scoperte che culmina con i moderni calcolatori ha quindi una moltitudine di protagonisti, disseminati in un arco temporale di almeno 4000 anni, con molte storie parallele. Il termine calcolatore designa genericamente un sistema di elaborazione dati, nato in forma meccanica, sviluppatosi in forma analogica e giunto poi alla forma digitale.
Il più antico strumento di calcolo fu l’abaco, in uso già 4000 anni fa in Cina. Dopo di esso molte furono le scoperte in questo ambito, ma la maggior parte di esse (come ad esempio la pascalina ideata nel 1642 da Blaise Pascal) non vennero mai realizzate. Nel 1702, Gottfried Wilhelm Leibniz sviluppò la logica come disciplina matematica e formale, con i suoi scritti sul sistema numerico binario. Nel suo sistema, l'uno e lo zero rappresentano i valori vero e falso. Questo non ebbe un e etto immediato, ma fu decisivo nel secolo successivo. I primi veri progenitori dell’elaboratore moderno videro la luce agli inizi del XIX secolo. Nel 1804 Joseph Marie Jacquard introdusse una nuova tecnologia per i telai in grado di controllare il movimento di aghi, lo e tessuto attraverso schede perforate, automatizzando così la procedura di tessitura. A metà del XIX secolo, Charles Babbage elaborò una macchina di calcolo in grado di compiere operazioni aritmetiche, ma non fu mai realizzata. Fu Ada Lovelace (considerata oggi la prima programmatrice della storia), ad accorgersi delle vere potenzialità della macchina di Babbage: sebbene fosse stata progettata per svolgere solo calcoli matematici, Ada riconobbe la possibilità di programmare la macchina per altri ni. In questa versatilità risiede la principale di erenza tra una calcolatrice tradizionale e un calcolatore. Nel 1854, le idee di Leibniz vennero riprese da George Boole , che pubblicò la propria algebra booleana , creando un sistema nel quale è possibile trattare ogni relazione logica attraverso l'utilizzo di formule algebriche. Le operazioni (come l'addizione, la sottrazione e la moltiplicazione) vengono sostituite da operazioni logiche con valori di congiunzione, disgiunzione e negazione utilizzando solamente numeri binari (ossia costituiti dalle sole cifre 0 e 1). Alla ne del XIX secolo, Herman Hollerith , un funzionario statunitense dell’u cio per il censimento, sviluppò una macchina tabulatrice, sempre a schede perforate, per automatizzare le operazioni di censimento. Il successo e la richiesta di queste macchine fu tale che nel 1896 Hollerith fondò la Tabulating Machine Company , che nel 1924 divenne la International Business Machine (IBM). Tra gli antenati degli anni '30 del calcolatore, gura il Memex, macchina immaginaria progettata da Vannevar Bush. L’idea era quella di un sistema di archiviazione di dati utilizzato a scopi personali. Il dispositivo era descritto come una scrivania dotata di schermi traslucidi, una tastiera, un set di pulsanti e delle leve. Il Memex avrebbe reso possibile la creazione da parte dell'utente di collegamenti tra foto e documenti, e per questo motivo viene oggi ricordato come primo supporto per l'approccio all' ipertesto. Sempre nella prima metà degli anni '30, Kurt Gödel enunciò i suoi famosi teoremi di incompletezza. Oltre a rappresentare un caposaldo nel campo della logica matematica, con importanti implicazioni di ordine loso co, questi fecero da base per il lavoro di Alan Turing , matematico, logico e crittoanalista inglese. Egli formalizzò un modello di calcolatore universale (la Macchina di Turing, mai costruita realmente), dimostrò come ogni funzione calcolabile si possa eseguire attraverso un algoritmo installato su una Macchina di Turing, ma dimostrò anche come per alcuni algoritmi non sia possibile sapere a priori se siano eseguibili in un tempo nito o in nito. Tra le implicazioni più importanti della Macchina di Turing si sottolinea come essa introduca una netta separazione tra la macchina fisica da una parte , e i dati e gli algoritmi astratti dall'altra. Le basi teoriche per lo sviluppo dei moderni calcolatori sono ora mature.Generazione 1: I tubi a vuoto (valvole).
Nonostante sia più semplice a rontare algoritmicamente calcoli matematici, o geometrici, è possibile a rontare nello stesso modo qualsiasi problema, a patto che se ne possa fornirne una de nizione formalmente corretta e non ambigua. Questo esercizio di formalizzazione trascende l'uso del computer e aiuta gli individui ad a rontare i problemi in modo astratto. Va notato che ogni problema può essere a rontato e descritto in molti modi diversi; quindi non esiste un unico algoritmo per la risoluzione di un problema. Questo signi ca che lo sviluppo di algoritmi è un'attività che richiede, tra le altre cose, creatività e ingegno. A tal proposito, vale la pena citare una famosa battuta di Bill Gates (co-fondatore della Microsoft): " Sceglierò sempre un pigro per fare un lavoro difficile perché troverà il modo più facile per farlo ". Si sottolinea inoltre come l'e cacia e la complessità di un algoritmo dipendano anche dall'organizzazione dei dati a disposizione dell'algoritmo per la risoluzione del problema. Esistono molti modi di organizzare i dati, ognuno dei quali ha pregi e difetti. In genere gli aspetti più rilevanti di cui tenere conto sono: ● la quantità di spazio occupato; ● la velocità con cui è possibile reperire un determinato dato; ● la facilità con cui si possono aggiungere, modi care o eliminare dati. In ne, un programma può essere de nito come un algoritmo scritto in un linguaggio comprensibile al calcolatore, che utilizza dati organizzati secondo una determinata strategia ed è vincolato alle risorse disponibili e alle condizioni al contorno del calcolatore sul quale il programma viene eseguito.
L’informazione può essere de nita come un insieme di dati espressi mediante una rappresentazione simbolica ed inseriti in un contesto interpretativo. In generale, per rappresentare le informazioni è possibile adottare sistemi di simboli diversi. Ad esempio, come mostrato nella Figura 2.1, le lettere dell’alfabeto, i numeri arabi, i numeri romani o ancora i segnali stradali sono sistemi di simboli comunemente usati per rappresentare e comunicare informazioni. Esiste dunque una corrispondenza arbitraria fra ogni singolo simbolo e l’informazione che esso intende rappresentare. Questa corrispondenza viene chiamata codifica dell’informazione. Un codice è un insieme di simboli e di regole. Queste ultime sono necessarie a de nire l’uso e il signi cato dei simboli. Codi care un’informazione signi ca determinare una corrispondenza fra i segni di un codice e i dati che costituiscono l’informazione e il suo signi cato. Di una stessa informazione sono possibili diverse codi che che usano regole e segni diversi. Ad esempio, in un ristorante si può trovare un cartello con la scritta “vietato fumare” o più semplicemente il simbolo della sigaretta con il divieto. Nonostante l’informazione sia sempre la stessa, ossia che in quel ristorante non si può fumare, per trasmetterla si possono utilizzare codici (cioè simboli) anche molto diversi tra loro. Si voglia costruire un codice per comunicare a uno studente il voto conseguito a un esame universitario senza usare la normale numerazione in trentesimi. Le possibili informazioni che il codice deve poter rappresentare sono: “insu ciente”, i voti da diciotto a trenta e il voto “trenta e lode”. Per prima cosa, si deve individuare un insieme di simboli che costituisca il codice, avendo cura di de nire un simbolo per ognuna delle informazioni da rappresentare. Ci sarà quindi bisogno di 15 simboli diversi e si dovrà associare ad ogni simbolo la corrispondente informazione, de nendo un’opportuna tabella di codifica come nell'esempio della Figura 2.3.
conforme al codice de nito (attività di codifica ). Viceversa, dato un messaggio espresso con tale codice, è possibile ricavare il voto corrispondente (attività di decodifica ). Ad esempio, dato il simbolo #, è possibile decodi care il messaggio e a ermare che il voto conseguito è 24. E’ importante che a ogni simbolo corrisponda una e una sola informazione, in modo che il messaggio non risulti mai ambiguo.
Nell'esempio della Figura 2.3, è stato mostrato un codice che richiedeva 15 simboli per rappresentare altrettante informazioni diverse. Un codice costruito in questo modo è molto semplice e di rapida realizzazione, ma comporta che il numero di simboli che compongono il codice e la tabella di codi ca crescano con il numero di informazioni da rappresentare. È facile intuire che la gestione di un codice con un elevato numero di simboli possa essere molto complessa. È possibile costruire un codice che consenta di rappresentare lo stesso numero di informazioni diverse utilizzando un numero inferiore di simboli. Ciò signi ca ridurre il numero di simboli a disposizione senza tuttavia ridurre il numero di informazioni che possono essere codi cate. E' evidente che, avendo meno simboli a disposizione, la rappresentazione di un’informazione richiederà una combinazione di più simboli e quindi una maggiore lunghezza dei messaggi codi cati.
Si noti che, poiché il numero di simboli che costituiscono il codice binario è due (0 e 1), la lunghezza di ogni informazione è maggiore rispetto all'esempio della Figura 2.4 in cui si erano usati quattro simboli. All'aumentare del numero di bit di un simbolo, aumenta la quantità di informazioni rappresentabili. Ad esempio, nel caso in cui si voglia rappresentare un numero naturale (intero), il numero di bit determina il valore massimo rappresentabile, mentre nel caso di un numero irrazionale (con virgola), il numero di bit determina implicitamente anche la precisione con cui è possibile rappresentarlo. Nel primo caso sono frequenti le rappresentazioni a 8, 16 e 32 bit, mentre nel secondo caso sono più comuni rappresentazioni a 32 e 64 bit. A titolo di esempio, se si volesse rappresentare un numero intero non negativo con 8 bit, le combinazioni possibili sarebbero 28=256, quindi i valori rappresentabili andrebbero da 0 a 255.
In informatica, dopo il bit, un'altra unità di misura fondamentale è il byte. Un byte è formato da una sequenza di 8 bit contigui. Un byte può rappresentare 256 informazioni diverse. Questo dipende dal fatto che, avendo 8 bit a disposizione e potendo assumere ogni bit due valori (0 e 1), è possibile de nire 28=256 diverse combinazioni di bit. Come per ogni unità di misura, anche il byte possiede multipli che consentono di rappresentare maggiori quantità di informazioni, tuttavia esistono due diverse scale di misura, spesso confuse anche dagli informatici. Errore comune (riscontrabile anche in Windows o MacOS) è infatti usare i nomi del Sistema Internazionale (SI) per riferirsi ai multipli binari, i cui nomi corretti sono stati standardizzati nel 1998 dalla Commissione Elettronica Internazionale (IEC): Ad esempio, se si vogliono memorizzare 5000 numeri, ognuno con una precisione di 16 bit (cioè 2 byte), saranno necessari: 5000*2 = 10000 byte = 9.76 KiB = 10 KB
La codi ca binaria può essere utilizzata anche per rappresentare i caratteri alfanumerici, cioè i caratteri alfabetici, i numeri e gli altri simboli usati nella scrittura di testi. A tal ne, è necessario che ogni carattere di scrittura possieda una propria rappresentazione binaria univoca. Si noti che pure segni come le parentesi, le cifre numeriche, gli operatori aritmetici, i segni di punteggiatura e le lettere maiuscole devono avere la propria rappresentazione binaria univoca. I codici attualmente più utilizzati per rappresentare digitalmente i testi sono: ● ASCII Esteso : un codice di 8 bit (1 byte) ● UNICODE: un codice che può essere usato a 8, 16 o 32 bit (1, 2 o 4 byte) e che codi ca i caratteri usati in quasi tutte le lingue vive e in alcune lingue morte, nonché simboli matematici e chimici, cartogra ci, l'alfabeto Braille, ideogrammi, ecc. In base al numero di bit usati prende il nome di UTF-8, UTF-16 o UTF-32 (per garantire la compatibilità tra i diversi sistemi, la codi ca dell'ASCII Esteso è uguale a quella di UTF-8). Il fatto che un codice “sia di 8 bit” signi ca che la rappresentazione di un singolo carattere occupa 8 bit (ad esempio, la lettera “a” nella codi ca ASCII è rappresentata dal codice 01100001) e che, complessivamente, il codice è in grado di rappresentare no a 28= caratteri diversi. Questa considerazione è generalizzabile: dato un codice di N bit possiamo dire che ogni carattere di quel codice occupa N bit e che complessivamente il codice può rappresentare no a 2N caratteri diversi.
Il primo alfabeto codi cato è stato l’alfabeto anglosassone. Questo primo codice venne chiamato ASCII ( American Standard Code for Information Interchange ). In origine l’ASCII era a 7 bit, cioè esistevano 27=128 diverse combinazioni di bit per la rappresentazione dei caratteri. Questo signi ca che ASCII a 7 bit è in grado di rappresentare no a 128 caratteri diversi. Figura 2.6. Il codice ASCII a 7 bit. In questo primo standard (mostrato nella Figura 2.6) non era possibile rappresentare caratteri come le lettere accentate, di uso comune nei paesi di in uenza neolatina. A questo primo codice ne fece seguito una sua estensione, detta ASCII esteso. Questa si serve di un byte (8 bit) consentendo la rappresentazione di 28= 256 caratteri diversi nei quali sono contenute anche le lettere accentate e altri simboli. Per codi care una parola occorre recuperare dalla tabella ASCII la sequenza di bit corrispondenti ad ogni lettera che la compone. Ad esempio si voglia rappresentare la stringa “Inf”. Essa richiede 3 byte, uno per ogni carattere, e l’insieme dei bit corrispondente ad ogni lettera sarà: ● I = 01001001 ● n = 01101110 ● f = 01100110 Per decodi care un testo ASCII il procedimento è inverso rispetto a quello di codi ca. Data la sequenza 010010010110111001100110, dobbiamo suddividerla in gruppi di otto bit, e poi decodi care ogni gruppo con il carattere corrispondente mediante la tabella ASCII: ● 01001001 = I ● 01101110 = n ● 01100110 = f Si noti come alla lettera maiuscola corrisponde un simbolo diverso rispetto alla corrispettiva minuscola, infatti la lettera “i” corrisponde alla sequenza 01101001. I caratteri maiuscoli e minuscoli sono a tutti gli e etti diversi dal punto di vista della codi ca binaria. Si noti inoltre che per decodi care un messaggio è necessario conoscere a priori il tipo di codi ca usato.
Figura 2.8. Campionamento e quantizzazione per rappresentare il segnale con un numero nito di numeri a precisione nita.Grazie a campionamento e quantizzazione è possibile ottenere una sequenza digitale di numeri (discreta nel tempo o nello spazio e nell'ampiezza) che approssimi a piacere il segnale continuo originale. Nel caso dei suoni la frequenza di campionamento (il numero di volte al secondo con cui si misurano le variazioni di pressione) determina quali siano i suoni più acuti rappresentabili, mentre la quantizzazione determina la soglia del volume minimo rappresentabile. Nel caso delle immagini il campionamento corrisponde alla risoluzione, e la quantizzazione determina la quantità di colori rappresentabili. Nel caso di un lmato il campionamento nel tempo corrisponde al numero di fotogrammi al secondo, mentre ogni singolo fotogramma lo si può considerare come un'immagine a sé.
Per le immagini l’unità minima di informazione è rappresentata dal pixel ( picture element – elemento dell’immagine ). In sostanza si campiona l’immagine attraverso una griglia regolare in cui ogni cella è un pixel e a ogni pixel è associato un colore. Più la griglia è tta, maggiore sarà il numero di pixel e di conseguenza migliore sarà la risoluzione dell’immagine. Un esempio di griglia di pixel applicata a un’immagine è mostrato nella Figura 2.9. La codi ca di un'immagine realizzata in questo modo è chiamata bitmap o raster. Figura 2.9. Esempio di griglia di pixel. La risoluzione e la dimensione di un’immagine dipendono dal numero di pixel da cui è composta: un’immagine la cui griglia misura 800 colonne x 600 righe sarà divisa in 480000 pixel (0.48 megapixel). Ogni pixel rappresenta un punto di colore, la cui tonalità è descritta mediante una sequenza di bit. Se l’immagine è in bianco e nero sarà su ciente un unico bit per descrivere ciascun pixel: 0 per il nero e 1 per il bianco. Se l’immagine è a colori sarà necessario un numero maggiore di bit per pixel, che dipende da come vengono codi cati i colori.
Un sistema per la rappresentazione digitale dei colori viene detto modello di colore , e ne esistono molti. La maggior parte usa i colori primari convenzionali per derivare tutte le possibili tonalità. Il più utilizzato è lo schema RGB , (Red Green Blue, rosso verde blu) che sono i colori primari su cui il modello è costruito. Per distinguere i colori l’occhio umano utilizza fotorecettori di tre tipi, rispettivamente più sensibili al rosso, al verde o al blu. Questi colori sono quindi detti primari perchè miscelandoli è possibile evocare la percezione di qualsiasi altro colore. Solitamente in RGB si utilizza un byte per ognuno dei tre colori primari, per un totale di 24 bit per pixel (cioè 3 byte). E' quindi possibile rappresentare 256 sfumature diverse per ogni colore primario, quindi complessivamente 256 x 256 x 256 colori diversi, cioè circa 16 milioni di tonalità di colore. In de nitiva, la rappresentazione binaria di un’immagine è costituita da una sequenza di pixel, cioè gruppi di bit che descrivono il colore associato a ciascun punto. Se consideriamo un’immagine di dimensione 640 x 480 espressa secondo lo schema RGB, possiamo calcolare quanti byte saranno necessari per memorizzare tale immagine: 640 x 480 = 307200 pixel, ognuno dei quali richiede 3 byte per rappresentare il colore associato, quindi 307200 x 3 = 921600 byte = 900 KiB.
Per i suoni l’unità minima di informazione è rappresentata da un campione di ampiezza, cioè il valore di ampiezza dell'onda sonora in un determinato istante. Gli esempi in Figura 2.7 e 2.8 si riferiscono proprio al suono (questa codi ca prende il nome di Pulse Code Modulation, PCM). Un suono può essere descritto come la sensazione causata dall'oscillazione più o meno periodica dell'aria che incide sul timpano dell'ascoltatore. Oscillazioni di diversa ampiezza danno origine alla sensazione di volumi più o meno elevati, mentre il periodo delle oscillazioni incide sulla percezione di suoni gravi o acuti. L'orecchio umano può sentire suoni che oscillano da 20 no a 20000 volte al secondo (da 20 a 20000 hertz, o Hz). Dunque, per il teorema di Nyquist-Shannon, in genere si campiona il segnale più di 40000 volte al secondo (solitamente 44100 o 48000). Tuttavia, per suoni particolari come la voce, tutte le oscillazioni sopra i 4000 Hz non hanno un particolare contenuto informativo; non è quindi raro vedere codi che a 8000 campioni al secondo per applicazioni come telefonia o messaggistica vocale. Riguardo alla precisione di ogni campione audio, si è scelto un numero di bit consono a rappresentare la gamma di volumi a cui si è normalmente esposti, dal sussurro no a rumori forti (ma sotto la soglia del dolore); questo valore è stato ssato a 16 bit. Tuttavia non è raro trovare suoni registrati a 24 bit, in modo da poter sfruttare una precisione maggiore durante le fasi di lavorazione di un prodotto, come può essere un disco musicale. In ne si noti che l'essere umano, in genere, è dotato di due orecchie. Questo gli permette di localizzare la direzione da cui provengono i suoni. Per poter codi care (almeno in parte) questo tipo di informazione, solitamente vengono rappresentati segnali audio stereofonici, cioè composti da due sequenze di campioni, una relativa al canale sinistro ed una al canale destro. Esistono poi codi che a più canali (come il 5.1, composto da 6 canali indipendenti), che permettono una maggiore precisione spaziale. In de nitiva, la rappresentazione binaria di un suono è costituita da una sequenza di campioni, cioè gruppi di bit che descrivono il valore di pressione sonora di ciascun canale. A scopo esempli cativo si può calcolare la memoria necessaria a memorizzare un minuto di musica in qualità CD: 60 secondi x 44100 campioni al secondo x 16 bit per campione x 2 canali = 84672000 bit = 10584000 byte =10336 KiB = 10.1 MiB
Per un video l’unità minima di informazione è rappresentata dal fotogramma, a sua volta composto da pixel. Un video quindi eredita quanto detto relativamente alle immagini, con l'aggiunta però di avere tante immagini quanti sono i fotogrammi di cui è composto, riprodotte ad una velocità su cientemente alta da fornire, all'occhio umano, l'illusione del movimento. Per via del fenomeno di persistenza delle immagini sulla retina, l'occhio umano fatica a percepire come separate tra loro immagini che si susseguono ad una velocità minima di 10 o 15 fotogrammi al secondo (fps), dunque tale velocità è su ciente per creare l'impressione del movimento. Tuttavia velocità più elevate consentono di creare un'illusione più realistica, e non è raro trovare codi che a 25, 30, 50 o 60 fps. Va inoltre considerato che anche in questo caso vale il teorema di Nyquist-Shannon: sarà capitato di vedere video in cui le pale di un elicottero sembrino ferme o girino molto lentamente; questo è il tipico e etto di aliasing temporale che ha luogo quando il movimento da codi care è molto superiore alla velocità con cui si campiona. Materiale registrato a fps più alti (come 120, 240, 300 o addirittura >1000) viene impiegato per la riproduzione in "slow motion" (movimento rallentato), viene cioè riprodotto ad una velocità inferiore per osservare nel dettaglio i movimenti del soggetto del video, altrimenti troppo veloci per essere notati. La tecnica opposta prende invece il nome di "stop motion"; in questo caso i fotogrammi sono
lossless dà origine alle stesse informazioni di partenza, senza che sia scartato alcun dettaglio. Formati di questo tipo sono quindi l'ideale per l'archiviazione o la trasmissione di dati nella forma più conservativa, senza che però sia sprecata memoria. Nella tabella seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo: In ne, i metodi di compressione lossy si basano sull'idea di eliminare ciò che è irrilevante, si evita cioè di memorizzare informazioni non percepibili dall'utente. Viene quindi persa in modo de nitivo tutta quell'informazione che in media non viene percepita. Questo comporta un oggettivo degrado dell'informazione, con la potenziale introduzione di artefatti e distorsioni non presenti nel dato originale. Il risparmio che ne deriva può arrivare no al 90% dell'occupazione originale. Oltre all'oggettiva perdita di informazioni, il costo è che la decompressone in genere è più onerosa per il calcolatore in termini di potenza di calcolo richiesta. Inoltre, sebbene la decompressione sia sempre necessaria per la fruizione del dato originale, è caldamente sconsigliata la manipolazione dei dati e la successiva ricompressione lossy, in quanto si a ronterebbe una nuova perdita di informazioni, con l'introduzione di sempre più distorsioni e artefatti. Formati di questo tipo sono ideali per la fruizione in streaming da parte dell'utente nale. Nella tabella seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo, mentre in Figura 2.10 si può vedere un esempio di immagine che ha subito diverse ri-codi che (decompressione e ricompressione) in formato JPEG.
● I registri di memoria sono delle unità di memoria estremamente veloci con capacità ridotta, ma con tempo di accesso molto breve. Attualmente le loro dimensioni variano da 16 a 64 bit e i registri vengono utilizzati per immagazzinare le istruzioni e i dati che stanno per essere processati o sono appena stati processati. ● L’unità logico aritmetica (ALU, Arithmetic-Logic Unit) è il nucleo di esecuzione dei calcoli, essendo in grado di eseguire operazioni come somma, sottrazione, moltiplicazione e divisione, oltre che le principali operazioni logiche come AND, OR e NOT. Una volta prelevati gli operandi dai Registri di memoria, la ALU esegue l'operazione richiesta e ne deposita il risultato nuovamente in memoria. La ALU, insieme all'unità di controllo, collabora al completamento di un ciclo macchina. ● I bus sono canali di comunicazione tra le varie componenti dell’elaboratore e si di erenziano a seconda della funzione svolta. Tra i principali produttori di microprocessori è possibile citare Intel, AMD, Motorola, Qualcomm e ARM. Ogni microprocessore è caratterizzato da un clock che scandisce la sequenza delle operazioni da eseguire. Ogni operazione può richiedere uno (nel caso di operazioni elementari) o più cicli di clock. La frequenza di clock è uno dei parametri con i quali si valuta la velocità di calcolo di un microprocessore. L’unità di misura della frequenza di clock è l’hertz (1 hertz corrisponde ad un ciclo al secondo). I microprocessori attualmente in commercio raggiungono frequenze di clock nell'ordine dei Gigahertz (109 hertz). Microprocessori più piccoli e veloci sono di cili da costruire per via di alcuni limiti sici, dunque per la produzione di calcolatori più performanti la tecnologia moderna si sta concentrando nella realizzazione di microprocessori che contengono più CPU (chiamate core) in modo che queste possano svolgere più compiti in parallelo.
Un calcolatore possiede due tipi di memoria: la memoria primaria (chiamata anche centrale o di lavoro) e la memoria secondaria o di massa. La memoria primaria è quella che conserva i programmi in esecuzione e i dati in uso all'interno della CPU. E’ organizzata come una successione di bit raggruppati in unità dotate di indirizzo (un numero progressivo a partire da 0) dette celle. La velocità di accesso a questa memoria è cruciale perché da essa dipende la reattività del calcolatore alle richieste dell’utente. Il metodo di accesso alla memoria primaria è casuale, nel senso che, conoscendo l’indirizzo, è possibile accedere a una qualsiasi cella di memoria in modo diretto e il tempo di accesso alla cella non dipende dalla sua posizione. Per questo motivo, la memoria primaria è anche detta Random Access Memory o RAM. Un’ulteriore caratteristica distintiva della memoria primaria è la sua volatilità: questo signi ca che, spegnendo il calcolatore, il contenuto delle celle di memoria viene cancellato e non è più recuperabile.
La memoria secondaria è la memoria dei dischi e delle unità di memorizzazione permanente, quali ad esempio i dischi ssi (hard disk), i dischi ottici (CD-ROM, DVD, Blu-Ray) e le memorie ash (utilizzate, per esempio, nelle chiavette USB). Questo tipo di memoria è in grado di memorizzare grandi quantitativi di informazioni che, nel caso dei dischi ottici, può andare da qualche centinaio di MB no a qualche decina di GB e, nel caso dei dischi ssi, può arrivare a decine di TB. Nella memoria secondaria l’informazione viene memorizzata in maniera permanente, ma, a di erenza della memoria primaria, questo tipo di memoria ha tempi di accesso molto più elevati. Le memorie basate su dischi (hard disk, CD-ROM, DVD-ROM, ...) non possono accedere a una cella di memoria in modo diretto ma richiedono un tempo di posizionamento del dispositivo di lettura e scrittura per raggiungere la zona di memoria richiesta. Per questo motivo, il tempo di accesso ad un dato dipende dalla posizione della cella sul disco. I principali dispositivi di memoria secondaria (Figura 3.2) sono: ● dischi ssi (hard disk): utilizzati per l’archiviazioni di programmi e dati e generalmente collocati all'interno del calcolatore. Esistono anche hard disk esterni, di solito collegabili tramite porte USB. Questi dispositivi sono composti da una pila di dischi metallici rotanti collegati a due testine di lettura/scrittura ciascuno (una per lato del disco). Le testine possono spostarsi dalla parte più esterna del disco alla parte più interna (il funzionamento è pressoché identico a quello dei vecchi lettori di dischi in vinile) e possono magnetizzare o smagnetizzare i vari blocchi dati in cui i dischi sono suddivisi; ● supporti a lettura ottica (CD-ROM, DVD, Blu-Ray): sono utilizzati per la distribuzione del software e di grossi archivi di dati multimediali (testi audio, foto, video). Sono generalmente usati come supporto alla memorizzazione di dati in sola lettura e richiedono dispositivi dedicati, cioè i masterizzatori, per poter eseguire operazioni di scrittura. Il funzionamento meccanico di questi dispositivi è praticamente identico a quello degli hard disk: la principale di erenza riguarda l'interazione della testina con il disco che, in questo caso, è basata su un principio ottico (la testina emana luce e riceve la luce ri essa dal disco); ● memorie ash (chiavette USB, Solid State Drive, memory card): questa tipologia di memorie è di recente introduzione e funziona, come la memoria primaria, senza l'ausilio di parti meccaniche. Le memorie ash, generalmente basate su principi di sica quantistica (come l' effetto tunnel ), sono ad accesso casuale, molto più veloci di tutte le altre tipologie di memorie secondarie e permettono una notevole riduzione dei consumi (dovuta all'assenza di parti meccaniche). Negli ultimi anni si sta assistendo all'introduzione di supporti chiamati SSD (Solid State Drive) utilizzati come sostituti dei vecchi hard disk: questi nuovi dischi sono ancora molto costosi e non riescono a raggiungere la capacità di memorizzazione dei vecchi hard disk, ma
garantiscono enormi incrementi della velocità di lettura e scrittura oltre che consumi ed emissioni sonore estremamente ridotte. Figura 3.2. Dispositivi di memoria secondaria.
Oltre alla CPU e alla memoria primaria e secondaria, il calcolatore ha bisogno di dispositivi di input e output chiamati periferiche per supportare l'interazione con l’ambiente esterno. Le periferiche si collegano al calcolatore mediante interfacce di comunicazione (comunemente dette porte), e possono variare a seconda del tipo e della velocità di trasmissione. Inoltre, per ogni tipo di periferica esiste una scheda chiamata controller che viene connessa alla scheda madre e che ha il compito di gestire il comportamento della periferica. I dispositivi di input consentono di comunicare al calcolatore informazioni provenienti dall'utente o dall'ambiente esterno. I principali dispositivi di input (Figura 3.3) sono: la tastiera, gli strumenti di puntamento (mouse), lo scanner, il microfono, le macchine fotogra che e le videocamere digitali. La tastiera è il dispositivo di input principale ed è comunemente a ancata dagli strumenti di puntamento. Oltre al popolarissimo mouse, un esempio di strumento di puntamento è il touchpad, molto di uso sui calcolatori portatili e con funzionalità analoghe a quelle del mouse. In particolare, il touchpad è costituito da un’area sensibile al movimento e alla pressione delle dita che è collegata con il puntatore sullo schermo. Lo scanner è una periferica che si collega alla macchina, spesso usando una porta che è detta USB (Universal Serial Bus), che permette di rappresentare digitalmente una sorgente cartacea (una fotogra a o un documento scritto). Microfoni, macchine fotogra che e videocamere digitali sono dispositivi analoghi a quelli tradizionalmente conosciuti, con la di erenza che sono in grado di comunicare al calcolatore una versione digitale del suono, delle fotogra e e dei video realizzati.
Se l'hardware è la componente materiale di un calcolatore, il software ne costituisce la componente immateriale. Il termine software (letteralmente "materia morbida") è l'insieme dei programmi che possono essere eseguiti da un calcolatore. In particolare, un singolo programma software è un insieme di istruzioni che un calcolatore, e più precisamente la CPU, deve eseguire per portare a compimento un certo compito ( task ). Microsoft Word è un esempio di programma software che contiene istruzioni per la creazione e la gestione di documenti. Nel contesto di Word, il pulsante che consente di formattare in grassetto un testo selezionato è una funzione software associata a un insieme di istruzioni che consentono di raggiungere l’obiettivo (cioè visualizzare in grassetto una data porzione di testo). Firefox o Chrome sono invece esempi di programmi software che si propongono come strumenti per reperire e visualizzare pagine web. E’ facile pensare a numerosi altri esempi di programmi software, ciascuno con le proprie caratteristiche e nalità. Ne risulta che esistono diverse tipologie di programmi software di cui è opportuno conoscere le speci cità.
E’ consuetudine suddividere il software in due macro-categorie: il software di sistema e il software applicativo. Il software di sistema è l’insieme dei programmi che gestiscono le risorse e il comportamento del calcolatore. In questa categoria, il software più importante è il sistema operativo , un insieme di programmi che controlla e gestisce le funzionalità legate a CPU, memoria, periferiche e dispositivi di input/output collegati al calcolatore. Nel software di sistema sono inclusi i firmware e i driver. Il firmware è un software integrato in un dispositivo elettronico per svolgere funzioni speci che, come l’avvio del dispositivo stesso. Un esempio di rmware è il BIOS ( Basic Input-Output System ) che è un rmware integrato sulla scheda madre del calcolatore con il compito di eseguire la procedura di avvio all'accensione della macchina. Il driver è un software che a anca uno speci co dispositivo e ne consente il corretto funzionamento. Il driver è normalmente installato all'interno del sistema operativo e consente al calcolatore di utilizzare il dispositivo. Ogni dispositivo possiede il proprio driver, e il driver è composto da un insieme di procedure che controllano le varie funzionalità del dispositivo. Ad esempio, una stampante, come ogni dispositivo collegabile a un calcolatore, è dotata del proprio driver, la cui installazione è necessaria a nché il calcolatore possa correttamente farne uso. Il software applicativo comprende tutti i programmi che consentono all'utente di eseguire compiti speci ci. Sono esempi di software applicativo i programmi per la creazione e la gestione di documenti (es. Microsoft Word), i fogli di calcolo (es. Microsoft Excel), i browser per la navigazione su web (es. Mozilla Firefox), i programmi per la gestione della posta elettronica (es. Microsoft Outlook), i programmi per l’elaborazione delle immagini (es. Adobe Photoshop) e così via.
Il sistema operativo (SO) è il software di sistema più importante per il corretto funzionamento di un calcolatore e presiede numerose funzionalità. Da un lato, il sistema operativo si occupa di gestire le componenti siche del calcolatore. In particolare, sono di sua competenza funzioni come: ● la gestione della CPU e della memoria principale (RAM). In ogni istante, il calcolatore esegue numerosi programmi. Per questo motivo, il sistema operativo deve stabilire come e in quale ordine questi programmi avranno accesso alla CPU, allocando inoltre lo spazio in memoria principale per ciascuno di essi; ● la gestione dei file e la memorizzazione sui dispositivi di memoria secondaria. Il sistema operativo è dotato di un modulo denominato file system per la gestione dei le. Questo modulo presiede le operazioni di salvataggio/memorizzazione dei le e le corrispondenti operazioni di lettura/caricamento dei medesimi. Il le system utilizza un’organizzazione dei le in cartelle ( directory ) per favorire una gestione ordinata e intuitiva dello spazio disponibile da parte dell’utente; ● l’interazione con le periferiche. Tramite i driver, il sistema operativo è in grado di comunicare con i dispositivi collegati al calcolatore consentendone il corretto funzionamento. Inoltre, il sistema operativo si occupa di gestire l’interazione fra l’utente e il calcolatore. In particolare, è compito del sistema operativo intercettare i comandi dell’utente e fare in modo che essi siano correttamente eseguiti orchestrando il funzionamento delle varie componenti del calcolatore che si rendessero necessarie. A tal ne, il sistema operativo è dotato di un’interfaccia, normalmente visuale,
che consente all'utente di comunicare in maniera intuitiva e naturale con il calcolatore. Questa interfaccia è chiamata GUI ( Graphical User Interface ) e utilizza strumenti come nestre, pulsanti e puntatori per fornire all'utente gli strumenti necessari per invocare l’esecuzione dei comandi. Ad esempio, tramite gli strumenti di input come la tastiera e il mouse, l’utente può invocare la stampa di un documento. Il sistema operativo intercetta il comando e fa in modo che il documento richiesto sia passato alla stampante. Tramite il driver della stampante, il sistema operativo manda in stampa il documento e produce l’output richiesto.
Il sistema operativo è lo stesso per tutti i calcolatori? La risposta è no: esistono sistemi operativi diversi, ognuno con le proprie caratteristiche e peculiarità. I sistemi operativi più di usi e conosciuti sono Microsoft Windows , Linux, Apple Mac OS X e Android. Windows è un prodotto della società statunitense Microsoft e prende il nome dall'elemento che ne caratterizza l’interfaccia gra ca: la nestra (window). Nel corso degli anni, le versioni di Microsoft Windows che sono andate succedendosi sono piuttosto numerose: Windows 95, 98, 2000, XP, Vista, 7, 8 e 10, solo per citarne alcune. Si tratta di un SO disponibile per numerose piattaforme , cioè installabile su calcolatori con diverse tipologie di microprocessore e scheda madre. Microsoft Windows è un SO commerciale , è dunque necessario pagare l’acquisto di una licenza per poterlo installare su un calcolatore. Linux è un SO non commerciale e può essere installato su un calcolatore senza dover pagare alcuna licenza. La prima versione nasce nel 1991 a opera di Linus Torvalds, un giovane studente da cui il sistema ereditò il nome. Si tratta di un SO estremamente versatile (ispirato ad un importante sistema dell'epoca chiamato UNIX) e, come Microsoft Windows, installabile su numerose piattaforme. Oggi questo SO è disponibile in svariate distribuzioni. Le diverse distribuzioni Linux condividono l’uso del medesimo nucleo ( kernel ) del sistema e si di erenziano nei restanti moduli. Ne risulta che le varie distribuzioni possono presentare di erenze anche sostanziali per l’utente. Sono esempi di distribuzioni Ubuntu , Fedora e SuSE. Mac OS X è un prodotto della società statunitense Apple ed è concepito per essere installato solo ed esclusivamente sui dispositivi di questo stesso produttore (PC o dispositivi mobili). Come Microsoft Windows, anche Mac OS X è un prodotto commerciale ed è necessario pagare una licenza per installarlo su un calcolatore; come Linux, anche questo SO è ispirato al SO UNIX. Android è un sistema operativo non commerciale sviluppato da Alphabet (azienda nota anche col nome Google) basato su Linux, ma ottimizzato per i dispositivi mobili (smartphone, tablet ecc). E’ possibile scegliere il sistema operativo da installare sul proprio calcolatore? In genere, all'acquisto del calcolatore, il sistema operativo è già installato (e l’eventuale licenza d’uso già pagata in caso di prodotto commerciale). Installare un nuovo sistema operativo può implicare l’acquisto di un’ulteriore licenza d’uso nel caso si scelga un prodotto commerciale come Microsoft Windows. Certamente, la scelta di installare un sistema operativo non commerciale come Linux è sempre possibile e non comporta alcun aggravio di costi.
I software applicativi si a ancano al software di sistema e completano la dotazione di programmi di un calcolatore. Il software applicativo comprende innumerevoli programmi, ognuno concepito per realizzare speci che funzionalità di interesse per l'utente nale. Il software applicativo non è pre-installato sul calcolatore: l'utente sceglie quali software applicativi sono di suo interesse e procede con l'installazione. La scelta può richiedere una ri essione: a volte la medesima funzionalità è o erta da più software applicativi e si pone il dubbio di come procedere. In generale, i software applicativi non sono in con itto fra loro e possono coesistere sul calcolatore senza recarsi reciproco danno. Esistono eccezioni a questa regola generale, come ad esempio il caso dei software antivirus per i quali è raccomandato l'uso di un unico prodotto alla volta. Fatta eccezione per questi casi, i software applicativi, anche quando analoghi per funzionalità, possono essere installati e usati contemporaneamente sul calcolatore. Si pensi al caso dei browser, i software applicativi per la navigazione su web. Esistono numerosi prodotti che o rono questa funzionalità come ad esempio i noti Chrome e Firefox. Entrambi possono essere installati sul calcolatore e possono essere usati contemporaneamente senza alcun problema. Dunque, come scegliere quali software applicativi installare sul proprio calcolatore? Un fattore di scelta è certamente il costo. Numerosi software sono prodotti commerciali ed è necessario pagare il costo di una licenza per poterli installare e utilizzare. Spesso questi software possono essere installati in versione di prova (trial version) che ha una durata limitata nel tempo (tipicamente 30 giorni) oppure o re funzionalità limitate rispetto alla versione u ciale. Esistono anche software cosiddetti freeware per i quali non è necessario pagare una licenza e possono essere liberamente installati sul calcolatore. Una ulteriore categoria è quella del software open source , programmi di cui è reso disponibile pubblicamente il codice sorgente scritto in linguaggi di alto livello in nome della trasparenza e della possibilità da parte di chiunque di contribuire allo sviluppo. L'installazione richiede l'esecuzione di una procedura di con gurazione. Tale procedura installa il programma sul calcolatore e lo rende disponibile per tutte le successive esecuzioni. L'installazione comporta l'occupazione di una porzione di spazio sulla memoria