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 2022/2023 - Manini, Appunti di Elementi di Informatica

Appunti relativi all'anno 2022/2023 del corso di informatica del Professor Daniele Manini. Nel documento sono integrati esempi di esercizi d'esame e immagini/tabelle utili.

Tipologia: Appunti

2021/2022

In vendita dal 23/09/2024

norakami
norakami 🇮🇹

4 documenti

1 / 31

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
Manini - 2022/2023
RAPPRESENTAZIONE DELLE INFORMAZIONI
Bit: deriva dalle parole "binary digit”. Un bit può assumere due significati, 0 oppure 1
-> con un bit posso rappresentare due soluzioni diverse (per esempio ON/OFF su un
interruttore o vero/falso). Con N bit si rappresentano 2Nsoluzioni distinte.
Se ho 0 bit non ho nulla da codificare (anche se 20= 1)
Se ho K informazioni, di quanti bit ho bisogno per rappresentarle?
Devi scegliere N in modo che 2N>/= K. (Anche se 2N>K sarebbe uno
“spreco”, in quanto avremmo elementi in eccesso).
Esempio: devo rappresentare 61 informazioni -> 26=64. Per
rappresentare 61 informazioni avrò quindi bisogno di 6 bit.
Byte: spesso i bit sono raggruppati in gruppi di 8 BIT. 8 bit formano un byte, ogni
byte rappresenta 256 informazioni diverse, dal momento che 28= 256 informazioni
diverse. Il byte viene utilizzato, così come il bit, per esprimere la capacità della
memoria, la potenza di un calcolatore o la velocità di trasmissione di una linea…
Grazie a sequenze di bit e byte riusciamo a rappresentare interi positivi e negativi, a
codificare testi, immagini (a colori, in scali di grigio e in bianco e nero) e a codificare i
suoni.
Rappresentazione dei numeri
I numeri sono diversi dai numerali:
Un numero è il concetto che rappresenta una quantità.
Un numerale è il simbolo che rappresenta una quantità.
In matematica conosciamo il sistema decimale, che, come indica il nome, è in base
10.
Nel sistema decimale, il numerale 24510 (il pedice indica la base del
numerale, quindi il sistema a cui si fa riferimento) è formato da:
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Anteprima parziale del testo

Scarica Informatica 2022/2023 - Manini e più Appunti in PDF di Elementi di Informatica solo su Docsity!

INFORMATICA

Manini - 2022/ RAPPRESENTAZIONE DELLE INFORMAZIONIBit: deriva dalle parole "binary digit”. Un bit può assumere due significati, 0 oppure 1 -> con un bit posso rappresentare due soluzioni diverse (per esempio ON/OFF su un interruttore o vero/falso). Con N bit si rappresentano 2N^ soluzioni distinte. ○ Se ho 0 bit non ho nulla da codificare (anche se 2^0 = 1) ○ Se ho K informazioni, di quanti bit ho bisogno per rappresentarle? ■ Devi scegliere N in modo che 2N^ >/= K. (Anche se 2N>K sarebbe uno “spreco”, in quanto avremmo elementi in eccesso). ■ Esempio: devo rappresentare 61 informazioni -> 26 =64. Per rappresentare 61 informazioni avrò quindi bisogno di 6 bit. ● Byte: spesso i bit sono raggruppati in gruppi di 8 BIT. 8 bit formano un byte , ogni byte rappresenta 256 informazioni diverse, dal momento che 2^8 = 256 informazioni diverse. Il byte viene utilizzato, così come il bit, per esprimere la capacità della memoria, la potenza di un calcolatore o la velocità di trasmissione di una linea… Grazie a sequenze di bit e byte riusciamo a rappresentare interi positivi e negativi, a codificare testi, immagini (a colori, in scali di grigio e in bianco e nero) e a codificare i suoni. Rappresentazione dei numeri ● I numeri sono diversi dai numerali: Un numero è il concetto che rappresenta una quantità. Un numerale è il simbolo che rappresenta una quantità. In matematica conosciamo il sistema decimale , che, come indica il nome, è in base 10. Nel sistema decimale, il numerale 24510 (il pedice indica la base del numerale, quindi il sistema a cui si fa riferimento) è formato da:

2 centinaia, 4 decine, 5 unità Ovvero: 2 volte 10^2 , 4 volte 10^1 , 5 volte 10^0. Uguale a 200 + 40 + 5 =245 (numero) Il sistema decimale si basa su un sistema di notazione posizionale : la posizione di una cifra in un numerale indica il suo “peso” in potenze di base

