Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Byte e rappresentazione di numeri in base 2: il funzionamento di un calcolatore, Appunti di Elementi di Informatica

Come i byte sono diventati l'unità di misura fondamentale della quantità di informazione e delle capacità di memoria. Viene inoltre illustrata la rappresentazione di numeri in base 2 (binaria) e la struttura di un calcolatore, inclusi i suoi componenti come processore, memoria cache, memoria principale e registri. Inoltre, vengono discusse le differenze tra CISC e RISC e la scelta di codifica delle istruzioni.

Tipologia: Appunti

2020/2021

Caricato il 01/04/2021

samael-noceur
samael-noceur 🇮🇹

1 documento

1 / 58

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
UNITA’ 1: RAPPRESENTAZIONE DELLE INFORMAZIONI
Powerpoint – Le origini in Leibniz
Asini e bit
Dedichiamo questo breve approfondimento all’origine della notazione binaria, anche allo scopo di accennare brevemente ad uno
dei molti contributi che il filosofo e matematico di G. W. Leibniz (1646-1716) ha dato alle origini del pensiero computazionale.
Sappiamo che con 1 bit si rappresenta una scelta tra 2 alternative.
Qui vediamo il famoso asino di Buridano che è assetato ma indeciso su quale secchio d’acqua scegliere per iniziare a bere.
Le origini della numerazione binaria
In assenza di informazione l’asino è costretto a morire di sete. Quello che gli manca è un bit di informazione che lo aiuti a dirigersi
verso il secchio a sinistra (0) o il secchio a destra (1).
(In realtà, questa storia semplifica la motivazione dei filosofi per discutere questa parabola, che è il problema del determinismo e
del libero arbitrio.)
Come rappresentare una scelta tra più di 2 alternative? Usando sequenze di bit, di lunghezza adeguata al numero di alternative da
rappresentare.
In generale:
-n bit permettono di rappresentare una scelta tra 2n alternative;
-per rappresentare una scelta tra N ≥ 1 alternative, sono necessari circa log2 n. di bit.
Abbiamo allora la tabella:
Alternative 1 2 3 4 5 6 7 8 ...
Bit 0 1 2 2 3 3 3 3 ...
Leibniz
Leibniz era in contatto epistolare con i missionari gesuiti in Cina, in particolare il Padre Bouvet che lo informò nel 1701 che il
metodo di contare con i numeri in base 2 comunicatogli in precedenza da Leibniz svelava il mistero delle figure di Fo-Hi, associate
allo yin e yand della filosofia taoista secondo il Libro dei Mutamenti, o I-Ching.
La rappresentazione delle figure per lo yin e lo yang mediante linee spezzate permette la costruzione di 23 trigrammi (cioè
sequenze di 3 figure) e di 2 6 esagrammi (cioè sequenze di 6 figure), equivalentemente di 8 numeri binari di 3 bit e di 64 numeri
binari di 6 bit.
Peano e il byte
C’è una specie di appendice a questa breve storia della scoperta leibniziana della corrispondenza tra rappresentazione binaria e le
figure dell’I-Ching. Infatti, le sequenze prese in considerazione da Leibniz non comprendono le sequenze di 8 bit che costituiscono
il byte, il gruppo di bit associato ai caratteri della tabella ASCII (estesa).
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a

Anteprima parziale del testo

Scarica Byte e rappresentazione di numeri in base 2: il funzionamento di un calcolatore e più Appunti in PDF di Elementi di Informatica solo su Docsity!

UNITA’ 1: RAPPRESENTAZIONE DELLE INFORMAZIONI

Powerpoint – Le origini in Leibniz Asini e bit Dedichiamo questo breve approfondimento all’origine della notazione binaria, anche allo scopo di accennare brevemente ad uno dei molti contributi che il filosofo e matematico di G. W. Leibniz (1646-1716) ha dato alle origini del pensiero computazionale. Sappiamo che con 1 bit si rappresenta una scelta tra 2 alternative. Qui vediamo il famoso asino di Buridano che è assetato ma indeciso su quale secchio d’acqua scegliere per iniziare a bere. Le origini della numerazione binaria In assenza di informazione l’asino è costretto a morire di sete. Quello che gli manca è un bit di informazione che lo aiuti a dirigersi verso il secchio a sinistra (0) o il secchio a destra (1). (In realtà, questa storia semplifica la motivazione dei filosofi per discutere questa parabola, che è il problema del determinismo e del libero arbitrio.) Come rappresentare una scelta tra più di 2 alternative? Usando sequenze di bit, di lunghezza adeguata al numero di alternative da rappresentare. In generale: -n bit permettono di rappresentare una scelta tra 2n alternative; -per rappresentare una scelta tra N ≥ 1 alternative, sono necessari circa log2 n. di bit. Abbiamo allora la tabella: Alternative 1 2 3 4 5 6 7 8 ... Bit 0 1 2 2 3 3 3 3 ... Leibniz Leibniz era in contatto epistolare con i missionari gesuiti in Cina, in particolare il Padre Bouvet che lo informò nel 1701 che il metodo di contare con i numeri in base 2 comunicatogli in precedenza da Leibniz svelava il mistero delle figure di Fo-Hi, associate allo yin e yand della filosofia taoista secondo il Libro dei Mutamenti, o I-Ching. La rappresentazione delle figure per lo yin e lo yang mediante linee spezzate permette la costruzione di 23 trigrammi (cioè sequenze di 3 figure) e di 2 6 esagrammi (cioè sequenze di 6 figure), equivalentemente di 8 numeri binari di 3 bit e di 64 numeri binari di 6 bit. Peano e il byte C’è una specie di appendice a questa breve storia della scoperta leibniziana della corrispondenza tra rappresentazione binaria e le figure dell’I-Ching. Infatti, le sequenze prese in considerazione da Leibniz non comprendono le sequenze di 8 bit che costituiscono il byte, il gruppo di bit associato ai caratteri della tabella ASCII (estesa).

