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


Informatica, facoltà psicologia, Appunti di Elementi di Informatica

Riassunto del corso di informatica

Tipologia: Appunti

2024/2025

Caricato il 13/03/2026

GinevraBelli
GinevraBelli 🇮🇹

5

(3)

28 documenti

1 / 155

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
1
Informatica
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
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Anteprima parziale del testo

Scarica Informatica, facoltà psicologia e più Appunti in PDF di Elementi di Informatica solo su Docsity!

Informatica

La codifica dell’informazione. La codifica dell’informazione fa parte del macro-argomento dell’architettura di un elaboratore. Il termine “informatica” deriva dalla crasi di due parole: la radice di lunghezza 6 di informazione + il suffisso di lunghezza 5 di automatica; per cui informatica = inform azione + autom atica. Più nel dettaglio, l’informatica è quella disciplina che si occupa di far elaborare l’informazione a delle macchine, per cui all’equazione precedente può essere aggiunto che: informatica = informazione + automatica = elaborazione o trattamento + automatico + dell’informazione. All’interno del termine “informatica” vengono quindi individuate sostanzialmente tre parole chiavi:

  1. Elaborazione → Viene suddivisa in tre sotto parti: a. Elaborazione dei sistemi operativi = software b. Elaborazione dei dati = utilizzo di software predisposto da altri (es. fogli elettronici) c. Elaborazione dei programmi
  2. Automatica → significa una macchina, in poche parole analizzando questo termine cercheremo di capire in che modo funziona una macchina e quali sono i suoi componenti principali.
  3. Informazione Informazione: L’informazione è accompagnata sia da un dato sia dall’insieme delle istruzioni che io posso effettuare sul dato, per cui ad una stessa scrittura possono essere associate delle istruzioni differenti. Una macchina, ovviamente, non è consapevole del significato dell’informazione, che deriva da ciò che decidiamo noi. Noi vedremo la codifica dei:
    • Numeri naturali, detti anche numeri semplici → numeri privi di segno
    • Caratteri Ho bisogno di rappresentare l’informazione all’interno della macchina in quanto, se da un punto di vista logico quest’ultima non è altro che un dispositivo che serve per eseguire delle istruzioni semplici messe una di seguito all’altra in modo da risolvere i problemi [do un input per ottenere un output, ovvero la soluzione del problema], da un punto di vista fisico è costituita da una serie di dispositivi, o meglio componenti elettroniche, che concepiscono solo ed esclusivamente due condizioni opposte, ossia il passaggio o meno della corrente elettrica, e che sono rappresentate con “0” [assenza di voltaggio, chiuso] e con “1” [presenza di voltaggio, aperto]. I computer concepiscono solamente queste due condizioni in quanto sono costituite, sostanzialmente, da milioni di transistor che sono integrati all’interno di una placca di silicio per cui il processore, che è il cervello della macchina, è fatto da milioni di interruttori. Nel caso della macchina l’ interruttore (il transistor) non viene azionato manualmente ma elettricamente, per cui il ruolo della mano viene svolto da un voltaggio. Tutto ciò comporta che per rappresentare un’informazione all’interno di una macchina, devo esprimerla necessariamente come delle sequenze di “0” e di “1”. Da un punto di vista logico, lo “0” e l’“1” prendono il nome di bit ( bi nary digi t , ovvero cifra binaria) e possono essere considerati come un quadratino di foglio riempito esclusivamente da uno dei due stai dei circuiti elettronici. In conclusione, tutta l’informazione con la quale abbiamo a che fare ogni giorno, deve essere tradotta in sequenze di 0 e di 1. Una stringa è una sequenza di caratteri → es. Giulia = stringa composta da 6 caratteri Poiché un bit memorizza solamente due informazioni, per digitalizzare tutta la quantità di informazione è necessario mettere fra di loro i bit, in modo da formare i suoi multipli; ad esempio il byte è un raggruppamento di 8 bit, per cui è in grado di codificare , digitalizzare , 2^8 (256) informazioni. 1 bit 2 informazioni