Unità: 10^0 Decine: 10^1 Centinaia: 10^2 ■ … Il sistema di notazione binario è formato da due cifre base (0,1) , dove il numero di cifre coincide con il numero di bit. Il sistema binario è un sistema in base 2. Il numerale 101 2 è formato da 1 volta 2^2 , 0 volte 2^1 e una volta 2^0 (si segue anche qui il sistema di notazione posizionale, a cambiare è solo la base) ● Massimo numero rappresentabile: il numero più grande che posso rappresentare con un dato numero di cifre ○ ATTENZIONE! Non corrisponde al numero di informazioni rappresentabili ○ Esempio: con due cifre decimali rappresento 100 numeri, ma il numero più grande rappresentabile, il massimo numero rappresentabile, è 99 (in sistema decimale), perché rappresento i numeri da 0 a 99 ○ Per numeri a N cifre in sistema decimale ■ 10 N^ numeri diversi ■ Da 0 a 10N^ - ■ Massimo numero rappresentabile: 10N^ - 1 ○ Per numeri a N cifre in sistema binario ■ 2 N^ numeri diversi ■ Da 0 a 2N^ - 1 ■ Massimo numero rappresentabile: 2N^ - 1 ○ Esempio con 8 cifre: 1111111 2 (8 bit) = 2^8 - 1 = 25510. ( Quando una sequenza è formata da tutti 1, il numero di 1 rappresenta esattamente il massimo numero rappresentabile con quel numero di bit ). ○ Per rappresentare 256 10 serve un bit in più = 100000000 2 = 1 x 2^8 ● Esercizi riassuntivi ○ Numerale 345 10 ■ 5 in posizione 0 -> 10^0 x 5 ■ 4 in posizione 1 -> 10^1 x 4 ■ 3 in posizione 2 -> 10^2 x 3 ■ Sommo tutto (300 + 40 + 5) = 345 ○ Numerale 111 2 ■ 1 in posizione 0 -> 2^0 x 1 ■ 1 in posizione 1 -> 2^1 x 1 ■ 1 in posizione 2 -> 2^2 x 1 ■ Sommo tutto (1 + 2 + 4) = 7 ■ Se dovessi calcolare il massimo numero rappresentabile: ho 3 bit, il massimo numero rappresentabile sarebbe 2^3 - 1= 7

○ 01000011 01100001 01110011 01100001 (così sono indicate le sequenze delle singole lettere che formano la parola “Casa”. Per avere la sequenza dell’intera parola si devono poi scrivere unendole tutte insieme) ○ Attenzione! Nel codice ASCII esteso si aggiunge uno 0 iniziale rispetto al codice ASCII “normale” ● Esercizio: data una sequenza di bit, risalire alla parola e quindi alla rappresentazione in caratteri: ○ Sequenza: 01000011011000010111001101100001 ○ Si divide la sequenza in gruppi di 8 bit -> 01000011 01100001 01110011 01100001 ○ Si associa ad ogni gruppo il carattere corrispondente, risalendo così alla rappresentazione in caratteri. ● N.B. Le cifre da 0 a 9 rappresentate in ASCII sono caratteri e non quantità numeriche, quindi non possono essere utilizzate per rappresentare quantità da utilizzare in calcoli aritmetici. A pensarci non è così strano: i numeri telefonici sono sequenze di simboli con le quali non facciamo calcoli aritmetici. ○ Se chiediamo al computer di ordinare alfabeticamente le stringhe (sequenze di caratteri) “3” e “20431”, il computer metterà “20431” prima di “3” ● Anche con l’ASCII esteso ci sono alcuni problemi: ○ I 265 caratteri sono insufficienti per alcuni sistemi di scrittura come il cinese e il giapponese. ○ Non esiste un unico ASCII esteso, ma uno (o più) diverso per ogni lingua. È infatti molto problematico rappresentare testi complessi che comprendono sistemi di scrittura diversi.