Tuttavia, un pioniere della logica matematica e ammiratore dell’opera di Leibniz, Giuseppe Peano, nel 1898 inventa una stenografia basata su elementi che corrispondono a gruppi di 8 cifre binarie, osservando che il loro numero è all’incirca pari a quello delle sillabe delle lingue europee. Non è ancora l’origine ufficiale del byte, perché non abbiamo prove che l’idea di Peano abbia avuto influenza sull’origine di questa unità di misura. Quello che è noto è però che Peano si dedicò alla realizzazione di un congegno meccanico per scrivere utilizzando questo codice. Powerpoint - Bit e Byte Il bit è l'unitá minima di misura dell'informazione (dall'inglese “binary digit”), definita come la quantità minima di informazione che serve a distinguere due possibili eventi. Un bit è una cifra binaria, ovvero uno dei due simboli del sistema numerico binario, classicamente chiamati “zero” 0 e “uno” 1. Una sequenza di 8 bit viene chiamata byte, nome che deriva dalla parola inglese “bite” (“morso”, “boccone”, “pezzo” in Italiano) coniato anche per assonanza col termine “bit”, ma rinominato per evitare confusioni accidentali di pronuncia con questo. Il byte è divenuto l'unitá di misura fondamentale della quantità di informazione e delle capacità di memoria La possibilità di rappresentare informazioni di varia natura attraverso numeri permette di manipolare le informazioni rappresentate attraverso operazioni fra numeri che i calcolatori sono in grado di compiere in modo efficiente. Powerpoint - Rappresentazione di numeri in bit Comunemente, i numeri vengono scritti in notazione posizionale. In notazione posizionale, il significato di ogni cifra dipende dalla sua posizione. Per esempio, i due numeri 73 e 37 hanno significati diversi nonostante siano composti dalle stesse cifre (“3” e “7”). In base 10, le cifre che compongono i numeri interi hanno significato (da destra verso sinistra) di unita`, decine, centinaia, etc. Si veda il seguente esempio: Allo stesso modo, nella rappresentazione di numeri in base 2 (binaria), le “cifre” possibili sono soltanto due “0” e “1” e, in modo analogo nella base 10, il loro valore è uguale a potenze crescenti della base numerazione 1 = 20, 2 = 21 , 4 = 22 , 8 = 23 , etc (destra verso sinistra). Quindi, per esempio, il numero binario 10011 sarà uguale al numero (10011) = (19) Si osservi che si usa la notazione (x) per dire che il numero x e rappresentato in base p. Inuna sequenza di bit si usa chiamare il bit più a destra come il meno significativo (vale meno, come le unità in base 10). Analogamente, il bit più a sinistra si chiama bit più significativo. Oltre alla rappresentazione in base 10, che è per noi più naturale, e quella binaria appena descritta, esiste un'altra rappresentazione che riveste un ruolo di notevole importanza nell'informatica: la rappresentazione esadecimale. Il sistema numerico esadecimale (a volte abbreviato come hex) è un sistema numerico posizionale in base 16. Per questo motivo, ha necessità di usare 16 simboli per rappresentare le cifre. Oltre alle “classiche” cifre da 0 a 9 presenti nella numerazione in base 10, che hanno lo stesso valore della base 10, la rappresentazione esadecimale utilizza le seguenti sei cifre aggiuntive:

  • “a” oppure “A”, con valore 10
  • “b” oppure “B”, con valore 11
  • “c” oppure “C”, con valore 12
  • “d” oppure “D”, con valore 13
  • “e” oppure “E”, con valore 14
  • “f” oppure “F”, con valore 15

In una tabella di verità sono elencate tutte le possibili combinazioni delle variabili coinvolte in un’espressione su ogni riga. Inoltre, per ogni possibile valore delle variabili viene scritto il valore dell’espressione. Nelle tabelle di verità, il valore “1” rappresenta “vero”, mentre lo “0” rappresenta “falso”. In seguito sono riportate le tabelle di verità delle sopra menzionate operazioni elementari. x y NOT x x AND y x OR y x XOR y 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 È possibile comporre espressioni booleane complesse. Per esempio, la seguente espressione: w = (x AND y ) XOR (x OR z) ha la seguente tabella di verità: x y z x AND y x OR y w 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 Si osservi che:

  • il numero di combinazioni possibili, ovvero il numero di righe, è pari a 2n con n uguale al numero delle variabili coinvolte nell'espressione
  • la tabella di verità di un’espressione complessa è costruita a partire dalle tabelle di verità delle espressioni che la compongono. Le operazioni appena descritte (NOT, AND, OR, XOR) si possono applicare anche ai byte. Un’operazione booleana applicata ad un byte si intende applicata a ciascun bit che lo compone. Per esempio, se x = (10100111) allora NOT x = (01011000)

Oppure: (9A) XOR (B1) = (10011010) XOR (10110001) = (00101011) = (2B) Powerpoint - Il file Il file è una sequenza ordinata di byte. Quindi due file con gli stessi byte, ma con ordine diverso, sono diversi. Per esempio, un file con contenuto (scritto di seguito attraverso rappresentazione esadecimale dei singoli byte) FC F è diverso dal file che contiene F4 FC I file sono spesso memorizzati sul disco. La codifica dell'informazione è il modo in cui un certo tipo di informazione (testi, immagini, etc) è tradotta in un file, ossia una sequenza di byte. Si dice che una certa codifica rappresenta un certo tipo di informazione. I termini codifica e rappresentazione dell'informazione, si usano spesso come sinonimi. Si possono codificare vari tipi di informazione: testi, immagini, suoni, istruzioni. Lo stesso tipo di Informazione (per esempio le immagini) può essere codificata attraverso diversi tipi di codifica (le immagini hanno varie codifiche o formati: JPG, GIF, PNG, etc.). Fra le varie codifiche di uno stesso tipo di informazione non ne esiste una migliore. Per esempio, il JPG è un formato di immagine che riduce molto la dimensione del file e si presta quindi bene ad essere usato per le immagini dei siti web. Il formato TIFF, invece, è molto dettagliato e si presta quindi bene per rappresentare le fotografie in formato digitale. I file salvati sul disco hanno dei nomi. Per convenzione la loro estensione (ultimi caratteri dopo il punto “.”) determina l'informazione rappresentata e la sua codifica. Esempio:

  • txt, file di testo con codifica ASCII
  • pdf, documenti con codifica PDF (Portable Document Format)
  • html, pagina web
  • zip, file compresso con metodo Zip
  • exe, eseguibile su macchine Windows
  • jpg, immagine con codifica JPG (Joint Photographic expertGroup).
  • gif, immagine con codifica GIF (Graphics Interchange Format) Le convenzioni possono cambiare nel tempo e fra computer diversi. Le convenzioni possono anche essere un rischio: Windows si affida molto all'uso di estensioni e proverà quindi a eseguire tutti i file che hanno estensione .exe. Nei sistemi operativi che fanno molto affidamento alle estensioni (per esempio, Windows), il cambio dell'estensione potrebbe determinare una difficoltà nell’apertura del file. Con il doppio click, infatti, tali sistemi operativi selezionano l'applicazione con cui aprire il file sulla base dell'estensione. Powerpoint - Introduzione alla rappresentazione del testo

russo: Њдщ fine è la seguente sequenza di byte (in esadecimale) 72 75 73 73 6F 3A 20 D0 8A D0 B4 D1 89 0A 66 69 6E 65. Si osservi che ognuno dei 3 caratteri in cirillico Њдщ rappresentato da 2 byte (tutti e tre i caratteri sono codificati dalla stringa di byte D0 8A D0 B4 D1 89 ), diversamente da quanto avviene nella codifica ASCII standard. Inoltre, ogni byte della codifica estesa (che non è ASCII standard) ha il bit più significativo uguale a 1. Ad oggi, la codifica UTF-8 richiede da 2 a 4 byte per rappresentare un solo carattere. Powerpoint - Introduzione alla rappresentazione delle immagini Come nel caso del testo, anche per le immagini è necessario tradurre un'immagine in sequenza di byte (numeri da 0 a 255). In questo caso l'idea è la seguente:

  • L'immagine viene astratta come un rettangolo (di dimensioni variabili) che contiene colori
  • Tale rettangolo viene diviso in una griglia composta da piccoli quadratini. Ogni quadratino si chiama pixel (Picture Element).La risoluzione dell'immagine determina il numero di pixel utilizzati per rappresentare l'immagine: maggiore è la risoluzione, maggiore è il numero di pixel utilizzati. La risoluzione di un'immagine si misura con il numero di pixel utilizzati in larghezza e in altezza: una risoluzione di 1024 x 768 significa che la griglia ha 1024 pixel in orizzontale e 768 in verticale, ovvero un numero totale di pixel di 786432 pixel. Alternativamente si usa anche dire che una risoluzione ha, per esempio, 3 megapixel, intendendo che il numero totale di pixel è appunto 3 x 10.
  • L'immagine è codificata con la sequenza dei colori dei pixel a partire, tipicamente, dall'angolo dell'immagine in alto a sinistra. Oppure secondo altre convenzioni. Il passaggio da un'immagine originale alla sua rappresentazione in pixel introduce un errore. Una risoluzione alta permette quindi di cogliere particolari fini di un'immagine, al prezzo, ovviamente, di un numero maggiore di pixel da codificare e quindi di una maggior dimensione del file che contiene la codifica dell’immagine. Codifica del colore La scelta di una risoluzione permette di passare dalla rappresentazione di un'immagine, alla rappresentazione di un singolo pixel. Il pixel è rappresentato dal suo colore. Esistono vari modi per rappresentare il colore. Di seguito se ne illustrano alcuni.
    • La codifica più conosciuta e diffusa è quella RGB (Red Green Blue). Tale codifica deriva dal vecchio modo di generare il colore nelle televisioni a tubo catodico. In queste televisioni, ogni pixel della televisione veniva colorato a seconda dell'intensità con cui veniva colpito da tre fasci di elettroni, ciascuno corrispondente a colori rosso, verde e blu. In codifica RGB, quindi, il colore viene rappresentato dall'intensità di ciascuno dei tre colori. Tale intensità è tipicamente rappresentata da un byte. Un colore RGB, quindi, si rappresenta con 3 byte. Il bianco è il colore ottenuto con l'intensità massima di tutte e 3 le componenti, difatti la sua rappresentazione è FF FF FF.
    • La codifica CMYK (Cyan, Magenta, Yellow, Key black), detta anche di quattricromia, è usata principalmente nelle stampanti a getto di inchiostro. In questo caso, un colore è rappresentato da 4 numeri, corrispondenti alla quantità della singola componente necessaria a riprodurre il colore.
  • La codifica HSV (Hue, Saturation, Value) dall'inglese “tonalità, saturazione, valore", è particolarmente orientato al modo in cui i colori vengono percepiti dall'essere umano, essendo basato sulla percezione che si ha di un colore in termini di tinta, sfumatura e tono. Palette (tavolozza) I possibili colori ottenibili con la codifica RGB sono pari a tutte le possibili configurazioni di 3 byte ovvero 23x8 = 224 ≃ 16 x 10616 x 106 Siccome è molto difficile che in un’immagine ci possano essere pixel con tutti i 16 milioni di colori diversi (si pensi ad una foto con un panorama in cui gran parte dell'immagine è fatta da pixel del cielo di colore simile), è stato pensato un sistema più efficiente per codificare il colore dei pixel. In alcuni formati (per esempio, il formato GIF (Graphics Interchange Format), viene definita una tabella di colori, detta palette, che svolge una funzione analoga alla tabella ASCII usata per la codifica del testo. Un pixel di un determinato colore sarà quindi codificato dall'indice di quel colore all'interno della tabella. In un'immagine con una palette di 256 colori, ogni pixel sarà codificato da 8 bit. Allo stesso modo, se una palette contiene soltanto due colori, come nel caso di un'immagine in bianco e nero, ogni pixel può essere rappresentato da un bit soltanto. Questo spiega come mai le immagini in bianco e nero abbiano una dimensione molto minore rispetto alle immagini a colori.

UNITA’ 2 – ARCHITETTURA DEL CALCOLATORE

Innanzi tutto, un programma è una sequenza di istruzioni. Così come la codifica di un testo si realizza concatenando le codifiche delle parole che lo compongono, la codifica di un programma si realizza concatenando le codifiche delle singole istruzioni che lo compongono. Un programma codificato, detto anche file eseguibile, potrà essere eseguito da un calcolatore. Passiamo quindi a vedere la codifica della singola istruzione. La codifica di un'istruzione è una sequenza di byte composta da due componenti distinte concatenate fra loro:

  • La prima parte della codifica di un’istruzione si chiama codice operativo e determina la tipologia dell'istruzione stessa. Per esempio l’addizione avrà un codice operativo, mentre la moltiplicazione ne avrà un altro.
  • La seconda parte invece è costituita dalla codifica degli operandi. Gli operandi sono gli elementi su cui l’istruzione opera. Per esempio, secondo lo schema appena descritto, l'istruzione 11 + 9 sarebbe codificata come segue:
  • l'operazione di somma sarebbe tradotta da un codice operativo che descrive l’operazione di somma.
  • la codifica dei due operandi, ovvero 11 e 9, seguirà il codice operativo nella codifica dell’istruzione dell’esempio. Per illustrare meglio questo metodo di codifica delle istruzioni, che viene adottato in tutti i processori, ricorreremo alla metafora di un cuoco che deve preparare una ricetta. In questa metafora:
  • il cuoco rappresenta il processore, ovvero il soggetto che deve svolgere le operazioni • la ricetta rappresenta il programma che si vuole eseguire.
  • ogni singolo passo della ricetta rappresenta un’istruzione.
  • gli ingredienti e gli strumenti utilizzati per preparare le ricette sono gli operandi.

Powerpoint - Il processore Il processore esegue continuamente istruzioni. Non appena viene acceso inizia ad eseguire la prima istruzione contenuta in una locazione di memoria nota e continua così fino allo spegnimento. Registri Per l'esecuzione delle istruzioni utilizza i registri. I registri sono piccole zone simili alla memoria, ma interne al processore, su cui il processore può scrivere e leggere i dati più velocemente rispetto a quanto farebbe sulla memoria. I registri vengono identificati da un nome. Il nome dei registri è diverso da processore a processore in base a caratteristiche interne (per esempio, i registri dei processori Intel si chiamano: EAX, EBX, etc.). Seguendo la metafora della cucina, i registri rappresentano il piano di lavoro sul cui gli ingredienti (i dati) vengono messi appena prima di essere elaborati: il cuoco, prima di iniziare a cucinare prende gli ingredienti di cui ha bisogno e li tiene a disposizione sul piano di lavoro. Allo stesso modo, il processore preleva dalla memoria i dati di cui ha bisogno e li mette nei registri. Non appena tutti i dati saranno sui registri, il processore potrà eseguire le istruzioni più velocemente. Il vantaggio di svolgere operazioni sui registri invece che sulla memoria è che i primi, essendo piccole celle di memoria fisicamente vicine al processore, sono molto più veloci perché permettono l'accesso ai dati senza dover accedere al bus di comunicazione. Esistono diversi tipi di registro:

  • Registri “general purpose”: non hanno utilizzi specifici e possono essere utilizzati per contenere dati generici
  • Registri che gestiscono gli accessi in memoria (MBR e MAR) • Registri di stato: mantengono informazioni relative allo stato del processore (per esempio la temperatura o quanto tempo è trascorso dall’accensione)
  • Il Program Counter (PC) e l'Instruction Register (IR) servono a gestire le istruzioni e verranno discussi in maggiore dettaglio più avanti. Unità del processore All'interno del processore, oltre ai registri, ci sono unità che svolgono funzioni specializzate.
  • la ALU (Arithmetic Logic Unit) permette di svolgere operazioni aritmetico-logiche (somma tra contenuti di registri, AND, OR, NOT…)
  • la FPU (Floating Point Unit) permette di svolgere operazioni con numeri in virgola mobile (che sono un modo per rappresentare numeri decimali)
  • la Control Unit decodifica le istruzioni e ne supervisiona l'esecuzione. Proseguendo con la metafora della cucina possiamo dire che la ALU e la FPU corrispondono ai vari strumenti a disposizione nella cucina. La Control Unit, invece, è il cuoco stesso. Fasi di esecuzione Vediamo adesso tutti i passi che vengono compiuti per eseguire le istruzioni. Nel processore è presente un registro speciale che si chiama Program Counter (PC) che contiene l'indirizzo di memoria da cui prelevare la prossima istruzione da eseguire. Per l'esecuzione di ogni istruzione, il processore compie le seguenti fasi.

Fase di fetch : Il processore preleva dall'indirizzo di memoria contenuto nel Program Counter, l'istruzione che dovrà essere eseguita e la scrive in un altro registro chiamato Istruction Register (IR). Fase di decode : Il processore esamina l'istruzione presente nell'IR, la decodifica e, sulla base della sua decodifica, ne calcola la lunghezza (in byte). Una volta calcolata la lunghezza dell'istruzione, il processore incrementa il PC del numero corrispondente alla lunghezza dell'istruzione. In questo modo, durante la prossima fase di fetch il Program Counter conterrà correttamente l'indirizzo di memoria dell'istruzione successiva. Fase di execute : Il processore preleva gli operandi che saranno necessari per l'esecuzione. Il processore esegue quindi l'istruzione. Una volta eseguita si torna alla prima fase (di fetch) in cui verrà prelevata la prossima istruzione. All'accensione, il valore del PC è pari a zero. Inizia quindi a prelevare la prima istruzione dall'indirizzo zero e così via come descritto in precedenza, fino al suo spegnimento. Modalità di codifica delle istruzioni Ci sono modalità diverse per codificare le istruzioni. Le due famiglie di codifica principali sono:

  1. Complex Instruction Set Computer (CISC)
  2. Reduced Instruction Set Computer (RISC) La codifica CISC è una codifica ricca: permette di avere a disposizione istruzioni complesse che possono fare più cose. La codifica RISC, invece, è più povera in quanto mette a disposizione poche elementari istruzioni. Per questo motivo, per eseguire uno stesso compito ci sarà bisogno di più istruzioni RISC rispetto al numero di istruzioni CISC necessarie. Inoltre, l'esecuzione di una singola istruzione RISC è più veloce rispetto all'esecuzione di una CISC. Per capire meglio, si paragonino i due alfabeti cinese e latino. Il primo, parallelamente a CISC, permette di tradurre più informazioni con un unico simbolo (ovvero l'istruzione); al contrario per tradurre nell'alfabeto latino la stessa informazione da un carattere cinese si deve usare più di un carattere. Per esempio, il singolo carattere cinese “ 成” ” viene trascritto con 5 caratteri latini con “cheng”. Inoltre, una stessa parola si esprime con un numero minore di caratteri cinesi, rispetto al numero di caratteri latini necessari. Per esempio, la parola “computer” composta da 8 caratteri, in cinese si scrive “ 电脑” ” quindi con 2 caratteri. Tipicamente, i processori all'interno di Desktop Computer e Personal Computer sono Intel e usano una codifica CISC. Diversamente, i processori degli smart-phone sono tipicamente processori ARM, che usano una codifica RISC delle istruzioni. Confronto fra CISC e RISC. Tipo di codifica CISC RISC Complessità signola istruzione alta bassa n. istruzioni possibili molte poche n. istruzioni per codificare stesso programma poche molte Velocità di esecuzione singola istruzione bassa alta La scelta di codifica delle istruzioni determina l'Instructure Set Architecture (ISA), che è il modo con cui sono codificate le istruzioni del processore. CISC e RISC sono due famiglie di ISA. La scelta dell'ISA è influenzata da motivi commerciali

Per località spaziale, invece, si intende che se una certa locazione di memoria è stata acceduta, allora anche locazioni di memoria limitrofe (ovvero con indirizzi vicini) saranno probabilmente accedute prossimamente. Per esempio, nella fase di fetch del codice, le istruzioni vengono prelevate in sequenza. Seguendo la metafora della cucina, lo sfruttamento della località temporale equivale a tenere a portata di mano in dispensa gli ingredienti (dati) utilizzati più frequentemente, evitando quindi di prelevarli dal supermercato (memoria) tutte le volte. Nelle architetture di calcolatori moderne, possono esistere livelli diversi di cache, a seconda della loro vicinanza al processore (che poi determina la velocità nell'accesso). Si parla di cache L1, L2, L3, etc. Al crescere dell'indice del livello della cache, le cache memory diventano sempre più grandi, lontane dalla CPU e lente. Quindi, la cache di livello L1 è la più vicina (al processore) e veloce, ma anche la più piccola. Abbiamo detto che l'obiettivo della cache (a prescindere dal suo livello) è quello di mantenere le informazioni che si potranno rivelare più utili per l'esecuzione del codice. Se il processore trova all'interno della cache i dati cercati avviene un cache hit e l'accesso al dato avviene in modo più rapido. Altrimenti, se i dati richiesti dal processore non si trovano nella cache avviene un cache miss e i dati devono essere prelevati dalla memoria. Evidentemente, l'accesso ai dati è più veloce se avviene un cache hit rispetto al tempo richiesto nel caso di un cache miss. Gerarchia di memoria Abbiamo visto che la cache serve a rendere disponibili i dati utilizzati più frequentemente. Questo principio viene applicato estensivamente a vari livelli dal più basso (e più vicino al processore) al più alto (e più lontano). Per descrivere questa organizzazione di tanti tipi diversi di memoria dalle più vicine alle più lontane si usa il termine di gerarchia di memoria. In Tabella, sono riportati alcuni valori tipici delle memorie coinvolte nel calcolo. Caratteristiche di vari tipi di memoria. Tipo di memoria access time capacità costo Registri 1 100 0. Cache 10 10 10 Main memory 50 4 x 10 0 Disco SSD 10 10 5 x 10 Disco HDD 10 10 3 x 10 USB key 10 10 5 x 10 Cloud storage 10 10 10 Oltre al tempo di accesso, capacità e costo, hanno un'importanza anche

  • il tempo di vita di una memoria, che indica per quanto tempo i dati possono rimanere memorizzati,
  • l'affidabilità, che indica il grado di errore che si può incontrare nel rileggere dalla memoria un dato scritto e la capacità di mantenere l'informazione immagazzinata anche in presenza di disturbi (per esempio, di origine elettromagnetica)

Architetture multi-processore Il processore, le memorie e tutti i circuiti integrati (integrated circuits, ICs, in inglese) sono circuiti elettronici realizzati su silicio. Attraverso a un processo simile alla stampa chiamato litografia, il silicio può diventare sia conduttore che isolante. Questo permette di disegnare circuiti integrati sul silicio. Inoltre, il silicio è disponibile in quantità abbondante e a basso prezzo. Fino al 2004 circa, l'aumento delle prestazioni della CPU è avvenuto aumentando la densità di integrazione: sulla stessa area di silicio si era in grado di disegnare un numero sempre maggiore di transistor e quindi di realizzare circuiti sempre più complessi e processori sempre più potenti. Lo sviluppo dei processori ha seguito una legge empirica detta Legge di Moore (Moore's law) che determina una crescita esponenziale del numero di transistor in un circuito integrato. Secondo Moore, il numero di transistor presenti in un circuito integrato raddoppia ogni 2 anni. Nel 2004, il nuovo processore della Intel (Intel Tejas) fu cancellato dallo sviluppo perché era fisicamente impossibile raffreddarlo. Difatti, raggiungeva una densità di calore pari al reattore di un missile. Dal 2004 in poi si è passati da un'architettura a singolo processore a una multi-processore. Oggi l'aumento delle prestazioni non avviene più migliorando la singola CPU, ma aggiungendo un numero sempre crescente di processori. In questo caso si parla di architetture multi-processore o multi-core.

UNITA’ 3 – SISTEMI OPERATIVI E RETI

Powerpoint - Il sistema operativo Il sistema operativo (abbreviato SO, oppure OS dall'Inglese Operating System, come in iOS oppure MacOS) offre l'accesso alle risorse hardware (HW) e software (SW) in un modo più semplice per il programmatore e una visione astratta dell'hardware. L'astrazione delle risorse offerta dal sistema operativo ha vantaggi e svantaggi. Vantaggi: A prescindere dall'hardware sottostante il programmatore non cambia il proprio programma, quindi le applicazioni non devono essere riprogrammate se cambia la dimensione di memoria del telefono (ad esempio se si passa a a un telefono con memoria maggiore): è compito del SO gestire la memoria. Le applicazioni usano la memoria attraverso il SO. Svantaggi: Il SO è comunque del software aggiuntivo che introduce una piccola perdita di prestazioni rispetto all'utilizzo dell'hardware direttamente da parte del programmatore. Questo accade perché il SO, fungendo da mediatore fra l'applicazione e le risorse hardware disponibili, richiede del tempo aggiuntivo per lo svolgimento delle operazioni richieste dal programma. In generale, i vantaggi sono superiori agli svantaggi in quasi tutti gli ambiti applicativi e quindi il SO è sempre presente. Esempi di sistema operativo sono: Linux, MacOS, Microsoft Windows. Le risorse gestite dal SO includono:

  • Bloccato (o in attesa): un processo si trova in stato bloccato quando, per poter proseguire, deve attendere il vericarsi un evento. Esempi di eventi in attesa dei quali un processo si può bloccare sono: la terminazione di un altro processo, la ricezione di un messaggio, la liberazione di una risorsa condivisa con altri processi, il trascorrere di una certa quantità di tempo. Si sottolinea che un processo non è in esecuzione sia quando è in stato pronto che quando è in stato bloccato. La differenza fra i due stati sta nel motivo che determina la mancata esecuzione
  • nel caso in cui il processo è pronto, è il SO che determina la sua mancata esecuzione;
  • nel caso in cui il processo è bloccato, è il processo stesso che determina la sua mancata esecuzione. Di seguito vengono illustrate tutte le transizioni fra stati di un processo (illustrate dalle frecce della figura “Stato dei processi”). Creazione di un processo I processi vengono creati da vari tipi di eventi:
  1. attraverso un'invocazione esplicita dell'utente. Questo avviene quando l'utente esegue un programma (mediante doppio click oppure invocandolo da terminale);
  2. all'accensione del computer (processi di start-up o inizializzazione). Per esempio, i server web quando vengono accesi creano vari processi che offrono servizi per l'utente che volesse visualizzare alcune pagine web;
  3. da un timer periodico. Esistono attività che vengono svolte periodicamente. Un esempio di processo attivato periodicamente e` quello di update manager che verifica (appunto periodicamente) la presenza di aggiornamenti;
  4. a seguito di eventi hardware. Per esempio, la ricezione di un particolare messaggio dalla scheda di rete oppure la rilevazione di malfunzionamenti potrebbero rendere necessaria la creazione di un processo per gestire tali eventi. Dopo la creazione, i processi vengono messi in stato pronto. Potranno poi passare in stato esecuzione se lo scheduler deciderà in tal senso. Schedulazione di un processo La schedulazione di un processo (ovvero l'assegnazione di una CPU al processo) viene decisa da un componente del SO detto process scheduler o più semplicemente scheduler (in italiano, schedulatore dei processi). Lo scheduler seleziona i processi da eseguire fra quelli pronti sulla base di alcune regole dette politiche di scheduling, che verranno discusse in seguito. La schedulazione di un processo determina quindi il passaggio del processo dallo stato pronto allo stato esecuzione. Il numero massimo di processi in esecuzione è pari al numero di CPU disponibili. Preemption di un processo Per permettere il progresso di tutti i processi, lo scheduler può decidere la preemption (o pre-rilascio) di un processo A in stato esecuzione, in favore di un altro processo B in stato pronto. A seguito della preemption, il processo A passerà dallo stato esecuzione allo stato pronto.

Quando una CPU passa dall'esecuzione di un processo A a quella di un altro processo B avviene un context switch ("cambio di contesto" in italiano) fra i due processi. Attesa di un evento (o bloccaggio di un processo) Durante l'esecuzione di un processo, può essere necessario che il processo si blocchi in attesa di un evento. Questo determina in passaggio dallo stato esecuzione allo stato bloccato del processo. Esempi di eventi che possono determinare il bloccaggio di un processo sono:

  • l'attesa della terminazione di un altro processo;
  • l'attesa della ricezione di un messaggio;
  • l'attesa che l'esecuzione di un altro processo arrivi ad un determinato punto;
  • l'attesa della liberazione di una risorsa condivisa con altri processi;
  • l'attesa che trascorra una certa quantità di tempo. Verica dell'evento (che ha bloccato un processo) Non appena l'evento che ha determinato il bloccaggio di un processo si verifica, il processo passa dallo stato bloccato allo stato pronto. Sarà poi lo scheduler a decidere se il processo debba passare in esecuzione oppure rimanere in stato pronto. Terminazione di un processo Quando il processo ha svolto la propria funzione termina e viene rimosso dal sistema. Esempio Per chiarire meglio i concetti esposti, si propone l'esempio di preparazione di un caffè in un bar. In questo esempio, il barista svolge il ruolo della CPU, ovvero il soggetto in grado di svolgere operazioni/istruzioni. Il processo che esaminiamo è la preparazione di un caffè e il relativo incasso. Vediamo nel dettaglio le varie fasi del processo che chiameremo caffè, la cui evoluzione temporale è riportata nella figura.
  1. All'inizio, il cliente entra al bar e ordina un caffè: avviene la creazione del processo che viene posto in stato pronto;
  2. Appena è il turno del cliente, il barista inizia la preparazione del caffè e lo consegna al cliente (passaggio da pronto a esecuzione);
  3. La prossima operazione richiede l'incasso del prezzo del caffè. Tale operazione, però, può avvenire soltanto dopo che il cliente ha terminato la propria consumazione. Il barista, quindi, pone il processo caffè da esecuzione a bloccato;
  4. Quando il cliente ha consumato il caffè, si verifica quindi l'evento atteso dal processo che passa dallo stato bloccato a pronto (adesso il processo può procedere);
  5. Se non ha altro da fare, il barista riceve il pagamento del caffè (nuova fase di esecuzione del processo caffè);
  6. Infine, una volta concluso il pagamento, il processo termina. In un certo senso, tutti noi siamo dei processori, abbiamo dei processi da svolgere, tali processi talvolta hanno la necessità di bloccarsi in attesa di eventi, etc.

Per illustrare meglio la schedulazione dei processi, utilizzeremo nuovamente della metafora della cucina. In questa metafora, rappresentiamo il processore con un cuoco capace di svolgere le tipiche operazioni che si compiono in cucina. I processi da svolgere sono, come visto negli esempi passati, le ricette. Nell’esempio che verrà illustrato, ipotizzeremo di dover eseguire 2 ricette: un pesce sotto sale e delle patate al forno. Si sottolinea entrambi i due processi richiedono l’utilizzo della risorsa condivisa “forno”. Vedremo quindi come verrà utilizzata tale risorsa. Andiamo quindi a illustrare una possibile schedulazione di questi due processi “pesce” e “patate” il cui stato verrà riportato nel disegno in basso. In questo esempio il tempo scorre da sinistra verso destra per entrambi i processi. Inizialmente, viene ordinato del pesce. Siccome il cuoco/CPU è disponibile, inizia immediatamente la preparazione del pesce. Secondo la terminologia dei sistemi operativisi dice che il processo “pesce” passa in stato esecuzione. Mentre il cuoco/CPU sta preparando il pesce, vengono ordinate delle patate al forno. Il nuovo processo “patate” viene quindi creato. Siccome il cuoco non è disponibile, il processo “patate” non potrà eseguire, rimanendo in stato pronto. Dunque abbiamo il processo “pesce” in esecuzione, mentre il processo “patate” appena creato entra in stato pronto. Il cuoco/CPU conclude la preparazione della teglia con il pesce e lo mette in forno. Dovrà attendere 30 minuti per la cottura. Il processo “pesce” è bloccato in attesa della fine della cottura Il cuoco adesso è libero e il processo patate può passare dallo stato pronto allo stato esecuzione. Nella situazione rappresentata adesso, il cuoco/CPU ha terminato la preparazione della teglia con le patate. Siccome il forno però è occupato, il processo “patate” passa in stato bloccato in attesa della liberazione del forno. Quando la cottura del pesce termina, la risorsa condivisa “forno” si libera. Il cuoco esegue quindi brevemente il processo “patate” infornando la teglia di patate. Dopo aver messo le patate nel forno, il cuoco/CPU riprende l’esecuzione del pesce e il processo “patate” è bloccato in attesa che trascorra il tempo di cottura. La cottura delle patate è conclusa. Si libera la risorsa forno Il processo “patate” e` quindi pronto per l’esecuzione. Potrà effettivamente eseguire quando il “pesce” sarà terminato La fase finale della preparazione del pesce sotto sale termina. Il cuoco/CPU può quindi riprendere uno dei processi in stato pronti presenti. Nell’esempio, è presente soltanto il processo di preparazione delle patate al forno che viene quindi messo in esecuzione. Infine, anche il processo della ricetta per la preparazione delle patate al forno può terminare non appena il cuoco/CPU ha concluso la preparazione del pesce. Proviamo quindi a tirare delle conclusioni sulla base degli esempi appena visti. Innanzitutto il numero dei processi in esecuzione non può superare il numero delle CPU disponibili. Abbiamo inoltre visto che sono presenti due stati in cui un processo non viene eseguito: lo stato pronto e il processo bloccato. Proviamo a dire due parole in più sulla differenza tra questi due stati. Quando un processo è in stato pronto, vuol dire che lui non può eseguire perché non c’è alcuna CPU disponibile per l’esecuzione, il processo avrebbe la possibilità di eseguire, ma le CPU non sono disponibili. Diversamente, quando il processo è in stato bloccato, è il processo stesso che non è disponibile per l’esecuzione; si ricordi per esempio il caso delle patate che dovevano essere inserite in forno, quando il forno non era disponibile: in quel caso il processo patate rimaneva boccato, perché non era fisicamente possibile portarlo avanti anche se il cuoco avesse voluto dedicare il proprio tempo alle patate.

In generale quando ci sono più processi pronti da eseguire, il processo che dovrà eseguire fra i vari processi pronti è scelto da un algoritmo che si chiama algoritmo di scheduling, in inglese scheduling algorithm. Powerpoint - La comunicazione e i suoi protocolli Aspetti semiotici della comunicazione Le possibilità di comunicazione consentite dalle tecnologie informatiche sono cresciute oltre ogni aspettativa negli anni recenti, e continuano a crescere assumendo nuove forme. Solo 25 anni fa sembrava miracoloso potere scrivere un messaggio (in puro testo) inviandolo attraverso un computer collegato in rete, ricevendolo in tempo quasi reale in qualsiasi parte del pianeta. Ora questa possibilità è diventata un luogo comune, e non solo si spediscono immagini e testi di qualsiasi livello di complessità grafica, ma ci si scambia file audio, film, denaro e contratti. È utile inquadrare questi fenomeni comunicativi in un ambito concettuale generale, non solo per mettere ordine e delimitarne l’ambito, ma anche per correggere l’impressione che si tratti di meri aspetti tecnologici. Dato che quello che viene scambiato, dal punto di vista di chi usa le tecnologie, sono segni, cioè cose che hanno significato nell’ambito di qualche attività umana, la semiotica potrebbe fornire un lessico utile a definire questo ambito concettuale. La semiotica è una disciplina molto antica che ha acquistato vita indipendente grazie a contributi di filosofi e logici attraverso i secoli, ma in questo contesto siamo solo interessati a quella minima parte della terminologia semiotica che ci permette di parlare delle tecnologie ICT come di tecnologie per la comunicazione (per una vasta panoramica sulla comunicazione). Un processo di comunicazione ha inizio con la produzione di segni da parte di un mittente, che sotto forma di messaggi raggiungono un destinatario muovendosi su un canale. Questa descrizione estremamente sintetica di un processo comunicativo deve essere letta in questo ambito interpretando i termini mittente, destinatario e canale nel senso più ampio possibile. Non è nemmeno necessario che mittente e destinatario siano persone (potrebbero essere insetti, per esempio; la disciplina della zoosemiotica studia appunto i processi di comunicazione animale), o che la produzione di messaggi sia intenzionale (le tracce lasciate da un ladro e interpretate da un investigatore normalmente non lo sono), e il canale potrebbe permettere ai messaggi di muoversi solo attraverso il tempo, non attraverso lo spazio (come una mappa sepolta per secoli). Questo modello del processo comunicativo è una semplificazione di quello utilizzato nel lavoro pionieristico di Claude Shannon e Warren Weaver [5] sulla teoria della comunicazione, e può essere descritto graficamente dallo schema: trascurando, in particolare, una possibile fonte di rumore sul canale che è molto rilevante nel campo delle comunicazioni elettriche. Ci chiediamo ora: che cosa è che viaggia realmente sul canale? L’abbiamo chiamato messaggio, ma un messaggio potrebbe essere interpretato in modi diversi da mittente e destinatario anche senza essere alterato dal suo passaggio attraverso il canale. Quindi quello che effettivamente il canale contiene è un segnale fisico, in cui il messaggio è codificato. Così, prima di entrare nel canale, il messaggio viene codificato sotto forma di segnale dal lato del mittente, mentre dal lato del destinatario viene decodificato per estrarre il messaggio originale.