Processo di codifica: prendo il carattere e guardo a che cosa è associato Esempio → Per codificare “B - spazio- r” [stringa di lunghezza 3 perché conta anche lo spazio, che ha una codifica propria così come tutti gli altri caratteri] ottengo = 1000010 0100000 1110010 Processo di decodifica: Per essere una codifica ASCII, la sequenza di bit deve essere necessariamente un multiplo di 7. In questo caso compio il processo opposto a quello della codifica. Esempio → Per decodificare 1 4 bit = 11111011000101 devo inizialmente suddividerla in gruppi di 7 e successivamente, utilizzando la tabella, devo guardare a quale carattere è associata la sequenza. Verifico quindi che la prima sequenza “1111101” corrisponde a “}”, mentre la seconda sequenza “1000101” corrisponde a “E” Osservazione sulla tabella di codifica ASCII:

  • All’interno della tabella non troviamo numeri, bensì caratteri con un aspetto numerico, per cui non possiamo compierci operazioni di alcun tipo.
  • I caratteri con un aspetto numerico sono situati tutti sulla stessa riga, ovvero passando da un numero all’altro seguendo un ordine crescente notiamo che cresce solamente il bit meno significativo, cioè quello a destra. La tabella è stata strutturata in questo modo per rendere semplice il passaggio dalla codifica del carattere alla codifica del numero, e viceversa, parliamo quindi di una conversione automatica di tipo. Esempio: codifica del carattere 1 = 0110001; codifica del carattere 0 = 0110000. Sottraggo le due sequenze [0110001 - 0110000] e ottengo la codifica del numero 1 [0000001].
  • La distanza tra una lettera maiuscola e la sua lettera minuscola è identica per tutte le lettere. Ciò permette la correzione automatica fra lettera minuscola e lettera maiuscola quando andiamo a capo.
  • Facendo una distinzione fra le lettere maiuscole e le lettere minuscole, osservo che le lettere maiuscole hanno una codifica più piccola per cui compiendo un ordinamento crescente precedono le lettere minuscole. Esempio → “ a nna” con la “a” minuscola precede “ A nna” con la “A” maiuscola
  • Lo spazio è il carattere che ha la codifica più piccola rispetto a tutti gli altri. Esempio → Compiendo un ordinamento crescente osservo che “Bianchi zaira” precede “Bianchini bianca” Caratteri di controllo video non stampabili: categoria di caratteri codificati che stanno prima dello spazio. [esempio = l’invio]. Essendo tutti caratteri possono essere sostituiti e modificati automaticamente. Quanti bit sono necessari per codificare “giulia” in ASCII? 67 = 42 bit Codifica ASCII esteso: Per poter codificare una quantità maggiore di caratteri, la macchina deve aumentare il numero di bit ; proprio per questo motivo molto presto è stata inventata la codifica dell’ASCII esteso che prevede 8 bit e permette quindi di codificare 256 informazioni. Poiché il passaggio doveva garantire che tutte le codifiche precedenti andassero bene anche per quella nuova, il bit viene aggiunto all’inizio della sequenza e corrisponde allo “0”. Esempio → Codifica/decodifica della parola cane. N.B: in questo caso devo accertarmi che la sequenza di bit sia un multiplo di 8 01000011 01000001 01001110 01000101 c a N e Quanti bit sono necessari per codificare “giulia” in ASCII esteso? 68 = 48 bit

Codifica UNICODE: codifica che utilizziamo oggi. Si tratta di un organismo internazionale che lavora in continuità per codificare i caratteri. Attualmente, a livello di caratteri standard, l’UNICODE viene effettuata su 16 bit, ovvero 2 byte, per cui ho 2^16 possibili codifiche di carattere che possono inserire all’interno della macchina. In conclusione, l’UNICODE non smette mai di cercare di standardizzare tutta la nuova informazione che è necessaria. Quanti bit sono necessari per codificare “giulia” in UNICODE? 6*16 = 96 bit Per quanto riguarda i numeri non è presente una tabella che fa corrispondere un simbolo ad una sequenza di bit; per cui dato un numero decimale (naturale senza segno) è possibile passare al corrispondente numero binario (espresso esclusivamente con 0 e 1) attraverso una serie di divisioni successive per 2, nelle quali si considerano tutti i resti. Il primo resto ottenuto è il bit meno significativo della codifica binaria (quello posto all’estrema destra della sequenza). Esempio: 10 = 1010 10 / 2 5 Resto 0 5 / 2 2 Resto 1 2 / 2 1 Resto 0 1 /2 0 Resto 1 La sequenza di bit che viene disposta dalla macchina è fissa, per cui, ad esempio, se la mia macchina lascia uno spazio fisso di 1 byte, il numero “10” verrà codificato come 00001010. In poche parole vado ad aggiungere gli “0” negli spazi a sinistra che mi rimangono liberi. Motivo per cui utilizziamo questo metodo: 111010 = 1 x 10^3 + 1 x 10^2 + 1 x 10^1 + 0 x 10^0 → Codifica nel nostro sistema di numerazione di 1110 Il nostro sistema di numerazione è decimale, ha quindi dieci cifre che vanno da 0 a 9, mentre la macchina ha un sistema di numerazione binario, per cui ottengo che: 1110 = c 3 x 2^3 + c 2 x 2^2 + c 1 x 2 + c 0 x 2^0. Il resto della divisione intera per 2 è C^0 , mentre in quoziente della divisione intera per 2 è c 3 x 2^2 + c 2 x 2^1 + c 1 x 2^0. Per questo motivo, nella divisione, il primo resto che io ottengo è il bit meno significativo. Decodifica: Data una stringa binaria è possibile ottenere il corrispondente numero decimale moltiplicando ogni bit della stringa per la potenza di 2 corrispondente all’indice della cifra considerata e sommando tutti i risultati. Spiegazione → data una sequenza di simboli “0” e “1”, ovvero di bit, devo ottenere il corrispondente numero espresso nel nostro sistema di numerazione. Codifica del numero 137 = 10001001 Codifica del numero 18 = 10010