○ La soluzione esiste: definire uno standard, e quindi una convenzione, che utilizzi più bit e comprenda tutti i sistemi di scrittura. Questo standard esiste ed è l’ UNICODE , che va a coprire quasi tutti i sistemi di scrittura e le lingue del mondo. Perché questo sia possibile, vengono utilizzati fino a 4 byte (32 bit) per ogni carattere e sono rappresentabili oltre 4 miliardi di caratteri rappresentabili. Attualmente ne sono utilizzati circa 98000. ■ L’ UTF (Unicode Transformation Format) definisce come codificare il numero di un carattere unicode come sequenza di bit ● UTF- 8: alcuni caratteri sono codificati con 8 bit (1 byte), altri con 16 bit (2 byte); pochi altri con 32 bit. È compatibile con ASCII in quanto i caratteri con 8 bit coincidono con i caratteri ASCII. ● UTF - 16: alcuni caratteri sono codificati con 16 bit, pochi altri con 32 bit (4 byte). Questo tipo di codifica è utilizzato internamente da Windows. Codifica delle immagini ● Vi sono varie tecniche per memorizzare in modo digitale un’immagine ed elaborarla. ● Immaginiamo di dover codificare un’immagine in bianco e nero (dual tone, ovvero con soli due colori): ○ Suddividiamo l’immagine con una griglia formata da linee a distanza costante ○ Ogni quadrato derivante da tale suddivisione viene chiamato PIXEL (picture element) , che può essere codificato in binario con la convenzione secondo la quale ■ 0 rappresenta un pixel bianco (ovvero un pixel nel quale il bianco è dominante) ■ 1 rappresenta un pixel nero (ovvero in cui il nero è dominante) ■ Esiste una convenzione per riuscire ad ottenere una sequenza di bit: i pixel si leggono da sinistra a destra, partendo dal basso e salendo verso l’alto. ■ La rappresentazione della figura è quindi 0000000 0100000 0110000 0111100 ● Non sempre, tuttavia, il contorno della figura coincide con le linee della griglia: digitalizzando un’immagine si ha sempre un’ approssimazione dell’immagine stessa.

