Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
e
signorine,
ecco
a
voi
tutto
il
materiale
di
teoria
di
Informatica,
necessario
da
sapere
per
l’esame.
Spero
vi
torni
utile
e
che
prendiate
tutti
un
bel
voto.
E’
il
frutto
di
appunti
presi
durante
tutto
il
corso,
se
decidete
di
diffonderli,
siete
pregati
di
non
intaccare
la
mia
5irma
alla
5ine.
Voglio
i
Big
Like
come
al
solito.
Buona
serata.
L’informatica
deve
avere
un
linguaggio
per
poter
rappresentare
le
informazioni,
ciò
è
rappresentato
dal
linguaggio
binario
(costituito
dai
due
simboli
“0”
e
“1”).
L’alfabeto
del
calcolatore
è
costituito
da
due
soli
simboli
che
sono
i
bit
che
sono
due
perché
rappresentano
l’interruttore
aperto
(0)
e
chiuso
(1)
in
quanto
tutto
è
basato
su
circuiti
elettrici.
Un
carattere
alfabetico
ad
esempio,
necessita
di
8
bit,
che
costituisce
1
byte.
A
volte
8
bit
non
bastano
per
alcune
parole,
pertanto
servono
16
bit
(come
ad
esempio
un
numero
intero).
La
codiIica
di
un
informazione
come
ad
esempio
un
numero
reale,
necessita
di
4
byte
ovvero
32
bit.
L’elaborazione
è
intesa
come
“far
di
conto”
si
misura
in
milioni
di
istruzioni
al
secondo
(MIPS)
ed
in
milioni
di
istruzioni
aritmetiche
su
numeri
reali
al
secondo
(MFLOPS)
La
memorizzazione
si
misura
in
capacità
di
bit
e
si
misura
con
le
potenze
di
2
in
quanto
il
calcolatore
lavora
in
base
2.
Ogni transistor all’interno di un processore misura 20 milionesimi di millimetro in un Intel i7.
Dato
che
sta
diventando
difIicoltoso
scendere
sotto
i
20nm
per
i
transistor,
si
sta
pensando
di
passare
al
carbonio,
in
particolare
al
grafene.
Esistono
due
grandi
classi
di
elaboratori:
general-‐purpose
(calcolatori
di
uso
generale)
che
sono
i
calcolatori
programmabili
dall’utente
e
special-‐purpose
(calcolatori
dedicati)
chiamati
anche
embedded.
La
memoria
su
cui
si
caricano
i
programmi
è
di
tipo
RAM
per
i
general-‐purpose
e
di
tipo
ROM
per
i
special-‐purpose.
Un
algoritmo
è
una
descrizione
precisa
di
una
sequenza
Iinita
di
azioni
che
devono
essere
eseguite
per
giungere
alla
soluzione
di
un
problema.
I
programmi
stanno
inizialmente
in
un
Iile
ma
sono
dormienti
Iino
a
quando
non
verranno
lanciati
e
verranno
posizionati
nella
RAM
ed
a
quel
punto
verranno
eseguiti
dal
processore.
Per
essere
“capito”
dal
processore,
un
programma
è
necessario
che
sia
scritto
in
linguaggio
macchina.
Per
evitare
di
scrivere
interi
programmi
in
linguaggio
macchina,
utilizziamo
quelli
che
si
chiamano
linguaggi
di
programmazione,
in
particolare
utilizziamo
linguaggi
di
alto
livello
(molto
simili
al
linguaggio
umano)
che
mediante
un
traduttore
diventano
linguaggio
macchina.
Il
Iile
sorgente
viene
gestito
da
un
compilatore
che
genera
un
Iile
intermedio
che
viene
preso
da
un
altro
programma
(linker)
che
lo
unisce
alle
librerie
di
sistema
e
genera
il
Iile
eseguibile
che
è
un
Iile
che
può
essere
messo
in
esecuzione
in
quanto
quando
viene
avviato
lo
trasferisce
nella
memoria
RAM
e
da
il
comando
di
avvio
al
processore
(CPU).
Quando
consideriamo
un
elaboratore
andiamo
ad
articolarlo
in
4
blocchi
fondamentali
che
sono
unità
di
ingresso
ed
uscita,
memoria
(2
tipi:
memorie
di
massa
che
sono
permanenti,
memoria
centrale
RAM
dove
sono
allocate
le
informazioni
che
devono
essere
elaborate
e
memoria
centrale
ROM
che
è
studiata
come
un
qualcosa
che
deve
essere
solo
letta)
ed
unità
di
elaborazione
(Central
Processing
Unity:
il
blocco
di
circuiti
che
manipola
l’informazione,
esegue
le
istruzioni
binarie).
I
componenti
fondamentali
di
un
elaboratore
sono
il
processore
(microprocessore
quando
il
chip
è
un
solo
elemento)
e
dalla
memoria
centrale
RAM.
Il
processore
è
costituito
da
vari
blocchi:
ALU
(si
occupa
dei
calcoli,
Arithmetic
and
Logic
Unity,
la
cui
evoluzione
è
la
FPU
che
sta
per
Floating
Point
Unity,
che
lavora
anche
con
le
funzioni
elementari),
i
registri
divisi
in
celle
che
è
la
memoria
locale
in
cui
egli
tiene
i
dati
da
elaborare
nel
momento
corrente
(i
calcolatori
più
potenti
hanno
una
lunghezza
di
memoria
pari
a
32
bit
o
64
bit);
ci
sono
poi
i
blocchi
che
gestiscono
le
istruzioni
che
sono
l’unità
di
decodiIica
istruzioni
e
l’unità
di
gestione
indirizzi:
la
prima
si
occupa
di
capire
cosa
fare
di
un
programma,
la
seconda
si
occupa
di
ricavare
i
dati
che
possono
essere
allocati
nel
registro
o
nella
RAM;
vi
è
l’unità
di
gestione
di
BUS
che
si
occupa
dei
collegamenti
con
i
vari
componenti.
Caratteristiche
del
BUS:
passa
un
solo
dato
per
volta
ma
ampiezza
e
frequenza
determinano
il
numero
di
bit
ed
il
numero
di
dati
trasportabili
in
funzione
del
tempo.
I
collegamenti
sono
di
due
tipi:
i
BUS
interni
che
sono
quelli
che
collegano
i
circuiti
interni
al
pc,
ed
i
BUS
esterni
che
collegano
ad
esempio
stampanti,
pen
drive,
mouse
eccetera.
Un
calcolatore,
o
meglio
un
processore
fa
cicli
che
constano
nel
prelevare
un
istruzione
dalla
memoria
centrale
(fase
di
Fetch),
interpretare
l’istruzione
(fase
di
Decode),
eseguier
(fase
di
Execution).
Il
Clock
scandisce
il
tempo
per
eseguire
tutte
le
operazioni
che
devono
avvenire
all’interno
di
un
elaboratore.
Le
memorie
sono
degli
elementi
che
memorizzano
l’informazione
e
sono
costiuite
da
tre
elementi:
devono
essere
indirizzate
(costituite
da
tante
locazioni
numerate,
tante
celle),
hanno
come
caratteristica
il
parallelismo
ovvero
la
misura
che
costituisce
ogni
cella,
l’accesso
che
è
o
sequenziale
o
casuale
(sequenziale
che
consiste
nel
leggere
tutte
le
celle
in
ordine
Iino
ad
arrivare
alla
cella
desiderata,
casuale
che
consiste
nel
raggiungere
direttamente
la
cella
desiderata).
La
memoria
centrale
è
costituita
da
RAM,
RAM
Video
e
ROM.
La
prima
si
occupa
del
software,
la
seconda
dei
video,
la
terza
dei
programmi
di
boot.
Quando
accendiamo
il
pc,
viene
data
alimentazione
a
tutte
le
componenti
interne
del
pc.
Appena
si
avvia
il
pc,
il
processore
“vuole”
eseguire
delle
istruzioni,
e
va
a
cercarle
all’interno
della
ROM,
e
si
avvia
il
BIOS
che
fa
la
diagnostica
iniziale
del
sistema
prima
di
avviare
il
sistema
operativo,
calcola
anche
la
quantità
di
memoria
a
disposizione.
Va
a
leggere
il
master
boot
sector
dove
sono
allocati
tutti
i
Iiles
del
sistema
operativo
e
li
trasferisce
all’interno
della
RAM.
Quando
viene
avviata
una
applicazione,
il
processore
cerca
il
Iile
all’interno
del
disco
e
lo
trasferisce
sulla
RAM
rendendolo
eseguibile.
Le
ROM
si
dividono
in
PROM
e
Flash
Memory.
La
differenza
è
la
velocità
di
cancellazione
e
sono
rappresentate
dalle
Pen
Drive
USB
ad
esempio.
Le
Flash
Memory
sono
molto
veloci
ad
essere
lette,
ma
estremamente
lente
quando
devono
essere
scritte.
Le
SSD
(Solid
State
Devices)
sono
di
derivazione
dalla
memoria
ROM.
Si
parte
dalla
ROM
-‐>
EEPROM
-‐>
Flash
Memory
-‐>
SSD.
La
caratteristica
principale
è
la
velocità,
ma
soprattutto
i
consumi
ridotti;
sono
dischi
di
tipo
magnetico.
La
RAM
è
veloce
circa
70
ns,
a
differenza
del
processore
che
lavora
circa
a
10
ns.
Per
evitare
questi
rallentamenti
si
è
pensato
di
inserire
tra
la
RAM
ed
il
Processore
uno
spazio
dove
vengono
allocate
le
istruzioni
con
più
probabilità
di
essere
eseguite
in
seguito
ad
una
data
(probabilità
del
98%),
questo
spazio
si
chiama
CACHE
che
ha
una
velocità
pari
a
2
ns.
I
numeri
binari
si
scrivono
con
la
cifra
meno
signiIicativa
a
destra
che
prende
il
nome
di
LSB
(Less
SigniIicant
Bit)
esattamente
come
nella
notazione
decimale.
Per
sommare
i
binari
sappiamo
che
la
somma
0+1=1+0=1,
che
0+0=0
e
che
1+1=0
con
il
riporto
di
1.
Sommati
due
numeri
rappresentabili
su
N
bit,
dobbiamo
ottenere
un
numero
rappresentabili
su
N
bit.
Quando
però
il
calcolo
restituisce
un
numero
rappresentabile
solo
con
un
numero
di
Bit
superiore
si
genera
un
OVERFLOW
(tracimazione)
ed
il
calcolatore
restituisce
un
errore.
Quando
facciamo
una
sottrazione
sappiamo
che
0-‐0=1-‐1=0,
che
1-‐0=1
e
che
0-‐1=1
con
il
prestito
di
1.
Per
indicare
un
numero
con
segno
si
utilizza
generalmente
uno
0
per
indicare
un
+
ed
un
1
per
indicare
un
–,
si
mette
alla
sinistra
del
numero,
questo
metodo
si
chiama
modulo
e
segno.
Nel
complemento
a
due
si
fa
in
modo
che
il
bit
che
identiIica
il
segno,
venga
attribuito
un
peso,
corrisponde
al
MSB
che
ha
un
meno
davanti.
Ciò
ci
consente
di
avere
una
trasformazione
da
binario
in
decimale
ad
esempio
del
numero
101101
che
diventa
-‐32+8+4+1
=
-‐19
Dipende
dal
tipo
di
codiIica
se
viene
trasformato
un
numero
in
complemento
a
due
o
modulo
e
segno.
Se
il
bit
a
sinistra
è
uno
0
otteniamo
quindi
un
numero
positivo,
viceversa
se
vi
è
un
1,
abbiamo
un
numero
negativo.
Per
passare
da
un
numero
positivo
al
suo
corrispondente
negativo,
si
parte
dal
numero
in
binario
come
ad
esempio
0011
che
è
3,
e
si
scambiano
gli
0
con
gli
1
e
viceversa,
quindi
otteniamo
1100
e
lo
si
somma
con
un
singolo
bit
nella
posizione
del
LSB.
Quindi
otteniamo
1100
+
0001
=
1101
che
corrisponde
a
-‐3.
Non
si
ha
mai
overIlow
quando
si
sommano
operandi
con
segno
discorde,
e
c’è
quando
il
segno
è
concorde.
E’
possibile
rappresentare
un
numero
decimale,
in
base
2,
mediante
3
entità:
segno,
mantissa
(numero
assoluto)
ed
esponente
(numero
relativo).
Un
esempio
1|111|000101
S|Exp|Mantissa
Quindi
abbiamo
5
*
2111
con
segno
negativo
ovvero
-‐5
*
2-‐1
=
-‐2.5
Un
numero
in
questa
notazione
utilizza
di
norma
32
bit
che
corrisponde
ad
un
intervallo
compreso
tra
-‐1038
e
1038
Nei
calcolatori,
i
numeri
con
virgola
mobile,
i
32
bit
vengono
ripartiti
con
1
bit
per
il
segno,
8
bit
per
l’esponente,
e
23
bit
per
la
mantissa..
Il
codice
ASCII
consente
di
rappresentare
52
caratteri
alfabetici,
10
cifre,
segni
di
interpunzione,
caratteri
di
controllo.
Con
lo
standard
ASCII
Unicode
per
esempio,
per
esprimere
tutti
i
caratteri
del
mondo,
vengono
utilizzati
2
byte
per
ogni
carattere.
ASCII
però
non
riesce
a
gestire
la
formattazione
del
foglio
e
si
distinguono
due
tipi
di
Iile
quindi,
quelli
formattati
ed
i
non
formattati.
I
documenti
formattati
hanno
aggiunto
ad
ogni
carattere
un
byte
che
ne
deIinisce
il
font
e
tutte
le
caratteristiche.
La
logica
Booleana
prende
il
nome
da
George
Boole,
che
nel
1847
introdusse
un
nuovo
tipo
di
logica
formale,
basata
su
enunciati
di
cui
è
possibile
veriIicare
in
modo
inequivocabile
la
verità
o
la
falsità.
La
veridicità
viene
rappresentata
da
un
1
(interr.
Chiuso),
e
la
falsità
da
uno
0
(interr.
Aperto).
Nell’algebra
Booleana
le
operazioni
fondamentali
sono
gestite
dagli
operatori
and
(moltiplicazione
logica),
or
(somma
logica)
e
not
(negazione
logica).
Le
immagini
vengono
rappresentate
all’interno
di
un
sistema
digitale
attraverso
una
sequenza
discreta
di
elementi
luminosi.
Si
può
immaginare
un
immagine
come
una
matrice
avente
per
ogni
elemento
un
colore.
Ogni
elemento
prende
il
nome
di
pixel.
Ogni
pixel
viene
rappresentato
da
un
certo
numero
di
bit.
Per
le
immagini
complesse
ed
irregolari
si
adotta
una
codiIica
raster
(detta
anche
bitmap
o
pixmap)
che
le
deIinisce
punto
per
punto
(pixel
o
dot).
Per
le
immagini
create
all’interno
dei
computer,
come
ad
esempio
cartoni
animati,
o
comunque
per
qualsiasi
cosa
basata
su
Iigure
geometriche
regolari,
si
utilizza
una
codiIica
vettoriale.
I
colori
vengono
rappresentati
secondo
la
teoria
additiva
della
colometria,
secondo
la
quale
ogni
colore
è
realizzabile
a
partire
dai
tre
colori
primari
Rosso,
Verde
e
Blu.
Pertanto
si
utilizza
il
sistema
RGB
(red,
green,
blue).
Bisogna
quindi
associare
a
ciascun
pixel,
una
sequenza
di
bit.
In
particolare
ad
ogni
colore
viene
assegnata
una
quantità
di
bit
per
ogni
colore
primario
che
lo
compone.
La
codiIica
che
da
una
precisione
maggiore
dell’immagine,
si
chiama
true
color,
ed
utilizza
3
byte
a
pixel,
suddivisi
con
8
bit
per
ognuno
dei
colori
primari.
La
codiIica
true
color
quindi
è
caratterizzata
da
24
bpp
che
sarebbero
bit
per
pixel.
La
dimensione,
intesa
come
spazio
occupato
da
ogni
immagine
è
dato
dal
prodotto
tra
risoluzione
ed
il
numero
di
bit
necessari
per
ogni
pixel.
Per
rappresentare
le
immagini
direttamente
a
partire
dal
pc,
si
adottano
Iigure
geometriche
regolari
come
ad
esempio
linee
e
Iigure
geometriche.
Tutta
la
semantica
di
queste
Iigure
viene
salvata
all’interno
di
un
Iile
che
prende
il
nome
di
Iile
vector.
Durante
l’elaborazione
di
un
videogioco,
ad
esempio,
si
ha
una
trasformazione
di
un
immagine
vettoriale
in
un
immagine
raster,
ovvero
bidimensionale.
Le
immagini
di
tipo
raster,
sfruttano
una
grande
quantità
di
dati
per
essere
deIinite,
allora
vengono
adottate
quelle
che
si
chiamano
metodi
di
compressione
per
alleggerire
il
peso
delle
immagini.
Queste
ultime
vengono
suddivise
in
due
tipi:
quelle
che
comprimono
con
perdita
di
dati
(lossy
compression),
e
quelle
che
senza
perdita
(loseless
compression).
Le
immagini
in
movimento,
o
video,
sono
costituiti
da
una
sequenza
di
immagini
che
prendono
il
nome
di
fotogramma
o
frame,
le
quali
vengono
proiettate
con
una
frequenza
pari
a
25
fps,
ovvero
25
Hz.
La
codiIica
dei
Iilmati
è
la
mpg.
Ogni
frame
catturato
come
bitmap,
viene
compresso
e
trasformato
in
jpg,
ogni
pixel
viene
confrontato
tra
le
immagini
adiacenti
e
vengono
trasmessi
solo
i
dati
che
hanno
subito
una
variazione.
In
ogni
cd
audio,
il
campione
sonoro
viene
espresso
attraverso
16
bit
e
rappresenta
44100
campioni
al
secondo.
Dato
che
il
cd
audio
è
stereo,
si
ha
la
frequenza
di
1.5
Mbps
circa.
E’
evidente
come
la
codiIica
cd
audio
non
sia
opportuna
per
una
trasmissione
attraverso
la
rete.
Si
è
pensato
quindi
di
sfruttare
la
compressione
anche
per
l’audio,
come
l’MP3
che
comprime
con
perdita.
I
dischi
degli
hard
disk
sono
ricoperti
da
ossido
di
ferro,
in
quanto
si
ha
la
necessità
di
avere
un
materiale
magnetico,
caratterizzato
dall’isteresi,
che
consente
di
“mantenere”
l’informazione.
Questi
cerchi
concentrici
di
ossido
di
ferro
prendono
il
nome
di
tracce,
le
quali
vengono
suddivise
in
porzioni.
Ogni
porzione
è
equivalente
ad
una
calamita,
avendo
quindi
polarità.
In
base
alla
posizione,
sappiamo
se
è
uno
0
oppure
un
1.
Ogni
porzione
della
traccia
rappresenta
un
unico
bit.
Per
rendere
i
Iile
leggibili
più
facilmente,
i
dischi
degli
HD
vengono
divisi
in
settori.
Ogni
settore
è
costituito
da
512byte.
Su
ogni
disco,
nella
prima
parte,
è
immagazzinata
la
tabella
che
prende
il
nome
di
Directory,
che
immagazzina
le
informazioni
riguardanti
tutti
i
Iiles
presenti
sul
disco.
L’accesso
sequenziale
signiIica
che
per
leggere
il
Iile
in
posizione
N
bisogna
scorrere
tutte
le
informazioni
Iino
ad
arrivare
alla
N.
L’informazione
è
suddivisa
in
blocchi
logici
che
prendono
il
nome
di
record.
MS:
+25:
0…….
-‐>
o
per
divisioni
successive
o
per
scomposizione
di
potenze
di
2
+25=+16+8+1
-‐>
1=2^0,
8=2^3,
16=2^4
-‐>
0001
1001
+25
in
modulo
e
segno
è
00011001
CD:
+25
essendo
positivo
è
uguale
a
MS:
0001
1001
-‐18
si
fa
diventare
positivo
partendo
da
MS
e
diventa
0001
0010,
per
calcolare
l’opposto
si
invertono
e
gli
si
somma
1
-‐>
si
calcola
l’opposto
1110
1101
e
gli
sommo
1
-‐>
1110
1110
-‐18
in
CD
è
1110
1110
Se
faccio
la
somma
di
due
numeri
con
segno
opposto,
è
come
se
facessi
la
differenza,
allora
il
numero
viene
in
modulo
più
piccolo
di
quello
che
era
il
più
grande,
pertanto
è
evidente
che
overIlow
non
ci
sarà
quando
effettueremo
la
somma
in
MS.
Per
CD
facciamo
la
somma
bit
a
bit:
0001
1001
+
1110
1110
=
1
0000
0111
OVERFLOW
-‐P4tChEr-‐