Computer]; il suo peso equivaleva a 30 tonnellate ed occupava uno spazio di 180 m^2 , inoltre la prima volta che venne acceso lasciò completamente al buio la cittadina accanto a dove era fisicamente situato perché dissipava una quantità di calore molto grande che assorbiva tutta l’energia possibile. I calcolatori di oggi si basano quindi sui risultati ottenuti da Von Neumann, ciò significa che pur avendo fatto dei grandi sviluppi, il modello concettuale è rimasto invariato. Prima di questi studi, per eseguire dei programmi differenti era necessario intervenire a livello fisico (hardware) sulla macchina: delle ruote dentate, che rappresentavano gli input, venivano impostate per stabilire, ad esempio, quali numeri dovessero essere sommati. Se invece che sommare i numeri volevo sottrarli o compiervi un’altra operazione era necessario intervenire manualmente per modificare questi dispositivi. L’idea quindi di Von Neumann è stata quella di far risiedere in una memoria (che prende il nome di memoria centrale o RAM ) i programmi che l’utente decide di far eseguire, ovvero il software, e i dati sui quali questi software lavorano, senza il bisogno di apportare alcun tipo di cambiamento fisico per far seguire un programma; progetta quindi nel 1947 il primo calcolatore con programmi memorizzabili anziché modificati mediate cavi e interruttori. Il suo modello prevede 5 componenti principali:

  1. Unità centrale di elaborazione, chiamata anche processore, microprocessore o CPU [Central Processing Unit]: esegue istruzioni per l’elaborazione dei dati e svolge anche funzioni di controllo.
  2. Memoria Centrale o RAM [Random Access Memory]: memorizza e fornisce l’accesso a dati e programmi in esecuzione
  3. Memoria di Massa: memorizza permanentemente i dati ed i programmi e prevede accessi in lettura e scrittura. Spiegazione → Sono memorie che servono per memorizzare grandi quantità di dati. Esempi di memoria di massa sono: hard disk, chiavetta, SSD, CD, DVD …
  4. Dispositivi di Ingresso-Uscita (I/O): componenti di collegamento con le periferiche del calcolatore Esempi → la tastiera, il mouse, gli schermi touch, i microfoni …
  5. Dispositivi di collegamento (BUS): svolgono funzioni di trasferimento di dati, indirizzi e di informazioni di controllo tra le varie componenti funzionali. **Analisi e spiegazione delle varie componenti principali del modello di Von Neumann:
  1. Unità centrale di elaborazione, chiamata anche processore, microprocessore o CPU [Central Processing Unit]** Spiegazione → Dobbiamo immaginare la CPU come se fosse idealmente divisa in due parti:
  • Data path: Contiene una serie di circuiti che prendono il nome di ALU [Arithmetic and Logic Unit = unità aritmetico-logica], e che avvalendosi di opportune memorie svolgono i conti. Si occupa dell’effettiva elaborazione dei contenuti nei registri generali , ovvero memorie veloci ma molto piccole, composte quindi da pochi bit, che servono di supporto alla ALU per svolgere le operazioni. Caratteristiche della ALU:
  • legge i dati contenuti all'interno dei registri generali, esegue le operazioni e memorizza il risultato in uno dei registri generali.
  • Vi sono circuiti in grado di eseguire la somma di due numeri binari contenuti in due registri e di depositare il risultato in un registro e circuiti in grado di eseguire il confronto tra due numeri. N.B: la ALU fa somme solamente di due numeri, per cui se vuole sommare, ad esempio, 6 numeri deve sommare i primi due, dopodiché al risultato somma il terzo numero, successivamente al risultato ottenuto somma il quarto numero, ecc. … Questo perché la ALU esegue operazioni elementari.
  • Sempre più spesso alla ALU si affianca un processore specializzato per effettuare operazioni matematiche particolari, denominato il coprocessore matematico. → Di coprocessori ne esistono tanti; quello che in particolare aiuta a fare i conti è questo. Ad oggi, quasi tutti i dispositivi, anche quelli di ingresso e di uscita, sono dotati di processori propri perché se dovesse essere solo ed

esclusivamente il processore principale a gestire tutte le operazioni che si svolgono all’interno di un calcolatore, la macchina sarebbe molto lenta. In questo modo invece, il processore principale invia le istruzioni al processore aiutante, in modo da svincolarsi dal seguire le informazioni. Le schede grafiche sono tutte dotate di un proprio processore in modo che il processo principale dice al suo aiutante cosa deve mostrare, ma tutte le informazioni vengono svolte dal processore contenuto nella scheda grafica. I vari processori “aiutanti” sono ovviamente delegati e specializzati, per cui sanno svolgere bene una particolare operazione [es. il processore all’interno della stampante sa gestire la stampa, il processore della scheda grafica sa rendere bene al video le immagini].

  • CU (Control Unit = Unità di controllo): coordina le attività di tutto il resto della popolazione collocata all’interno del processore, dando gli ordini alla ALU. Esegue le operazioni finalizzate al trasferimento dei dati o al controllo dell’esecuzione dei programmi, che sono: a) Coordinare le operazioni di tutto il processore → il processore svolge la sua attività in modo ciclico: ad ogni ciclo corrisponde l’esecuzione di una istruzione macchina, ovvero diverse attività controllate e coordinate dalla CU chiamate fetch-decode-execute: ❖ Si legge, ovvero si carica, dalla memoria principale la prossima istruzione da eseguire ( fecht ) ❖ Si decodifica l’istruzione e si caricano eventuali dati dalla memoria ( decode ) ❖ Si esegue l’istruzione ( execute ) ❖ Si memorizza un eventuale risultato (informazione elaborata) in memoria b) Regolare il flusso dei dati ed indicare quali registri devono essere collegati agli ingressi e all’uscita della ALU c) Inviare alla ALU il codice dell’operazione da eseguire → Dice alla ALU quale operazioni eseguire sui dati che precedentemente gli ha comunicato ed indica il posto dove collocare il risultato d) Ricevere indicazioni sull’esito dell’operazione appena eseguita dalla ALU e gestirla opportunamente → ricede dei feedback sull’esito dell’operazioni Esempio: La CU ordina alla ALU di prendere il 6 ed il 7, successivamente impartisce l’ordine da svolgere ed indica il posto nel quale deve essere collocato il dato.