Visto l’elevato spazio richiesto, per risparmiare spazio, spesso si memorizzano solo le differenze tra fotogrammi e non i fotogrammi interi. ○ Esistono vari formati, soprattutto lossy e che memorizzano anche i suoni: mpeg, divx, avi (Microsoft) , quicktime (apple) Codifica dei suoni ● I suoni sono onde di pressione che si hanno in presenza di un mezzo (aria, acqua…). Quando un suono viene rilevato dall’orecchio o da un microfono, viene trasformato in uno stimolo - o segnale - elettrico. ● Durata, intensità e variazione nel tempo della pressione dell’aria sono le quantità fisiche che rendono un suono diverso da ogni altro. ● Anche i suoni possono essere codificati in digitale. ● Per codificare i suoni immaginiamo un piano cartesiano: ○ Sull’asse delle ascisse (x) viene rappresentato il tempo ○ Sull’asse delle ordinate (y) viene rappresentata la variazione di pressione corrispondente al suono stesso. ○ Si rappresenta quindi l’intensità del suono in funzione del tempo (entrambe sono quantità analogiche. ● Il problema maggiore della codifica dei suoni è il passare dalla rappresentazione analogica (come nel grafico) a quella digitale. Per farlo, si effettuano dei campionamenti sull’onda, ovvero si misura il valore dell’onda a intervalli costanti di tempo. ○ Esempio -> il telefono usa 8000 campionamenti al secondo (8 kHz) ○ L’Unità di misura della frequenza è l’Hz, che indica quanti campionamenti vengono effettuati. ● Maggiore è la frequenza dei campionamenti, migliore sarà la precisione con cui il segnale viene memorizzato e la fedeltà all’originale. ○ Mentre nelle immagini per migliorare la codifica si andava a migliorare la risoluzione, aumentando i pixel; nei suoni si va ad aumentare il numero di campioni, diminuendo la frequenza. ○ Mentre nelle immagini si andava ad aumentare il numero di bit da usare per codificare il colore di ogni singolo pixel, nei suoni andiamo ad aumentare il numero di bit che vanno ad aumentare il numero di livelli di quantizzazione (vedi dopo).

■ Ricorda: aumentando il numero di bit aumenta anche la memoria occupata. ● Una volta effettuati dei campionamenti, devo assegnare dei valori a quei campioni: ognuno di questi valori viene espresso tramite il sistema binario. Viene dunque introdotto il concetto di “ livello di quantizzazione ”, livelli che vanno a quantificare in quale intervallo di ampiezza il campione va a cadere. A ogni livello viene assegnato una sequenza binaria; ogni livello identifica una quantità a cui il campione appartiene. ○ Ogni campione viene approssimato al livello di quantizzazione a cui si avvicina di più. Ogni campione è espresso quindi dal numero binario corrispondente al livello più prossimo. ● Una volta ottenuta la sequenza di valori numerici, essa viene digitalizzata. Si ha una discretizzazione in tempo ed una sul valore. ● Esistono formati che applicano meccanismi di compressione, come il formato mp3, che è molto diffuso ed efficiente. ● Importante: data una sequenza di bit, non posso sapere se essa rappresenta un numero, un testo o un suono. ○ Una sequenza di bit di per sé non ha alcun significato. ○ Un metadato (per esempio il formato del file) deve indicare cosa sta rappresentando. Esercizi di riepilogo (dalle slides)

  1. Le parole “Shakespeare” e “shakespeare” hanno la stessa rappresentazione ASCII? ○ No, lettere maiuscole e minuscole hanno diversa rappresentazione.
  2. Quanti byte occupa un suono della durata di 5 secondi registrato in qualità cd, cioè campionato a 44100 Hz, con 16 bit per ogni campione.

○ Random Access Memory (RAM) ○ Insieme alla CPU è una componente fondamentale del computer. ○ Permette di memorizzare sia il programma che i dati. ○ Fisicamente è formata da componenti elettronici miniaturizzati, come transistor, resistenze, condensatori. ○ Ogni unità elementare presente nella RAM può trovarsi a due livelli di tensione elettrica, che sono esattamente il corrispettivo fisico del concetto logico del bit. Possiamo dunque rappresentare tutte le tipologie di informazioni viste in precedenza). ○ È strutturata in una sequenza di celle di memoria , in ognuna delle quali troviamo una sequenza di bit. In particolare, dentro ogni cella viene memorizzato 1 byte, quindi una sequenza di 8 bit. Le celle sono numerate in sequenza, per far sì che possano essere identificate: si parla di indirizzo. L’indirizzo indica la posizione della cella. ○ Sulla memoria si possono compiere una serie di operazioni: ■ Lettura del contenuto in una cella ■ Scrittura in una cella ○ Per leggere e scrivere in una cella è necessario conoscerne l’indirizzo. Specificando l’indirizzo di una cella, la CPU è in grado di leggere e/o modificare il valore dei byte memorizzato in quella cella. ■ Si può accedere direttamente alle varie celle, una volta noto il loro indirizzo. ■ Il tempo necessario per accedere ad una cella è lo stesso, indipendentemente dalla posizione della cella nella sequenza. ■ Il nome, random access unity, indica proprio il fatto che non ci sono differenze nell’accesso alle varie celle della memoria. ○ Gli indirizzi, che ci consentono di identificare le celle e le operazioni, possono essere codificati. ○ Il numero di celle indirizzabili (numero di informazioni rappresentabile con un certo numero di bit) direttamente si chiama spazio di indirizzamento. Il numero di celle indirizzabili si esprime sempre come potenza di 2. ○ L’Unità di misura della memoria è il byte. Per facilitare le operazioni, spesso si usano dei multipli: ■ Kilobyte (KB) = 1024 byte (2^10 byte) ■ Megabyte (MB) = 1024 KB (2^20 byte) ■ Gigabyte (GB) = 1024 MB (2^30 byte) ■ Quindi con 16 byte posso indirizzare 64 KB di memoria, con 32 bit ne posso invece indirizzare 4 GB. ■ Con 16 bit si indirizzano 65536 celle, con 32 4.294.967.296 celle ○ Un tempo gli elaboratori più potenti avevano una RAM da soli 64 KB. Oggi è di 2 GB, 4 GB, 8 GB… fino a 16 GB. La memoria è espandibile ma ha un limite fisico (gli slot sulla scheda madre per ospitare i chip di memoria sono limitati) e un limite massimo dovuto ad un sistema. ○ La RAM è una memoria veloce , per questo è molto costosa. È inoltre volatile , ovvero anche quando viene tolta l’alimentazione solo per pochi secondi alla macchina, tutto ciò che la RAM contiene viene perso (per questo è necessario avere una memoria secondaria come un hard disk).

