Architettura di un Elaboratore
Elaboratore come Macchina
Ricordate la nostra definizione di elaboratore?
Un elaboratore è una entità che può:
- Memorizzare informazioni
- Eseguire sul tali informazioni alcune operazioni elementari
Elaboratore come Macchina
Per questa lezione la modifichiamo un po'.
Un elaboratore è una macchina che può:
- Memorizzare informazioni
- Eseguire sul tali informazioni alcune operazioni elementari
- Ci concentreremo sull'elaboratore come macchina...
- ...in particolare su quello che chiamiamo computer (o calcolatore)
Cominciamo con un po' di storia...
Elaboratori Storici - Analytical Engine
Elaboratori Storici - Analytical Engine
L'Analytical Engine di Charles Babbage (1837)...
Può essere considerato il primo vero computer mai ideato
- Supportava cicli, istruzioni condizionali ed operazioni aritmetiche
- Funzionava grazie ad un motore a vapore
Non è stato mai costruito (la tecnologia era inadeguata)
Elaboratori Storici - Z3
Il primo computer funzionante è stato lo Z3 (1941):
- Progettato dal Konrad Zuse, a Berlino
- Era un macchina elettromeccanica (basata su relays)
- Sviluppo interrotto durante la guerra per taglio di fondi
Elaboratori Moderni
Oggi un computer si presenta così (più o meno)
Elaboratori Moderni
In questa lezione ci interessa però come sia fatto all'interno
Elaboratori Moderni
In questa lezione ci interessa però come sia fatto all'interno
Questo componente si chiama scheda madre
Elaboratori Moderni
In questa lezione ci interessa però come sia fatto all'interno
Qui c'è la Central Processing Unit (CPU)
Elaboratori Moderni
In questa lezione ci interessa però come sia fatto all'interno
Questa è la memoria centrale (in particolare la RAM)
Elaboratori Moderni
In questa lezione ci interessa però come sia fatto all'interno
Qui vedete alcune porte e periferiche (disco rigido e lettore dischi ottici)
Elaboratori Moderni
In questa lezione ci interessa però come sia fatto all'interno
Questa è una Graphics Processing Unit (GPU)
Macchina di Von Neumann
Dal punto di vista logico, lo schema è grossomodo il seguente:
Ci sono tre componenti principali:
- La CPU
- La memoria centrale
- E le periferiche di I/O
Connesse da un fascio di connessioni elettriche chiamato bus
Macchina di Von Neumann
Dal punto di vista logico, lo schema è grossomodo il seguente:
Questa architettura è nota come macchina di Von Neumann
Il ruolo del BUS è svolto dalla scheda madre
- In realtà, la scheda madre comprende molti BUS...
- ...ed i componenti HW che servono a controllarli
In ogni caso, essa consente agli altri componenti di comunicare
Central Processing Unit (CPU)
La CPU è un componente HW in grado di eseguire istruzioni
- Effettua calcoli e gestisce il flusso di controllo
- Viene chiamata anche processore o microprocessore
È il componente più importante di un computer
- Oggi è spesso affiancata da processori dedicati (acceleratori)
- Es. GPU per operazioni grafiche
Memoria Centrale
La memoria centrale ha il compito di
- Memorizzare i programmi in esecuzione
- Memorizzare i dati su cui essi stanno operando
È divisa in due categorie principali...
Memoria Centrale - RAM e ROM
Random Access Memory (RAM):
- Memoria volatile ad accesso rapido
- Volatile = il contenuto si perde se il computer viene spento
- Dimensioni tipiche: 1GB-16GB
Read Only Memory (ROM):
- Memoria persistente
- Tipicamente tecnologia Flash: la stessa delle chiavette
- Originariamente era non modificabile (di qui il nome)
- Contiene un programma che gestisce l'avvio del computer
- Sulla maggior parte dei sistemi, si chiama BIOS
Si chiamano anche periferiche e comprendono:
- Tutti gli altri dispositivi (monitor, tastiera, dischi rigidi...)
- Le interfacce di comunicazione (rete ethernet, rete wireless, USB...)
Una classe di periferiche importante è data dalla memoria di massa...
Dispositivi di I/O: Memoria di Massa
La memoria di massa comprende le periferiche che
Memorizzano in modo persistente grosse quantità di dati
- Dimensioni tipiche:
- 16GB-1TB per le "chiavette" USB
- 500GB-4TB per i dischi rigidi
- 128GB-960GB per gli SSD (Solid State Drive)
Funzionamento di un Elaboratore
Come Funziona un Computer?
Vediam giusto qualche dettaglio
Tutto comincia con il "clock"
- Un cristallo di quarzo e qualche circuito...
- ...Vengono utilizzati per generare un'onda quadra
Questo segnale si chiama clock
- La frequenza del clock si misura in Hz (1/sec)
- 2.3GHz = 2,300,000,000 oscillazioni al secondo
Ciclo Fetch/Decode/Execute
- Ad ogni fronte (diciamo di salita) del clock...
- ...La CPU svolge un passo del ciclo di elaborazione delle istruzioni:
Si chiama ciclo fetch/decode/execute
- Comprende tre fasi
- Descrive l'attività principale svolta dalla CPU
Ciclo Fetch/Decode/Execute
- Ad ogni fronte (diciamo di salita) del clock...
- ...La CPU svolge un passo del ciclo di elaborazione delle istruzioni:
L'esecuzione avviene "in pipeline"
- Come in una catena di montaggio
- Ad ogni passo, le istruzioni avanzano di stadio
Ciclo Fetch/Decode/Execute
- Ad ogni fronte (diciamo di salita) del clock...
- ...La CPU svolge un passo del ciclo di elaborazione delle istruzioni:
L'esecuzione avviene "in pipeline"
- Come in una catena di montaggio
- Ad ogni passo, le istruzioni avanzano di stadio
Ciclo Fetch/Decode/Execute
- Ad ogni fronte (diciamo di salita) del clock...
- ...La CPU svolge un passo del ciclo di elaborazione delle istruzioni:
L'esecuzione avviene "in pipeline"
- Come in una catena di montaggio
- Ad ogni passo, le istruzioni avanzano di stadio
Ciclo Fetch/Decode/Execute
- Ad ogni fronte (diciamo di salita) del clock...
- ...La CPU svolge un passo del ciclo di elaborazione delle istruzioni:
L'esecuzione avviene "in pipeline"
- Come in una catena di montaggio
- Ad ogni passo, le istruzioni avanzano di stadio
Ciclo Fetch/Decode/Execute
Fase FETCH:
- La CPU accede alla memoria centrale...
- ...e recupera una istruzione
Fase DECODE:
- In base al contenuto dell'istruzione...
- ...l'HW viene predisposto alla sua esecuzione
Fase EXECUTE:
- L'istruzione viene eseguita
A prima vista, somiglia un po' a quello che fa Octave...
Rappresentazione Binaria
...Solo che le istruzioni si presentano così:
- Ogni informazione su un computer è rappresentata...
- ...utilizzando solo le cifre
0
e 1
(e.g. 0 e 1.25 Volt)
Questa rappresentazione si chiama codice binario
Rappresentazione Binaria
...Solo che le istruzioni si presentano così:
- Inoltre, i tipi di istruzioni sono molto semplici
- E.g. operazioni aritmetiche elementari, niente cicli for...
Come rendere utilizzabile un sistema di questo tipo?
Rappresentazione dei Numeri Naturali
Codice Binario
Cominciamo a capire come rappresentare informazioni
- Sappiamo che sono in codice binario
- La informazioni più importanti sono istruzioni e numeri
Noi ci focalizzeremo sui numeri
- Altri tipi di informazione sono rappresentabili mediante numeri
- E.g. immagini, suoni...
Cominciamo con i numeri naturali (i.e. in N)
Rappresentazione dei Numeri Naturali
Consideriamo per esempio:
1265
Che cos'è?
Rappresentazione dei Numeri Naturali
Consideriamo per esempio:
1265
Che cos'è?
- Tecnicamente non è un numero, ma una rappresentazione
Corrisponde al numero:
1×103+2×102+6×101+5×100
- Utilizziamo il numero 10 come base
- I simboli (i.e. cifre) 0-9 per denotare i numeri naturali minori di 10
Diamo un peso alle cifre in base alla loro posizione
Notazione Posizionale
Il metodo si chiama notazione posizionale
- Data una base
B
- Allora le cifre vanno da
0
a B−1
E la rappresentazione:
dn−1,dn−2,…d1,d0
Corrisponde al numero:
n−1∑k=0dkBk
Rappresentazione in Base Due
Vediamo qualche esempio in base due:
Consideriamo il numero in base due:
1011012
A cosa corrisponde?
Rappresentazione in Base Due
Vediamo qualche esempio in base due:
Consideriamo il numero in base due:
1011012
A cosa corrisponde?
1×25+0×24+1×23+1×22+0×21+1×20
Il risultato è:
32+8+4+1=45
Rappresentazione in Base Due
Vediamo qualche esempio in base due:
Consideriamo il numero in base due:
11002
A cosa corrisponde?
Rappresentazione in Base Due
Vediamo qualche esempio in base due:
Consideriamo il numero in base due:
11002
A cosa corrisponde?
1×23+1×22+0×21+0×20
Il risultato è:
8+4=12
Rappresentazione in Base Due
Vediamo qualche esempio in base due:
There are only
10
types of people:
those who understand binary
and those who don't
Numeri Rappresentabili
Quanti numeri si possono rappresentare con N cifre?
- Ci sono
BN
possibili combinazioni di simboli...
- ...quindi
BN
numeri
Il range rappresentabile è:
{0..BN−1}
In base due:
- Con 16 bit:
{0..65,535}
- Con 32 bit:
{0..>4×109}
- Con 64 bit:
{0..>1.8×1019}
Numeri Rappresentabili
Quanti numeri si possono rappresentare con N cifre?
- Ci sono
BN
possibili combinazioni di simboli...
- ...quindi
BN
numeri
Il range rappresentabile è:
{0..BN−1}
In Octave, si possono convertire numeri reali in:
- Numeri naturali a 16 bit:
uint16(<numero>)
- Numeri naturali a 32 bit:
uint32(<numero>)
- Numeri naturali a 64 bit:
uint64(<numero>)
Non li useremo quasi mai
Conversione di Base
Come si ottiene la rappresentazione di un numero in base B?
- Si utilizza il metodo delle divisioni ripetute...
- ...che si basa sulla divisione intera
Divisione intera
Dato un numero x
ed un divisore B
, la divisione intera denota:
- Un quoziente intero
q
- Un resto intero
r<B
Tali che: x=qB+r
- Sembra chissà che, ma è la divisione delle elementari :-)
Conversione di Base
Metodo delle divisioni ripetute
Questa è la descrizione del metodo in pseudo-codice:
k = 0
while x > 0
x = <quoziente della divisione intera x/B>
dk = <resto della divisione intera x/B>
k = k + 1
end
- Si divide ripetutamente
x
per la base
- Ad ogni passo si ottiene una cifra
dk
Conversione di Base - Un Esempio
Convertiamo il numero 111
in base due:
x |
q |
r |
111 |
55 |
1 |
→d0=1 |
55 |
27 |
1 |
→d1=1 |
27 |
13 |
1 |
→d2=1 |
13 |
6 |
1 |
→d3=1 |
6 |
3 |
0 |
→d4=0 |
3 |
1 |
1 |
→d5=1 |
1 |
0 |
1 |
→d6=1 |
Quindi: 111
equivale a 11011112
Operazioni con i Numeri Naturali
Le operazioni in base 2 si fanno come quelle in base 10
Basta ricordarsi che:
- Le cifre sono solo
0
e 1
- Il riporto può essere solo
0
o 1
Come esempio, vediamo una somma:
1010111+=
Operazioni con i Numeri Naturali
Le operazioni in base 2 si fanno come quelle in base 10
Basta ricordarsi che:
- Le cifre sono solo
0
e 1
- Il riporto può essere solo
0
o 1
Come esempio, vediamo una somma:
10101111+=
Operazioni con i Numeri Naturali
Le operazioni in base 2 si fanno come quelle in base 10
Basta ricordarsi che:
- Le cifre sono solo
0
e 1
- Il riporto può essere solo
0
o 1
Come esempio, vediamo una somma:
1101011101+=
Operazioni con i Numeri Naturali
Le operazioni in base 2 si fanno come quelle in base 10
Basta ricordarsi che:
- Le cifre sono solo
0
e 1
- Il riporto può essere solo
0
o 1
Come esempio, vediamo una somma:
111010111001+=
Operazioni con i Numeri Naturali
Le operazioni in base 2 si fanno come quelle in base 10
Basta ricordarsi che:
- Le cifre sono solo
0
e 1
- Il riporto può essere solo
0
o 1
Come esempio, vediamo una somma:
11110101110001+=
Operazioni con i Numeri Naturali
Le operazioni in base 2 si fanno come quelle in base 10
Basta ricordarsi che:
- Le cifre sono solo
0
e 1
- Il riporto può essere solo
0
o 1
Come esempio, vediamo una somma:
111101011110001+=
Numeri Relativi, Razionali,
Notazione a Virgola Mobile
Numeri Relativi in Base Due
Abbiamo visto come rappresentare numeri naturali
Riusciamo a rappresentare anche i numeri relativi (i.e. Z)?
Il problema è come gestire il segno
- Prima modalità: usare un bit di segno
- Seconda modalità: rappresentazione in complemento a 2
La seconda modalità è la più utilizzata nei calcolatori
Noi però vedremo solo la prima
È più simile a quella che si usa per i numeri "reali"
Bit di Segno + Valore Assoluto
I numeri in Z si possono rappresentare:
- Usando un bit per il segno...
- ...ed un numero naturale per il valore assoluto
Tipicamente:
- Bit di segno a
1
→ segno −
- Bit di segno a
0
→ segno +
Esempi:
−210 = 1 102
510 = 0 1012
Bit di Segno + Valore Assoluto
I numeri in Z si possono rappresentare:
- Usando un bit per il segno...
- ...ed un numero naturale per il valore assoluto
Tipicamente:
- Bit di segno a
1
→ segno −
- Bit di segno a
0
→ segno +
In Octave:
int16(<numero>)
, int32(<numero>)
, int64(<numero>)
- Attenzione: la rappresentazione è un po' diversa
Operazioni con i Numeri Relativi
Le operazioni funzionano di nuovo come in base 10
z=x+y
Se x e y hanno lo stesso segno:
- Se sono positivi, il risultato è z=|x|+|y|
- Se sono negativi, il risultato è z=−(|x|+|y|)
Operazioni con i Numeri Relativi
Le operazioni funzionano di nuovo come in base 10
z=x+y
Se x e y hanno lo stesso segno:
- Se sono positivi, il risultato è z=|x|+|y|
- Se sono negativi, il risultato è z=−(|x|+|y|)
Se x e y hanno segno opposto:
- Consideriamo per semplicità solo il caso y<0
- Se |x|>|y|, il risultato è z=|x|−|y|
- Se |x|<|y|, il risultato è z=−(|y|−|x|)
Di nuovo, sono le stesse regole che siamo abituati ad applicare!
Numeri Razionali in Base Due
Proviamo a passare ai numeri razionali (in Q)
- Supponiamo che siano rappresentati in forma decimale. Es.
5.375
- O più in generale, data una base
B
, nella forma:
dn−1dn−2…d0.d−1d−2…d−m
- Con
n
cifre nella parte intera ed m
cifre nella parte frazionaria
La rappresentazione corrisponde a:
n−1∑k=−mdkBk
- E.g.
5.375=5×100+3×10−1+7×10−2+5×10−5
Conversione di Base
Una osservazione importante:
- La parte frazionaria è sempre
<1
- La base
B
è sempre >1
Quindi, qualsiasi sia B
, la posizione del separatore ".
" non cambia
Questo vuol dire che possiamo trattare separatamente:
- La parte intera (che sappiamo già gestire)
- E la parte frazionaria
Come convertire in base B
la parte frazionaria?
Possiamo usare il metodo delle moltiplicazioni ripetute
Conversione di Base
Metodo delle moltiplicazioni ripetute
Questa è la descrizione del metodo in pseudo-codice:
k = -1
while x > 0
y = x×B
dk = <parte intera di y>
x = <parte frazionaria di y>
k = k - 1
end
- Si moltiplica ripetutamente
x
per la base
- Ad ogni passo si ottiene una cifra
dk
Conversione di Base - Un Esempio
Convertiamo il numero 0.375
in base due:
x |
y |
⌊y⌋ |
0.375 |
0.75 |
0 |
→d−1=0 |
0.75 |
1.5 |
1 |
→d−2=1 |
0.50 |
1.0 |
1 |
→d−3=1 |
- Quindi
0.375
corrisponde a 0.0112
- Il numero
5.375
(per esempio) corrisponde a 101.0112
Perché Razionali e non Reali?
Guardiamo un attimo la formula per valutare una rappresentazione
n−1∑k=−mdkBk
- Costruisce un numero sommando potenze di
B
...
- ...Per
k<0
queste sono frazioni
Prima conseguenza importante:
Possiamo rappresentare solo numeri razionali
- Ossia esprimibili come frazioni
- Quando in Octave parliamo di numeri reali, stiamo "barando"
- In realtà, li approssimiamo come razionali
Perché Razionali e non Reali?
Guardiamo un attimo la formula per valutare una rappresentazione
n−1∑k=−mdkBk
- Costruisce un numero sommando potenze di
B
...
- ...Per
k<0
queste sono frazioni
Seconda conseguenza importante:
- Convertendo un numero razionale in base
B
...
- ...Può capitare che la parte frazionaria...
- ...Non sia esprimibile in termini di potenze di
B
Se succede, la rappresentazione è infinita e periodica
Qualche Esempio
Il numero 1/3
è periodico in base 10
ed anche in base 2
x |
y |
⌊y⌋ |
1/3 |
2/3 |
0 |
→d−1=0 |
2/3 |
4/3 |
1 |
→d−2=1 |
1/3 |
2/3 |
0 |
→d−3=0 |
2/3 |
… |
Il risultato è 0.¯012
Come rappresentare un numero periodico?
- In pratica, non lo facciamo
- La rappresentazione viene troncata ed approssimata
Qualche Esempio
Il numero 0.1
non è periodico in base 10
ma lo è base 2
x |
y |
⌊y⌋ |
0.1 |
0.2 |
0 |
→d−1=0 |
0.2 |
0.4 |
0 |
→d−2=0 |
0.4 |
0.8 |
0 |
→d−3=0 |
0.8 |
1.6 |
1 |
→d−4=1 |
0.6 |
1.2 |
1 |
→d−5=1 |
0.2 |
… |
Il risultato è 0.0¯00112
Rappresentazione in Virgola Mobile
In realtà, nel calcolatore, per i numeri razionali...
...Si usa la notazione in virgola mobile (floating point)
È la notazione scientifica! Vediamo come funziona in base 10:
- Dato un numero in forma decimale:
501.3236
- Si fa in modo che abbia una sola cifra nella parte intera
- Per spostare il separatore "
.
", si introduce un esponente:
5.013236×102
- Valore dell'esponente = numero di spostamenti di "
.
"
Rappresentazione in Virgola Mobile
La stessa regola si applica in base due:
Per esempio, per un numero >1
abbiamo:
1001001.10010112⟶(1.0010011001011×26)2
Oppure un numero <1
:
0.00110112⟶(1.1011×2−3)2
- Se il separatore si sposta verso dx, l'esponente è negativo
Quindi un numero in virgola mobile è definito da:
- Il valore a sx del prodotto, chiamato mantissa
- Il valore dell'esponente
Rappresentazione in Virgola Mobile
Nei calcolatori i numeri razionali sono rappresentati mediante:
- Un bit per il segno
- Un numero fisso di bit per mantissa
- Un numero fisso di bit per l'esponente
Le dimensioni sono fissate dallo standard IEEE754:
- precisione singola:
- 23 bit per la mantissa, 8 per l'esponente
- precisione doppia:
- 52 bit per la mantissa, 11 per l'esponente
Rappresentazione in Virgola Mobile
Nei calcolatori i numeri razionali sono rappresentati mediante:
- Un bit per il segno
- Un numero fisso di bit per mantissa
- Un numero fisso di bit per l'esponente
Di conseguenza, i range di valori rappresentabili sono:
- precisione singola:
{<−3.40×1038..>3.40×1038}
- precisione doppia:
{<−1.80×10308..>1.80×10308}
Octave di default utilizza i numeri in precisione doppia
- Per usare la precisione singola:
float(<numero>)
Valori Speciali ed Operazioni
La notazione in virgola mobile può rappresentare dei valori speciali
- Valori infiniti:
+∞
, −∞
- Limite destro e sinistro di
0
: 0−
, 0+
- Risultati di operazioni senza senso:
NaN
(Not A Number)
Corrispondono a degli assegnamenti "scorretti" di mantissa ed esp.
Valori Speciali ed Operazioni
La notazione in virgola mobile può rappresentare dei valori speciali
- Valori infiniti:
+∞
, −∞
- Limite destro e sinistro di
0
: 0−
, 0+
- Risultati di operazioni senza senso:
NaN
(Not A Number)
Corrispondono a degli assegnamenti "scorretti" di mantissa ed esp.
Le operazioni si possono svolgere fanno normalmente
Una accortezza: per sommare/sottrarre va uguagliato l'esponente
1.15×102+1.7×101=1.01×21+1.1×2−1=
Valori Speciali ed Operazioni
La notazione in virgola mobile può rappresentare dei valori speciali
- Valori infiniti:
+∞
, −∞
- Limite destro e sinistro di
0
: 0−
, 0+
- Risultati di operazioni senza senso:
NaN
(Not A Number)
Corrispondono a degli assegnamenti "scorretti" di mantissa ed esp.
Le operazioni si possono svolgere fanno normalmente
Una accortezza: per sommare/sottrarre va adeguato l'esponente
11.5×101+1.7×101=10.10×20+0.11×20=
Valori Speciali ed Operazioni
La notazione in virgola mobile può rappresentare dei valori speciali
- Valori infiniti:
+∞
, −∞
- Limite destro e sinistro di
0
: 0−
, 0+
- Risultati di operazioni senza senso:
NaN
(Not A Number)
Corrispondono a degli assegnamenti "scorretti" di mantissa ed esp.
Le operazioni si possono svolgere fanno normalmente
Una accortezza: per sommare/sottrarre va adeguato l'esponente
11.5×101+1.7×101=13.2×10110.10×20+0.11×20=11.01×20
Programmare un Computer
Come fare a programmare un computer?
Per i primi programmatori non c'era scelta:
- Bisognava utilizzare solo le istruzioni native...
- ...su un supporto che il computer potesse leggere direttamente
Un programma così fatto è scritto in linguaggio macchina
- Scrivere programmi in linguaggio macchina è lento e difficile
Il Primo Programmatore
La prima persona a scrivere programmi è stata Ada Lovelace
- Fu una collaboratrice di Charles Babbage
- Scrisse programmi per l'analytical engine
- Non eseguirono mai, ma avrebbero potuto
Schede Perforate
- Dai temi di Ada fino alla fine degli anni 70...
- ...i programmi venivano scritti su schede perforate
- Venivano scritte con speciali "macchine da scrivere"
- Venivano inserite in appositi lettori elettromeccanici
Traduttori
Come rendere l'attività di programmazione più semplice?
Possiamo scrivere un programma per usare un linguaggio diverso!
Si chiama traduttore un programma che traduce un linguaggio formale in un altro linguaggio formale
Grazie ai traduttori, possiamo programmare con un linguaggio che:
- Prescinde dai dettagli del linguaggio macchina
- Opera ad un livello di astrazione superiore
Un linguaggio di questo tipo di dice di alto livello
Compilatori ed Interpreti
Ci sono due grandi categorie di traduttori:
Compilatori
Un compilatore traduce un programma prima della sua esecuzione
- Un programma scritto in un linguaggio di alto livello...
- ...Viene tradotto in linguaggio macchina (compilato)...
- ...A questo punto può essere eseguito direttamente
Compilatori ed Interpreti
Ci sono due grandi categorie di traduttori:
Interpreti
Un interprete traduce un programma durante la sua esecuzione
- Le istruzioni di alto livello vengono considerate una ad una...
- ...Tradotte in linguaggio macchina...
- ...E poi eseguite
Compilatori e Interpreti
Un confronto tra i due approcci:
I programmi compilati sono più efficienti di quelli interpretati
- L'interprete esegue istruzioni addizionali per controllare l'esecuzione
- I compilatori spesso ottimizzazione il codice durante la traduzione
Usare un interprete semplifica la stesura di un programma
- Non serve compilare: è un passaggio in meno
- La compilazione può richiedere tempo (anche parecchio)
Octave è un interprete: è pensato per sviluppare in fretta
Un Caso Estremo
Tecnicamente, è possibile realizzare un interprete che:
- Prende in ingresso ed esegue istruzioni in linguaggio macchina
- Permette di simulare la presenza di un altro calcolatore
Un interprete del genere si chiama Macchina Virtuale
Perché dovremmo fare una cosa del genere?
- Permette di installare sulla VM un altro sistema operativo
- E.g. Linux su una VM, con la VM che esegue su OS X
- Permette di emulare dell'hardware diverso
- E.g. sviluppo di SW per smartphone
Limiti dei Linguaggi di Alto Livelli
- I linguaggi di alto livello sono una bella invenzione...
- ...ma gestire un calcolatore resta una faccenda complicata
Una possibile soluzione
Scrivere dei componenti software:
- Ogni componente gestisce un aspetto del calcolatore
- I componenti devono essere utilizzabili da altri programmi
- Pensateli un po' come le "funzioni" in Octave
Questa collezione dei componenti SW che facilita la gestione del calcolatore si chiama Sistema Operativo
Organizzazione del Software a Livelli
Il SO fornisce le basi per lo sviluppo e l'esecuzione di altri programmi
Conseguenza: il SW su un calcolatore è organizzato a livelli
- I programmi applicativi sono i programmi "normali"
- Si basano sulle funzionalità offerte dal sistema operativo
Organizzazione del Software a Livelli
Il SO fornisce le basi per lo sviluppo e l'esecuzione di altri programmi
Conseguenza: il SW su un calcolatore è organizzato a livelli
- I driver di dispositivo sono altri componenti SW
- Permettono al SO di interagire con alcune periferiche
- Es. scanner e stampanti, mouse...
Compiti del Sistema Operativo
I compiti principali del sistema operativo sono:
- Gestione dei processi
- Gestione della memoria centrale
- Gestione della memoria di massa
- Gestione degli utenti e della sicurezza
- Gestione delle risorse di comunicazione (rete)
- Gestione dei dispositivi di I/O (insieme ai driver)
Per ognuno di questi aspetti il SO
Permette di gestire le risorse ad un livello di astrazione superiore
- Es. "aprire/chiudere programmi", "leggere un file"...
- Sono concetti che non esistono senza un SO!
Interfaccia di un SO
Ogni SO contiene un programma fornisce una interfaccia
L'interfaccia è un programma che permette di interagire con il SO
- Es. permette di eseguire un programma, leggere un file...
Ci sono due grandi categorie di interfacce
- Interfacce testuali: sono degli interpreti di comandi
- Interfacce grafiche: tipicamente basata su "finestre"
Windows, OS X e Linux le offrone entrambe
- Linux enfatizza l'interfaccia testuale
- OS X e (soprattutto) Win enfatizzano quella grafica
Esempi di Interfaccia
Un esempio: interfaccia grafica di Win7
Esempi di Interfaccia
Un esempio: interfaccia testuale di OS X
Gestione dei Processi
Vediamo un primo compito del SO: la gestione dei processi
Un processo è una astrazione che corrisponde
ad un programma in esecuzione
Quando "aprite un programma" il SO:
- Sposta il codice del programma in memoria centrale
- Predispone alcuni dati per gestirne l'esecuzione
- Fa sì che la CPU inizi ad eseguire le istruzioni del programma
Gestione dei Processi
Quasi tutti i SO possono gestire processi multipli
Se ci sono più processi che core, questi sono gestiti in time sharing
Per ogni core, il tempo viene diviso in unità, dette quanti:
- Ad ogni quanto di tempo, un solo processo è in esecuzione
- Allo scadere del quanto, il core viene prelazionato...
- ...Ed un processo diverso viene messo in esecuzione
L'attività di selezione del processo si chiama scheduling
Operazioni sui Processi
Il SO consente di effettuare alcune operazioni sui processi:
- Creazione
- E.g. eseguire un programma
- Visualizzazione dei processi
- Terminazione
- E.g. Chiusura forzata dal Task Manager di Win
- Messa in background
Ce ne sono altre, ma non le vedremo
Gestione della Memoria di Massa
Vediamo un 2° compito del SO: la gestione della memoria di massa
Il SO fornisce una astrazione fondamentale in questo contesto:
Si chiama file una astrazione che
corrisponde ad una sequenza di bit
- Senza SO non esistono i file!
- ...Ma solo bit sul disco rigido
Il componente che realizza tale astrazione si chiama File System
- Alcuni file system "famosi": ntfs, exFAT, hfs, ext3
Gestione della Memoria di Massa
Vediamo un 2° compito del SO: la gestione della memoria di massa
Il SO fornisce una astrazione fondamentale in questo contesto:
Si chiama file una astrazione che
corrisponde ad una sequenza di bit
Perché un disco rigido (ogni memoria di massa) sia utilizzabile:
- Deve essere predisposto per il file system
- Questa operazione si chiama formattazione
File: Nome ed Estensione
Ogni file ha un nome
Per esempio: l'isola del tesoro.pdf
- Di solito il nome di un file termina con una estensione
- Es. ".pdf", ".docx", ".txt", ".m"
A che cosa serve l'estensione?
- L'estensione fornisce una indicazione sul contenuto del file
- Serve per determinare (e.g.) con che programma aprirlo
Non ha alcun effetto reale sul contenuto!
- Può essere cambiata arbitrariamente...
- ...E non è nemmeno necessaria (e.g. su Linux spesso è assente)
Organizzazione dei Files
I file sono organizzati in directory (o cartelle)
- File e directory formano una struttura ad albero
- C'è sempre una directory che fa da radice
- Su Win si chiama "C:\", su Lin e OS X si chiama "/"
Organizzazione dei Files
Ogni elemento nel file system è identificato dal suo percorso
Primo tipo: percorso assoluto (a partire dalla radice)
- Percorso = nomi dei nodi attraversati
- Come separatore si usa
"\"
sotto Win e "/"
sotto Lin e OS X
Organizzazione dei Files
Ogni elemento nel file system è identificato dal suo percorso
Primo tipo: percorso assoluto (a partire dalla radice)
Organizzazione dei Files
Ogni elemento nel file system è identificato dal suo percorso
Primo tipo: percorso assoluto (a partire dalla radice)
- Es.
"/Users/home/books/l'isola del tesoro.pdf"
Organizzazione dei Files
Ogni elemento nel file system è identificato dal suo percorso
Secondo tipo: percorso relativo (partenza arbitraria)
- Percorso = nomi dei nodi attraversati
- Ogni volta che si va "indietro": notazione
".."
Organizzazione dei Files
Ogni elemento nel file system è identificato dal suo percorso
Secondo tipo: percorso relativo (partenza arbitraria)
- Es.
"../books/l'isola del tesoro.pdf"
- "
..
" permette di passare da "songs" a "home"
Importanza dei Percorsi
Le notazioni a stringa dei percorsi sono importanti
- In Octave, le useremo per accedere a file di dati
- In particolare, utilizzeremo i percorsi relativi
Quando un programma esegue, è sempre associato ad una directory
- In Octave, è la directory visibile nel "file browser"
A partire da tale directory:
- Possiamo riferirci ad un file usando un percorso relativo
Elementi di Informatica e Applicazioni Numeriche T
Architettura di un Elaboratore