le operazioni più velocemente rispetto a quelli con frequenza minore. Ogni macchina ha una frequenza di clock. Overclockare → truccare il processore in modo da costringerlo, sfruttando i margini a disposizione, a emettere dei segnali più serrati in modo da eseguire le operazioni più velocemente. Tuttavia, se il processore viene modificato esageratamente si brucia perché non è fatto per mandare queste correnti a giro così rapidamente. Ad oggi, per la frequenza dei clock, andiamo nell’ordine dei Gigahertz. Per l’acquisto di una macchina, oltre a tener di conto della frequenza dei clock è utile considerare anche la dimensione dei registri e dei bus dati: prendendo il processo spiegato prima, nel quale le istruzioni per essere eseguite devono andare dalla RAM al processore che mette in moto tutti gli agenti necessari per l’esecuzione; è possibile descrivere la differenza fra un processore avente dei registri con 64 bit ed un processore avente dei registri con 32 bit → chiaramente nel secondo caso, poiché il processore ha una capienza più limitata, l’informazione proveniente dalla RAM deve essere spezzata per cui per svolgere l’esecuzione occorre il doppio del tempo. Per quanto riguarda i bus, bisogna fare attenzione che quest’ultimi abbiamo dimensioni uguali a quelle del registro, perché altrimenti le operazioni della nostra macchina sono comunque rallentate. Allo stesso modo è inutile avere bus o registri con dimensioni grandi se poi i primi sono lenti, tenendo di conto che la loro frequenza si misura in milioni di trasferimenti al secondo. Le memorie. Le memorie sono classificate in base a due elementi.

  • La funzione: le memorie hanno due scopi principali, il primo è quello di essere di supporto alla CPU mentre il secondo è quello di memorizzare grandi quantità di dati e istruzioni, fornendoli il più rapidamente possibile alla CPU. Parliamo della memoria centrale, ovvero la RAM → memoria di tipo elettronico che funziona con il passaggio di corrente e che è molto veloci ma anche molto più costosa rispetto alle memorie di massa. Banchi di RAM : sono gli elementi fisici che rappresentano la memoria elettrica. Sono costituiti dai pin, chiamati anche piedini, (la fascia dorata in fondo) che sono inseriti in appositi slot e che hanno lo scopo di recuperare i bus in modo da scambiare le informazioni con tutto il resto delle componenti. La RAM ha il difetto di essere una memoria volatile (così come la cache), per cui necessita di essere alimentata in continuazione in modo elettrico perché al momento in cui la macchina viene spenta, il contenuto al suo interno può essere considerato vuoto → quando il calcolatore è spento nella RAM non c’è niente.
  • L’Archivio: deve garantire di archiviare dati e programmi garantendone la conservazione e la reperibilità anche dopo elevanti periodi di tempo [Un disco rigido, basato sui principi del magnetismo, viene garantito nell’ordine delle decine di anni; i CD sono garantiti nell’ordine delle centinaia di anni, mentre le chiavette non vengono garantite sulla base di un arco temporale bensì considerando il suo utilizzo, per cui più viene utilizzata e più viene degradata]. Stiamo parlando delle classiche memorie di massa che si basano su principi magnetici (leggi hard disk, leggi i nastri magnetici), ottici (leggi CD, leggi DVD) ed elettronici (leggi SSD, leggi chiavetta), che non sono volatili, per cui mantengono i dati anche in assenza di alimentazione elettrica, che sono più economiche rispetto alla memoria centrale ma che, allo stesso tempo, sono più lente rispetto a quest’ultima (per questo motivo le istruzioni che devono essere eseguite risiedono

proprio nella RAM). Per valutare la velocità di funzionamento delle memorie di massa ci sono tanti parametri, fra i quali: ➢ Access time (tempo di accesso): intervallo di tempo tra il momento in cui una richiesta di accesso dalla CPU arriva alla memoria e l’istante in cui la memoria termina il proprio compito. ➢ Tempo di ciclo: tempo di accesso + tempo che deve trascorrere prima che possa iniziare un successivo accesso alla memoria. Esempio: Quando leggiamo un dato dalla RAM compiamo una operazione distruttiva, per cui prima di poter accedere nuovamente alla memoria quest’ultima deve riscostruirsi l’informazione precedentemente letta, ovvero deve ristabilire tutta una serie di condizioni prima di poter essere nuovamente operativa. ➢ Transfer rate: quantità di dati trasferiti nell’unità di tempo → velocità con cui i dati vengono trasferiti. ➢ Capacità : la capacità di una memoria la misuriamo con i multipli del byte ed indica la quantità di informazione che può contenere. ➢ Costo per bit : quanto costa produrre un bit. ➢ Modalità di accesso: Può essere diretta, sequenziale, mista ed associativa.