● La ROM ○ Read Only Memory, è una memoria in sola lettura (diversamente dalla RAM). ○ Non può essere modificata, a meno che non sia un’ EPROM. ○ È veloce quasi quanto la RAM, ma non è volatile. ○ Solitamente è utilizzata per memorizzare programmi e dati necessari all’avvio dell’ elaboratore: ■ Programmi di bootstrap -> necessari all’avvio dell'elaboratore. Quando accendiamo un elaboratore, nella RAM non è presente alcun programma: i sistemi di bootstrap spostano i programmi dalla memoria secondaria alla RAM. ■ Configurazione del sistema ● La cache: ○ È un tipo di memoria che ha caratteristiche simili alla RAM. ○ È più veloce, più piccola e costosa della RAM. ○ Fisicamente, si trova tra la CPU e la RAM: serve a memorizzare i dati utilizzati più frequentemente, per evitare alla CPU di doverli recuperare tutte le volte dalla RAM. Questo influisce pesantemente sulle prestazioni e sul costo della CPU. ● La CPU: ○ Esegue programmi scritti in linguaggio macchina: una serie di istruzioni, eseguite dal processore, che non sono altro che comandi elementari. Alcuni di questi comandi sono: “somma dei numeri”, “leggi dalla memoria”, “scrivi in memoria”… ○ Ogni tipo di processore, in base a chi lo ha costruito, può eseguire un numero limitato di istruzioni. Le istruzioni si dividono in: ■ Aritmetiche, logiche… ■ Di salto ■ Di lettura e/o scrittura in memoria ■ Di lettura e/o scrittura verso dispositivi di input e output ○ Combinando in modo diverso sequenze anche molto lunghe di istruzioni, si possono far svolgere al computer compiti completamente diversi. ○ Processori diversi comprendono ed eseguono istruzioni diverse. Esistono diverse famiglie di produttori, come Intel, Motorola, Sun. In genere processori della stessa famiglia possono eseguire gli stessi programmi, diversamente da processori di famiglie diverse (perchè le istruzioni che capiscono sono diverse). ○ All’interno di un elaboratore è possibile avere più CPU. Aumentando il numero di processori, si migliora l’efficienza del computer, che diventa più veloce e performante. ■ Ci sono elaboratori multiprocessore, che contengono più CPU nello stesso elaboratore. ■ Ci sono microprocessori multicore, che sono composti da più di una CPU (per esempio dual core, quad core …) ■ La differenza principale è che nei multicore vengono condivise alcune risorse degli elaboratori.

● Tra i registri speciali troviamo: ○ Program Counter (PC) ■ Contiene l’indirizzo in memoria principale della prossima istruzione da eseguire ■ Quando un programma viene avviato, l’indirizzo della prima istruzione viene caricato nel Program Counter ■ All’esecuzione di un’istruzione, il PC viene modificato per contenere l’indirizzo della prossima istruzione da eseguire, che non necessariamente deve essere quella immediatamente successiva. ○ Instruction Register ■ Contiene l’istruzione attualmente in esecuzione ■ La Control Unit legge l’istruzione contenuta in IR e la esegue ● La memoria secondaria: ○ Ci serve perchè la RAM è poco capiente, molto costosa e volatile. ○ La memoria secondaria è capiente, relativamente (in relazione ad altre memorie) poco costosa, non volatile (quindi programmi e dati vengono memorizzati in maniera permanente) ma lenta. In realtà le memorie secondarie del giorno d’oggi stanno diventando sempre più veloci, avvicinandosi quasi alla memoria principale. ○ La CPU può eseguire esclusivamente programmi che risiedono in memoria principale. I programmi ed i dati, che risiedono in memoria secondaria, devono essere copiati in memoria principale per essere eseguiti. Quando si esegue un programma, il sistema operativo lo copia da memoria secondaria in RAM. L’operazione si chiama loading o caricamento. ○ È composta da: ■ Supporti di memorizzazione , componente fisico in cui vengono immagazzinati i dati. Un esempio è il DVD, basato sulle caratteristiche magnetiche del supporto. ● I supporti possono essere basati su tecnologie diverse. Ci sono tecnologie: magnetica, ottica, magneto-ottica, flash/allo stato solido (che ultimamente stanno prendendo sempre più piede…) ○ Nel caso della memoria magnetica viene utilizzato il fenomeno fisico della polarità, e dunque il sistema binario. Sul supporto sono presenti particelle magnetiche: prese due particelle magnetiche adiacenti, particelle con la stessa polarità -> 0; particelle con diversa polarità -> 1. La testina di lettura e/o scrittura cambia/rileva la polarità delle particelle. La memoria magnetica è usata per alcuni hard disk, floppy disk e nastri.

○ La memoria ottica, invece, sfrutta la riflessione della luce di un laser. Sul supporto sono presenti delle minuscole scanalature, chiamate pit , che formano zone chiare, dove riflette la luce, e zone scure, dove la luce non è riflessa. Chiaro -> 0, Scuro -> 1 (o viceversa). Anche questa tecnologia si presta bene al sistema binario. È la tecnologia usata nei DVD. ○ Infine le memorie flash o allo stato solido sono costituite da chip simili a quelli della RAM. La memoria flash è leggera e facile da trasportare. È usata per macchine fotografiche digitali, penne USB, smartphone, lettori mp3 ed alcuni hard disk. ● Il tempo necessario alla lettura delle informazioni da un supporto dipende da tempo di accesso, ovvero il tempo impiegato per iniziare a leggere i dati, e velocità di trasferimento, ovvero la velocità con cui i dati vengono effettivamente trasferiti in RAM. In un disco, entrambi dipendono dalla velocità di rotazione (numero di rotazioni per minuto). ■ Dispositivi di memorizzazione , che leggono e/o scrivono dati dal/sul supporto di memorizzazione. Un esempio è il lettore DVD. ○ La memoria secondaria ha due modalità possibili di lettura o scrittura: ■ Accesso diretto o random -> si accede a qualunque punto del supporto, direttamente ■ Accesso sequenziale -> si accede ad un punto solo dopo aver letto/scritto fino a quel punto. ■ Esempio: CD audio vs musicassette ○ Il tempo di accesso alla memoria dipende dal dispositivo/processore. ○ Capacità di memorizzazione: quantità di dati memorizzabile sul supporto. Dipende dalla dimensione del supporto e dalla densità di memorizzazione. Capacità, velocità e costo sono i tre parametri dai quali dipende la “gerarchia di memoria” (domanda d’esame!!) ● L’ hard disk : è generalmente basato su tecnologia magnetica. È una delle memorie secondarie più diffuse, caratterizzata da

SOFTWARE E SISTEMA OPERATIVO

L’hardware da solo non è sufficiente per il funzionamento dell’elaboratore, occorre usare il software. ○ L’utilizzo diretto dell’hardware è infatti complicato perchè: ■ Il programmatore dovrebbe conoscere la programmazione, l’hardware e il relativo linguaggio macchina ■ Ogni programma dovrebbe essere scritto come sequenza di bit ■ Modifiche dell’hardware richiederebbero la riscrittura parziale del programma ● Il software è un insieme di programmi che permettono di trasformare i circuiti elettronici in un oggetto in grado di svolgere funzioni di varia natura. ● I computer sono programmabili, possono svolgere compiti diversi in base a istruzioni contenute nei programmi. ● Dal momento che l’uso diretto dell’hardware è complicato, occorre all’utente fornire un meccanismo per: ○ Astrarre dall’organizzazione fisica per: ■ Usare nello stesso modo macchine diverse ■ Avere un semplice linguaggio di interazione ○ Avere un insieme di programmi applicativi per svolgere diversi compiti, come elaborare i testi, navigare in internet ecc ecc… ● I computer moderni raggiungono questi obbiettivi mediante la definizione di “ macchine virtuali ” realizzate al di sopra della macchina hardware reale. La macchina virtuale: ○ Consiste in un livello software creato sull’hardware ○ Fornisce le funzionalità desiderate ed è facile da utilizzare ○ È virtuale in quanto non esiste fisicamente, ma viene realizzata mediante il software (sistema operativo o software di base) ○ L’utente interagisce con la macchina virtuale con un linguaggio ad alto livello, ovvero con un’interfaccia grafica o testuale. La macchina virtuale traduce ogni comando ad alto livello nell’opportuna serie di comandi per l’hardware, attraverso un processo di astrazione. ● Il sistema operativo è un insieme di programmi che interagiscono e collaborano tra di loro per gestire efficacemente il computer e le sue periferiche e creare un ambiente virtuale per facilitare l’interazione uomo-macchina. ● Il sistema operativo esegue un comando seguendo i seguenti passi: ○ Verifica se si tratta di un comando valido ○ Lo traduce per la macchina fisica ○ Eseguito il comando, fornisce un riscontro all’utente e si pone in attesa di un nuovo comando da parte dell’utente ● Hardware (macchine fisiche) diversi possono essere utilizzati in modo simile costruendo al di sopra delle macchine virtuali. Ogni macchina virtuale fornisce il medesimo linguaggio ad alto livello ma traduce i comandi in modo diverso, in funzione del tipo di hardware. ● Il sistema operativo ha una struttura a cipolla: ad ogni livello “astrae” il livello inferiore, nascondendone la complessità, e fornisce servizi al livello superiore. In questo modo si può utilizzare il computer senza conoscere i dettagli dei dispositivi elettronici.