2. Memoria Centrale o RAM [Random Access Memory = Memoria ad accesso casuale] Spiegazione → Parliamo di memoria ad accesso casuale , o ad accesso diretto , in quanto la quantità di tempo che impiego per recuperare un dato è indipendente dalla posizione che quest’ultimo occupa all’interno della memoria. Quasi tutte le memorie elettroniche hanno un accesso diretto. Nei vecchi registratori, quando volevamo ascoltare un brano facevamo scorrere il nastro fino alla posizione in cui si trovava la canzone desiderata, per cui sostanzialmente era necessario leggere, o meglio scandire sequenzialmente, tutta l’informazione che precedeva quella richiesta; è questo il caso di una memoria ad accesso sequenziale nella quale l’accesso dell’informazione non è diretto poiché il tempo è dipendente alla sua posizione. Esiste infine una memoria ad accesso misto (dischi in vinile) all’informazione, ovvero in parte diretto ed in parte sequenziale. Il compito della RAM è quello di mantenere le istruzioni oggetto di esecuzione e i dati sui quali queste operano. La RAM è volatile, riscrivibile (per cui può essere sovrascritta l’informazione), veloce, meno capace, costosa e ad accesso diretto; inoltre è costituita da una successione di elementi bistabili raggruppati in celle di uguale lunghezza, ciascuna dotata di un indirizzo univoco (posizione all’interno della sequenza). È quindi importante distinguere il contenuto della memoria dall’indirizzo di quest’ultimo. Poiché la CPU è molto più veloce della RAM, è presente un “cuscinetto” fra la RAM, contenente le istruzioni ed i dati, ed il processore, colui che esegue le istruzioni sui dati, che corrisponde ad una ulteriore memoria denominata cache , più veloce della RAM. Non possiamo costruire le RAM come le cache innanzitutto per una questione di costo, dopodiché per il modo in cui sono fatte: le cache sono meno dense delle RAM, contengono quindi un numero minore di bit; ciò comporta che per renderle maggiormente capienti bisognerebbe aumentarne le dimensioni fisiche. Martedì 12 Marzo Nello schema di funzionamento di un calcolatore, secondo il modello di Von Neumann, il processore continuamente preleva informazioni ed istruzioni dalla memoria centrale e scrive in essa informazioni. La memoria centrale, il bus ed il processore lavorano a velocità diverse (il processore è quello più veloce) e poiché la velocità complessiva del sistema è determinata dal componente più lento per accelerare questa interazione si impiega una memoria ad alta velocità localizzata tra il processore e memoria centrale, e chiamata cache. Un processore attuale ha una frequenza dell’ordine di qualche giga Hertz: un processore con una frequenza di 1 giga Hertz esegue una operazione in un miliardesimo di secondo Quando si esegue un programma, ovviamente le istruzioni che devono essere eseguite devono stare nei registri dell’unità di controllo che li decodifica, li capisce e che mette in atto tutti gli attori. Per prima cosa, l’istruzione da eseguire viene ricercata nella cache, se vi è presente viene fatta avanzare e entra nei registri dei processori

  1. Da un punto di vista statistico il comportamento medio dell’utilizzo dei programmi è facile da prevedere: tipicamente le istruzioni di un programma che vengono eseguite si rivolgono al 10% di tutte le istruzioni che compongono un programma; ciò vuol dire che utilizzando un programma noi facciamo sempre le stesse cose.
  2. Per il principio che prende il nome di località temporale nell’esecuzione dei programmi → se un’istruzione fa riferimento ad un dato o ad un’altra informazione, è molto probabile che nell’immediato futuro farà riferimento nuovamente alla stessa informazione; per cui se attualmente il processore necessita di un particolare dato, molto probabilmente nell’immediato dovrà mandare in esecuzione la stessa informazione (cicli di MahtLab). Questo principio fa in modo che la politica di sostituzione sia quella che prende nome di LRU [last Recently Used]: si butta fuori quello che da più tempo non viene utilizzato.
  3. Per il principio di località spaziale → interviene nel momento in cui lanciamo un programma. Per far eseguire un programma sarebbe sufficiente trasferire dall’Hard disk alla RAM solamente la prima istruzione. Molto probabilmente però, l’utente dopo aver mandato in esecuzione la prima istruzione, manderebbe in esecuzione anche la seconda, dopodiché la terza e così via… ciò comporterebbe una serie di trasferimenti che di per sé sono lenti. Proprio per questo motivo, il principio di località spaziale permette di trasferire, all’interno di questa gerarchia di memorie, le informazioni a blocchi; se così non fosse le macchine non sarebbero così tanto veloci come noi le vediamo. Poiché quando il computer è spento nella RAM non c’è niente ma per far eseguire un programma dal processore devono essere collocati nella RAM, dal momento in cui accendo la macchina al momento in cui arriva l’interfaccia utente del sistema operativo avviene la fase di bootstrap. Nelle macchine digitali sono presenti le ROM [ Read Only Memory ]: il loro nome storico deriva dal fatto che inizialmente erano memorie prodotte per stampaggio che di conseguenza potevano essere scritte solo dal costruttore della macchina, dopodiché potevano essere solamente lette. Ad oggi non si parla più di memorie ROM come memorie non riscrivibil bensì come memorie elettroniche flash (esempio: varie memorie elettroniche di massa). Le memorie ROM appartengono alla categoria firmware , un’intersezione fra il software e l’hardware, e all’interno hanno delle istruzioni, per cui quando la macchina viene accesa questo piccolo programma contenuto nelle ROM viene eseguito e compie una diagnostica dei vari dispositivi collegati (fase di bootstrap):
  • identifica il processore
  • controlla la RAM e verifica se funziona
  • esamina l’hard disk e le periferiche collegate effettuando test diagnostici di base che controllano lo stato delle periferiche stesse
  • legge il settore dell’hard disk in cui sono contenute le istruzioni per l’avvio del sistema (carica nella memoria principale la parte principale del sistema operativo (kernel)) → va a prelevare il pezzo principale del sistema operativo, individuando la sua posizione del disco fisso, infilandolo successivamente nella RAM. (Tutti i software, sistema operativo compreso, risiedono permanentemente sul disco fisso) Le periferiche. Generalmente le memorie di massa vengono fatte rientrare nella categoria delle periferiche , nome che indica tutto ciò che si trova alla periferia del calcolatore, che è costituito dal processore, dalla RAM ecc. … Tutte le periferiche sono collegate alla macchina attraverso un’interfaccia, che non è quella utente, bensì quella della periferica che consiste in circuiti che fanno da tramite tra il calcolatore (processore) e la periferica stessa; per cui il loro compito è di fungere da una sorta di traduttore per tradurre i segnali interni del processore in un linguaggio comprensibile dalla periferica in modo da far funzionare quest’ultima in modo corretto. [sono dei circuiti]. Poiché appunto queste periferiche sono collegate al calcolatore attraverso un’interfaccia connessa al bus di sistema, devono recuperare le autostrade dell’informazione; inoltre queste interfacce specifiche sono realizzate tramite una scheda inserita nel case del calcolatore e connessa al bus mediante opportuni connettori e sono collegate con le periferiche attraverso porte di ingresso/uscita predisposte sulla scheda stessa e accessibili dall’esterno.