○ Ogni interazione che svolgiamo ad alto livello (dal punto di vista grafico e testuale), viene tradotta dalla macchina virtuale nel corrispondente comando in linguaggio macchina, comprensibile dall’hardware. ○ In realtà, volendo essere precisi, il software ha una struttura detta “a cipolla” in quanto possiede diversi livelli di astrazione. Lo strato più importante è quello del kernel , prima parte di software, che rappresenta la parte dedita alla gestione del processore, della memoria e dei dispositivi di input ed output. Andando verso l’esterno si hanno diversi livelli: ognuno sfrutta i servizi forniti dai livelli sottostanti, fornendone uno ai livelli superiori. Questo fino ad arrivare al livello più esterno, che si occupa dell’interfaccia calcolatore-utente. ● Ogni dispositivo di input e output collegato al computer è gestito da un modulo del sistema operativo chiamato driver. Ogni volta che si aggiunge un dispositivo nuovo si deve installare (se non è già presente) il driver corrispondente all’interno del sistema operativo. Nelle macchine più recenti, ormai, esiste la funzionalità “ plug&play” : quando collego un dispositivo nuovo, la macchina lo rileva e spesso ci da le indicazioni per andare in rete a scaricare il driver, che ci consente di utilizzare effettivamente il nuovo dispositivo. ● Le funzionalità svolte dal sistema operativo sono: ○ Accensione e configurazione della macchina -> fase di bootstrap: ■ Quando la macchina viene accesa, la RAM è vuota in quanto volatile. Bisogna quindi caricare i dati e i programmi presenti in memoria secondaria, in particolare il sistema operativo, in memoria principale (RAM). ■ Per caricare i programmi dalla memoria secondaria, bisogna usare il file system (sistema operativo). Ma se questo risiede nella RAM, che è volatile e quindi vuota all’accensione, si utilizza un piccolo programma, il BIOS, che ha il compito di caricare una piccola parte del sistema operativo dalla memoria secondaria. ■ La CPU esegue solo programmi presenti in memoria principale, che tuttavia è vuota all’accensione del computer. Per eludere questo problema, si memorizza il BIOS in una parte della memoria principale non volatile: la ROM. ● Bootstrap: all’accensione della macchina, il BIOS, in ROM, cerca sulla memoria secondaria il sistema operativo e ne carica una parte in RAM. ● Il sistema operativo non può essere memorizzato direttamente in ROM, perché è una memoria in sola lettura. Ha senso quindi memorizzare lì solo programmi/dati che non è necessario cambiare. ■ La prima parte del sistema operativo che viene caricata comprende: ● I programmi per gestire processi e CPU ● I programmi per gestire la memoria ● I programmi per gestire periferiche e dispositivi di input/output ● I programmi per gestire il file system ● Il programma che crea l’interfaccia (grafica o testuale) utente ○ Gestione del processore :