Costruire una macchina non è molto diverso nel fare le lego, in quanto sostanzialmente si tratta di infilare elementi all’interno di una superficie che prende il nome di scheda madre proprio perché alloggia le componenti della macchina. Quando parliamo di memoria espandibile significa che uno, o più, degli alloggiamenti della RAM è vuoto. Ogni periferica è dotata di questa scheda che implementa l’interfaccia della periferica e serve per riuscire a colloquiare con il processore. Se all’interno di una macchina ci fosse un solo BUS condiviso da tutti gli elementi (il video, la stampante, la tastiera ecc. … ) le informazioni non potrebbero essere inviate contemporaneamente e sarebbero necessari dei meccanismi di arbitraggio; per questo motivo nelle macchine moderne sono presenti dei BUS dedicati ad una sola periferica. Sempre più le periferiche sono dotate di processori, sempre più hanno dei BUS propri e dedicati. Unica cosa importante da sapere dei BUS: Non esiste più un BUS unico nelle macchine di oggi bensì sono presenti BUS dedicati alle singole periferiche, in quanto, se così non fosse ci sarebbe troppo traffico e la macchina sarebbe lenta. La scheda madre: La scheda madre contiene:

  1. Il processore
  2. I banchi di RAM
  3. Le varie schede che implementano le interfacce dei dispositivi hardware che vogliamo collegare alla macchina
  4. La ROM → piccolo rettangolo che ha un ruolo importante in quanto, in sua assenza, le macchine non partirebbero
  5. Tutta una serie di pile → Possono servire, ad esempio, È importante garantire la compatibilità delle componenti all’interno di una macchina per poterla costruire. Le memorie di massa: Le memorie di massa sono memorie elettroniche di varie dimensioni che hanno un accesso diretto all’informazione ed infine sono molto costose, per cui l’idea della tecnologia è quella di abbattere i costi per permeare l’ambiente. Gli Hard disk:

Le memorie di oggi sono in realtà pile di dischi a doppia faccia, per cui posso scrivere e leggere in entrambe le superficie, e sono presenti delle testine, una per ogni superficie del disco. Queste testine sono attuate da un dispositivo meccanico che gli fa effettuare un movimento radiale sulla superficie del disco. Cilindro: tutte quelle tracce poste alla stessa distanza dal centro. Se la macchina riesce gli conviene scrivere tutta l’informazione sul medesimo cilindro, in modo da evitare di mettere in azione dei movimenti meccanici e da ridurre il tempo impiegato. Il tempo di accesso all’informazione è composto da:

  • Seek time → tempo di ricerca della traccia, ovvero tempo impiegato dalla testina per spostarsi radialmente sulla superficie del disco
  • Latecy time → tempo di latenza, necessario affinché il movimento rotatorio del disco faccia passare il settore in cui è presente l’informazione sotto la testina di lettura e scrittura. Intervengono anche le velocità di trasferimento dell’informazione che vengono misurate in milioni di byte per secondo. Le memorie flash Le memorie flash sono memorie elettroniche ad accesso diretto con una velocità maggiore rispetto a tutte le altre memorie di massa ma allo stesso tempo più costose e con una minor capacità. Dischi ottici I dischi ottici si basano sul principio dell’ottica, relativo alla luce ed in particolar modo del laser, ovvero un fascio di luce molto luminoso ed estremamente focalizzato che può essere emesso in fasci di dimensioni molto ridotte, per cui non si irradia più di tanto. Appartengono alla categoria dei dischi ottici i cd, i dvd e i Blu-ray, ognuno dei quali si è evoluto nel tempo; siamo infatti passati dai rom, ai worm ai rw. ROM [Read Only Memory] → primi cd che sono nati, con lo scopo di distribuire i brani musicali. Venivano realizzati per stampaggio, quindi avevano un costo molto basso. I dischi ottici sono costituiti da un materiale riflettente e da un altro materiale non riflettente: gli strati riflettenti prendono il nome di land mentre quelli non riflettenti prendono il nome di pit. Nel momento in cui un laser colpisce la superficie del mio disco, se prende uno strato riflettente il suo raggio riflesso sarà di un certo tipo, altrimenti se complisce lo strato riflettente il suo raggio riflesso sarà sicuramente meno intenso e con un’angolazione diversa. Da ciò conseguono quindi due situazioni differenti, ricollocabili allo “0” e all’”1” e quindi al bit. I bit sono quindi legati al tipo di raggio che viene riflesso, a seconda dello strato che viene complito. WORM [Write Once Read Many] → si potevano scrivere solo una volta dopodiché era possibile solamente leggerli in quanto le modifiche apportate alla superficie del disco nella fase di scrittura erano irreversibili, per cui non era possibile tornare indietro. In questi dischi era presente una superficie riflettente, sopra la quale era presente un ulteriore strato di materiale trasparente quando all’inizio il disco era vergine. Lo stato trasparente quando veniva poi colpito da un laser ad alta potenza generava una macchia di colore scuro, per cui non era più possibile accedere al di sotto [ad alta potenza il laser rompeva dei legami chimici creando macchie scure]. Bruciare la superficie trasparente era una modifica permanente.

RW [Read and Write] → questi dischi sono riscrivibili, per cui le modifiche apportate a questi materiali frapposti sopra la superficie riflettente non sono permanenti ma reversibili. In questi dischi è presente uno strato riflettente sopra il quale è presente un ulteriore strato che ha la possibilità di cambiare stato, ovvero di diventare da cristallino a amorfo. Quando il laser ad alta potenza fa passare lo stato cristallino a quello amorfo, significa che la luce non riesce ad arrivare allo stato riflettente; se sono nello stato cristallino riesco allora ad arrivare di sotto. Il processo è reversibile perché se abbasso la potenza del laser e raffreddo la superficie, lo stato amorfo torna ad essere cristallino. La lettura avviene sempre con gli stessi principi dei dischi normali, con un laser a minor potenza. La differenza fra i cd, i dvd, e il Blu-ray: Le dimensioni dei buchi dei cd sono più grossi rispett o a quelli dei dvd, la distanza tra le tracce è più piccola per cui a parità di dimensione del supporto nel dvd la densità dell’informazione è maggiore rispetto al cd, ottenuta facendo i pit e i land più piccoli e serrando le tracce su cui vi risiedono. Per cui i dvd hanno Pit più piccoli, spirale più serrata e laser rosso. Nei cd si usa un laser a infrarossi, mentre nei dvd si utilizza un laser rosso. Nei Blu-ray i pit e i land sono ancora più piccoli e la distanza fra le tracce è ancora inferiore; inoltre il raggio laser utilizzato è il blu. Blu-ray → non c’è la “e” finale perché nel posto in cui sono nati non è possibile utilizzare nomi normali. Giovedì 14 Marzo Il sistema operativo è un software come tutti gli altri, per cui risiede nella RAM e viene eseguito dal processore, ed ha lo scopo di fungere da intermediario tra la parte fisica (hardware) e l’utente. Sono quindi presenti diversi strati: il cuore (l’hardware), il sistema operativo (che maschera sia all’utente sia ai software di tipo applicativo tutta la complessità architetturale dei dispositivi digitali), i software applicativi ed infine, all’esterno, c’è l’utente che interagisce con il software operativo, per cui i software applicativi non hanno un accesso diretto ai dispositivi hardware ma solo ed esclusivamente attraverso il sistema operativo. Sistemi operativi: [windows, Linux, OS, Android, ecc..] I software applicati sono tutti quei programmi che non fanno parte dei sistemi operativi e che sono suddivisi in diverse categorie a seconda del tipo di problema che sono in grado di risolvere; esiste ad esempio il software per l’elaborazione del testo, il software per l’elaborazione dei dati (es. R, excelle), il software per le basi di dati (Microsoft, access, Oracol), il software per la grafica, il software per la risoluzione dei filmati, ecc. … Oltre ai software applicativi sono preseti gli strumenti di sviluppo , ovvero ambienti di sviluppo integrati che permettono di scrivere il codice utilizzando un linguaggio di programmazione ad alto livello e di tradurre le istruzioni che scriviamo in alto livello in un insieme di istruzioni del tutto equivalenti ma scritte in un linguaggio particolare, ovvero quello macchina. Quando l’utente scrive i programmi in MathLab scrive i codici sorgenti scritti in un linguaggio di programmazione ad lato livello in quanto hanno una sintassi ed unna semantica che riguarda parole inglesi. All’interno dell’idea di MathLab c’è una categoria di software che prendono il nome di traduttori che hanno lo scopo di scrivere un insieme di istruzioni, in un altro linguaggio, del tutto equivalenti a quelle scritte in un linguaggio ad alto livello:

I sistemi operativi sono composti da sei moduli:

  1. gestore dei processi
  2. gestore della RAM
  3. gestore dei dispositivi I/O
  4. gestore della memoria secondaria (chiamato anche File System)
  5. gestore di interpretazione dei comandi
  6. gestore delle reti. Da un punto di vista grafico: l’utente vede un’interfaccia utente, differente da quella delle periferiche, ed esegue dei “click” che vengono ricevuti da un primo software sottostante che è l’interprete dei comandi; vicino all’hardware vi è inoltre situato il nucleo dei processi (kernel). Infine, dal software applicativo partono frecce bidirezionali che lo collegano a tutte le altre bolle, per cui: il software applicativo dialoga con l’utente e si appoggia a tutte le altre componenti o moduli del sistema operativo. È una stratificazione dell’hardware con tutti questi rivestimenti, moduli, componenti software del sistema operativo, ognuno dei quali svolge i propri compiti ed aiuta l’altro. Distinzione fra il programma ed il processo: Il programma è un insieme, o meglio una lista ordinata di istruzioni. Si tratta quindi di una entità statica composta dal codice eseguibile dal processore. Il processo è un’ entità dinamica poiché corrisponde ad un programma in esecuzione, per cui al passare del tempo il processo cambia. All’interno di un processo può cambiare il codice, ovvero l’istruzione che viene eseguita o il punto in cui questa lista si trova in esecuzione, i dati su cui lavora oppure il contesto, ovvero l’ambiente circostante in cui il processo sta evolvendo (in che stato è la RAM, in che stato sono i registri ecc.…). Un processo può stare infine in tre fasi: 1. fase di esecuzione (uno solo) → avviene quando sta utilizzando il processore 2. fase di attesa (fase bloccato) → Il processo attende che sia terminata un’operazione di input di dati oppure di poter usare una risorsa in quel momento occupata. In poche parole, il processo può attendere il verificarsi di un evento esterno o che una risorsa hardware risulti disponibile. 3. pronto: quando è potenzialmente in condizione di poter utilizzare il processore che è occupato da un altro processo. L’utente fa “doppio click” su un programma, il processo viene creato e va a finire nell’insieme dei processi pronti per essere eseguiti dal processore, dopodiché ci sono delle politiche che alternano i vari processi eseguiti dal processore in quanto quest’ultimo è in grado di eseguirne solamente uno alla vola. Chiaramente l’utente non si accorge di questo “limite” della macchina grazie alla velocità di quest’ultima, di fatti i processori attuali hanno una frequenza dell’ordine dei gigahertz che gli permette di eseguire più di un’operazione ogni miliardesimo di secondo. Abbiamo quindi detto che il processo può passare dallo stato di pronto a quello in esecuzione, una volta collocato in questa seconda fase può tornare nello stato di pronto, proprio perché appunto i vari processi devono essere alternati senza che ognuno abbia la totale attenzione del processore, può

terminare, oppure può avere necessità di una risorsa I/O entrando quindi nella fase di attesa. Dallo stato di attesa un processo torna nello stato di pronto quando l’utilizzo del dispositivo I/O è stato effettuato, in modo da proseguire la sua esecuzione (ritorna ad attendere l’attenzione della CPU).

1. Il gestore dei processi Il gestore dei processi è colui che gestisce il contesto di esecuzione dei vari processi, per cui li crea e li cancella, li sospende e li riattiva (dallo stato di pronto il processo prima o poi torna nello stato di esecuzione), fornisce i meccanismi per la loro sincronizzazione, comunicazione e per evitare, prevenire e risolvere i deadlock, gestisce il contesto di esecuzione di ognuno di loro [quando il processo passa dallo stato di esecuzione a quello di pronto viene fatta una specie di fotografia al contesto in modo da poterlo ripristinare nel momento in cui passa dallo stato di esecuzione a quello di pronto], gestisce l’alternanza nell’accesso alla CPU da parte dei processi in esecuzione, gestisce i compiti da assegnare alla CPU ed infine gestisce la risposta agli eventi esterni generati dalle unità periferiche. In poche parole, il gestore dei processi detta quali processi assegnare al processore secondo alcune politiche e gestisce la risposta generata dalle unità periferiche (quando la stampante ha finito di stampare manda al processore un feedback nel quale lo avverte di aver finito il proprio compito). Quindi, ricapitolando, dal punto di vista del processore in ogni istante vi è un solo processo di esecuzione, mentre dal punto di vista dell’utente, se l’alternanza tra i processi è frequente, l’impressione è che l’esecuzione dei programmi avvenga simultaneamente. Le politiche per alternare i processi nello stato di pronto eseguibili dal processore sono molte e dipendono dai vari sistemi operativi, o meglio dai vari software che vengono lanciati in esecuzione poiché non tutti hanno la stessa priorità: ad esempio, l’antivirus ha una priorità maggiore di word per cui se rileva qualcosa che non quadra salta la lista dei processi pronti prima di lui e va immediatamente in esecuzione. Per quanto riguarda la politica utilizzata per i processi operativi aventi tutte le medesime priorità, prende il nome di round robin , è di tipo FIFO [First In First Out], per cui il primo processo che entra nella lista è il primo ad essere assegnato al processore, e funziona a time-sharing (partizione del tempo) , grazie al quale un solo processo non può monopolizzare il processore che assegna quindi ad ognuno dei processi un quanto di tempo. Cosa succede: supponiamo che nella lista dei processi pronti ci siamo tre processi, il primo di nome P1, il secondo di nome P2 ed il terzo di nome P3. P1, essendo il primo presente, passa subito allo stato di E, nel quale sta per il tempo che gli viene dedicato, dopodiché passa ad uno stato di P (pronto), ed il processore rivolge la sua attenzione al processo P2. Il processo P2 viene eseguito per il suo quanto di tempo, dopodiché anche a lui viene tolta l’attenzione del processore che viene data al processo P3. Una volta che anche quest’ultimo processo termina il suo quanto di tempo, P1 che si era nuovamente accodato, ripassa nello stato E ed il processo esegue nuovamente questo ciclo. Ad un certo punto, P1 ha bisogno di una operazione I/O, ovvero richiede la necessità di un dispositivo ingresso/uscita, per cui passa nello stato A (attesa) ed il suo posto nello stato E viene sostituito da P2, in modo da non lasciare il processore ad attendere senza far niente. Fino a quando P1 è situato nella fase A, solamente P2 e P3 vengono alternati per ricevere l’attenzione del processore; nel momento in cui lo stato di attesa termina, P1 passa nuovamente nello stato di pronto e si rimette in fila.