e contigua. È una tecnica di gestione della memoria utilizzata da tutti i sistemi operativi moderni. ● Come funziona? Non è necessario mantenere sempre in memoria tutti i programmi in esecuzione, quindi le parti (chiamate pagine) dei programmi usate meno spesso vengono “spostate” su hard disk (e quindi nella memoria secondaria). Le parti vengono riportate in memoria quando servono nuovamente, eventualmente spostandone altre su disco. Il sistema operativo traduce automaticamente gli indirizzi virtuali in indirizzi fisici. ● Se frequentemente si utilizza una memoria virtuale molto più grande della memoria fisica si verifica il trashing : il sistema operativo impiega più tempo a trasferire le pagine da/e su disco che ad effettuare lavoro utile. L’hard disk viene utilizzato intensamente e il computer diventa inutilizzabile -> la soluzione è aumentare la quantità di RAM oppure usare meno programmi contemporaneamente (dato che la RAM è molto più veloce dell’hard disk, aumentare la quantità di RAM può migliorare di molto le prestazioni del computer, perché il sistema operativo dovrà fare ricorso meno frequentemente all’hard disk per implementare la memoria virtuale). ○ Linguaggio ad alto livello per l’interazione con l’utente -> esistono due tipologie di interazione utente/sistema operativo: ■ Interazione testuale: basata su comandi scritti, è l’interfaccia più rapida da usare per gli utenti esperti. Richiede poca memoria principale. Vengono utilizzati script -> programmi costituiti da comandi. Molto usata nei sistemi Unix-like ■ Interazione grafica: basata su interfacce grafiche che presentano funzionalità comuni. Ai programmi sono associate finestre (o icone, menu e toolbar), l’interazione è di tipo “point and click” (serve un mouse o un pad) e si utilizza una tecnologia chiamata WYSIWYG (what you see is what you get). Si utilizzano inoltre comandi uniformi, come “copia” per copiare un oggetto (testo, file o immagine…) ○ Gestione ed accesso alle informazioni su memoria secondaria, nota come file system: ■ Il file system è la parte del sistema operativo che si occupa di gestire e strutturare le informazioni memorizzate su supporti di memoria secondaria. Questi dati vengono strutturati e gestiti mediante l’organizzazione in file , utilizzati per la memorizzazione di programmi e dati. ■ Si può immaginare il disco fisso (hard disk) come un quaderno con tante pagine sul quale l’utente scrive varie relazioni (che, in questa sorta di metafora, corrispondono ai file). Quando si cancella un file, rimangono pagine vuote. Quando si modifica un file, la nuova versione potrebbe essere più corta -> rimangono pagine vuote ; più lunga -> potrebbe essere impossibile. ■ Si utilizza dunque un indice , che contiene i numeri delle pagine dei file. Le pagine possono essere aggiunte, spostate, cancellate, senza

sprechi di spazio e senza limitazioni di dimensioni dei file (basta avere delle pagine libere). L’indice è memorizzato sul dispositivo di memoria secondaria, contiene i nomi dei file e le pagine (chiamate cluster ) associate. L’utente può conoscere i nomi dei file memorizzati leggendo l’indice. Il file system usa l’indice per reperire i cluster che compongono i file e trovare lo spazio libero per dei nuovi file. ■ Il file system (soprattutto in sistemi operativi moderni, come Windows) deve fornire una visione astratta dei file, consentendo di: ● dare un nome ai file (filename) ● manipolare i file (operazioni): creare, cancellare, copiare, rinominare, modificare ● accedere alle informazioni indipendentemente dal supporto fisico (vedere file su hard disk e su CD allo stesso modo ) ● strutturare i file (file con caratteristiche comuni possono essere ‘raggruppati’) ● proteggere (da lettura, scrittura, cancellazione) i file di utenti diversi ■ Tutti i sistemi operativi, tuttavia, forniscono i seguenti comandi per operare sui file: creazione, cancellazione, copia, visualizzazione, stampa, lettura e modifica, rinomina, visualizzazione delle caratteristiche di un insieme di file (come dimensione, data di creazione e di ultima modifica…) ■ Il numero dei file memorizzati su un disco può essere estremamente elevato, ed un unico “contenitore” di file è scomodo sia per la ricerca di un file, sia per la creazione di un nuovo file (dal momento che non possono esistere due file con lo stesso nome). Il sistema operativo deve quindi fornire una struttura organizzata ai file -> i file vengono raggruppati, consentendo all’utente di seguire criteri di tipo logico. ■ Il sistema operativo mette a disposizione comandi per creare directory (o cartelle ), che contengono gruppi di file, è possibile avere file con lo stesso nome in cartelle diverse. ■ I nomi di file in genere sono formati da due parti: ● Nome : scelto dall’utente. Il sistema pone limitazioni unicamente in rapporto alla lunghezza massima e ai caratteri usabili ● Estensione : separata dal nome con un punto (.). Indica il formato e/o l’applicazione che lo ha creato. ○ Esempi: jpg (indica un immagine in formato JPEG), doc (indica un documento creato su Word),xls (indica un documento creato su Excel) ■ Quando si rinomina un file bisogna stare attenti all’estensione, per non perdere l’associazione dell’ applicativo. Se dimentico l’estensione, il sistema operativo potrebbe non “sapere” più quale applicativo utilizzare per aprire il file. ■ I file sono organizzati secondo una struttura gerarchica ad albero rovesciato, la cui radice è il disco. ■ Importante è il naming dei file; senza le directory, sarebbe sufficiente il nome per indicare il file (infatti non possono esistere due file con lo