IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
Elaborazione automatica dei dati: computer e matlab
1. Appunti di Elaborazione automatica dei dati:
Il Computer ed il Matlab (cenni)
Si ricorda che:
• l'uso degli appunti qui presenti è consentito per solo uso personale e di studio;
• la consultazione è gratuita ed ogni forma atta a ricavarne lucro è vietata!
• gli appunti sono fatti da studenti che non possono assumersi nessuna responsabilità
in merito;
• il materiale qui presente non è sostitutivo ma complementare ai libri di testo:
- devi (e ti consiglio) di consultare e comprare i libri di testo;
• il materiale qui presente è distribuito con licenza Creative Commons
Spero che ciò che hai scaricato ti possa essere utile.
Profman
Il file è stato scaricato in forma gratuita da:
http://profland.altervista.org
oppure da qualche mirror, come:
www.profland.cjb.net www.profland.135.it
o dalla pagina dedicata su slideshare.net:
www.slideshare.net/profman
2. Appunti d’esame
Il computer www.profland.135.it
Il Computer
(autore: jiji)
FASI DI RISOLUZIONE DI UN PROBLEMA
1. Formulazione del problema: Fase di definizione e stesura del problema.
Determinare gli obiettivi appropriati, determinare i vincoli da imporre, esaminare le
alternative a disposizione, limitare il periodo temporale di riferimento.
2. Costruzione di un modello: Il problema deve essere misurabile e quindi
quantizzabile ad es. modelli matematici o modelli fisici. Deve quindi essere
possibile costruire un modello rappresentativo del problema. I modelli potranno
essere concreti che sono oggetti fisici con cui rappresento il mio problema (es.
modelli di veicoli usati per esperimenti nelle gallerie del vento) o astratti che sono
un insieme di relazioni che descrivono il fenomeno in esame, tali relazioni sono di
tipo matematico cioè delle funzioni.
3. Ricerca di un procedimento risolutivo(algoritmo): Il problema deve essere
risolto secondo un procedimento prestabilito e logico. Algoritmo: costruzione della
sequenza di passi logici che se eseguiti portano alla risoluzione del problema
descritto dal modello. Esso è il nostro pensiero.
4. Implementazione dell'algoritmo in un contesto reale (programma). Programma:
traduzione dell'algoritmo in un linguaggio compreso dall'esecutore.
5. Calcolo della soluzione: tale calcolo viene effettuato dall'esecutore
Verifica della soluzione: Non possiamo attuare un procedimento di calcolo inverso
poiché non è vero che ogni funzione ammette inversa non è detto che la funzione sia
iniettiva cioè che ad ogni x corrisponda un unica y e per x diverse corrispondano y
diverse. Inoltre anche se esiste la funzione inversa l'uomo potrebbe non essere capace
di scriverla. Le funzioni complesse infatti associano insiemi di numeri ad insiemi di
numeri. In tal caso si procede quindi a studiare la funzione effettuando dei tentativi
mirati, cioè calcolo la funzione in punti prestabiliti nei quali immagino cosa possa
succedere e verifico quello che succede. La verifica del modello deve avvenire
usando il modello stesso.
Una volta stimate le grandezze del modello queste dovranno essere confrontate con
una soluzione nota (calcolate su batterie di dati).
IL COMPUTER
Il Computer è detto anche elaboratore ma non cervello elettronico poiché non è in
grado di prendere decisioni, non è cioè dotato di capacità decisionale. Conseguenza
di ciò è che noi dobbiamo pianificare tutto evitando situazioni impreviste altrimenti il
computer non può andare avanti. Talvolta si può verificare un errore che non era stato
previsto poiché riguardava una eventualità che non era stata presa in considerazione.
L'elaboratore è un dispositivo capace di effettuare relazioni ad altissima velocità e di
gestire una quantità molto elevata di informazioni.
2
3. Appunti d’esame
Il computer www.profland.135.it
Es. Problema: Somma di 5 numeri
I Dati del problema sono: 5, 7 , 10 , -2 , -1.
Innanzitutto occorre stabilire le capacità dell'esecutore.
Le istruzioni verranno date in relazione a ciò che il computer è in grado di fare.
Ipotizziamo che l'elaboratore sia capace di eseguire solo un'operazione alla volta.
Costruiamo l'algoritmo facendo un ciclo ripetitivo inizializzando una grandezza a
zero e sommandovi un numero alla volta.
Numero Totale
5 5
7 12
10 22
-2 20
-1 19
Tutto questo ha senso solo in presenza di un esecutore che sia capace di fare ciò.
Nell'utilizzare il linguaggio per la costruzione dell'algoritmo dovrò evitare l'ambiguità
che è originata dal fatto che una stessa parola può avere più significati, o che diverse
parole possono avere lo stesso significato. Un linguaggio è scarsamente
interpretabile. La riduzione della ambiguità si realizza attraverso la riduzione dei
vocaboli a disposizione in modo che ad ogni situazione corrisponda un unico
specifico vocabolo, la presenza di quel vocabolo diventa quindi inequivocabile; e
attraverso l'irrigidimento della forma (scrivere le frasi secondo uno schema fisso
molto rigido.
Se faccio questo sono in grado di esprimere l'algoritmo.
L'algoritmo può essere espresso mediante una flow chart in cui i singoli passi sono
scritti in un grafico. I dati sono messi in blocchi in funzione di un ordine indicato
graficamente da una freccia.
Questo metodo presenta poche ambiguità la figura geometrica del rettangolo sta ad
indicare che si tratta di un'azione. L'ellisse indica un acquisizione di input. La stampa
riguarda una fase di output. L'azione decisionale è rappresentata da un rombo.
Il difetto principale di questo modello è che si tratta di un modello di difficile
rappresentazione, vi sono cioè delle difficoltà di natura grafica. Possiamo rendere
l'algoritmo più efficiente eliminando la parte grafica sostituendola con delle parole
chiave. Inoltre altro difetto della flow chart sono le numerose frecce, sarà opportuno
eliminare tali frecce inventandoci un ordine obbligato con cui scriviamo le cose,
dovrò inoltre avere una forma diversa per indicare i vari salti.
Definizione di algoritmo
è un procedimento per la risoluzione di una classe di problemi, realmente eseguibile e
quindi costituito da un numero finito di comandi non ambigui che specificano una
sequenza finita di operazioni da eseguire su un numero finito di dati.
3
4. Appunti d’esame
Il computer www.profland.135.it
Un algoritmo definisce non solo il flusso delle operazioni da compiere ma
anche i dati su cui tali operazioni vanno eseguite. Non si deve progettare solo il "da
farsi" del problema ma anche il "da farsi" sui dati di cui disponiamo.
Un oggetto astratto in grado di risolvere o di eseguire algoritmi (il computer) deve
avere delle capacità:
• essere in grado di memorizzare l'algoritmo che e costituito dai dati e dalle
istruzioni.
• essere capace di effettuare delle operazioni aritmetiche e logiche (esiste o non
esiste un numero) sui dati.
essere capace di gestire il flusso delle operazioni.
Anche l'uomo è in grado di eseguire un algoritmo ciò vuol dire che l'uomo ha in se
queste capacità.
Vi è un input, leggere delle informazioni ed un output, produce un risultato. Gestisce
queste cose attraverso la memoria che svolge il ruolo di memorizzazione e di
controllo ed utilizza eventualmente una calcolatrice per fare i calcoli. (vedi schema).
Nello schema macchina ci saranno esattamente gli stessi schemi che sono presenti
nell'esecutore umano di algoritmi: La macchina secondo Von Neumann avrà
necessariamente un input (Dati) ed un output (risultato) avrà necessità di una zona di
controllo e una zona di memoria ed una zona di calcolo (unità logico aritmetica).
L'unità di input legge dei dati che vanno in memoria, la memoria interagisce con il
controllo e con il calcolo e produce degli output. Il controllo fa da supervisore a tutte
le altre unità.
Componenti di un elaboratore
• La Memoria
è il supporto fisico che permette di immagazzinare informazioni che sono costituite
da dati e istruzioni.
• Unità di controllo
serve a gestire i vari flussi di dati e istruzioni
• Unità logico aritmetica
consente di effettuare operazioni di natura aritmetica e di natura logica
• Unità di input ed output
introducono dati ed emettono risultati
La MEMORIA è organizzata secondo una lista di cellette che chiameremo locazioni
di memoria.
Nelle locazioni si scriveranno dei caratteri che rappresentano il messaggio che
noi vogliamo comunicare. Il linguaggio utilizzato dalle macchine è il linguaggio
binario che è costituito da due caratteri I e O.
Una locazione si presenterà come segue
4
5. Appunti d’esame
Il computer www.profland.135.it
1 1 0 1 1 0 1 0
In ciascuna locazione no segneremo una sequenza di zeri e di uno. Ogni
locazione è a sua volta una sequenza di componenti elementari che contengono
esclusivamente i caratteri rappresentativi della memoria O ed I questi componenti
elementari si chiamano bit.
La memoria è insieme di celle ognuna delle quali contiene una stringa di bit.
La stringa di 8 bit forma un byte che sono diventate l'unità di misura della memoria.
Ogni locazione deve essere distinta dall'altra per cui ognuna di esse è associata ad un
numero che la identifica, ognuno di questi numeri lo chiameremo l'indirizzo della
locazione.
locazione indirizzo
10110001 0010
11011110 0011
Nel sistema posizionale decimale le singole cifre giocano un ruolo diverso a seconda
di dove stanno: 13 significa 1 x 10 + 3 x 1 perché è un sistema posizionale basato sul
10.
La macchina usa invece un sistema posizionale basato sul 2
quindi i numeri sono moltiplicati per le potenze del due
0 x 23 + 0 x 22 + 1 x 21+ 0 x 1= 2.
L'insieme di locazioni raggruppate prende il nome di parola.
Il numero di locazioni che può contenere una parola dipende da quanto sono lunghe
le istruzioni della singola macchina.
La locazione è la minima unità indirizzabile, la parola è quell'insieme di locazioni
sufficienti per poter scrivere un istruzione o un dato.
La locazione tipica è costituita da 8 bit, la parola tipica è fatta da 4 locazioni (32 bit).
Operazioni sulla memoria
• leggere: vedere che ci sta in una certa locazione.
• scrivere: inserire caratteri nelle locazioni.
I parametri secondo i quali si valutano le prestazioni della memoria sono:
• la velocità con cui posso andare a leggere e a scrivere,
• la grandezza capacità della memoria cioè il numero di locazioni che essa è in grado
di contenere.
Per misurare la grandezza di una memoria utilizziamo dei multipli del byte dove il
byte identifica una locazione.
I multipli del byte sono:
K byte 1024 = 29
M (mega) byte G (giga)byte T (tera)byte
5
6. Appunti d’esame
Il computer www.profland.135.it
Nella memoria vi è la parola cioè quante locazioni vengono messe insieme per
essere fisicamente usate contemporaneamente. Quindi anche la lunghezza della
parola che la memoria può contenere ha una sua importanza. Sarà migliore una
memoria che può contenere parole più lunghe cioè che possono contenere più
locazioni.
W= ampiezza della voce misurata in bit 16, 32, 64 bit
L'ordine di grandezza della velocità è il nano-secondo un miliardesimo di secondo.
Unità di controllo
Serve ad istruire e guidare le altri componenti del sistema nell'esecuzione della
loro attività, supervede a tutte le funzioni del sistema.
E' un'unità meccanica che non ha capacità decisionale.
Si tratta di una unità che è in grado di leggere nella memoria in una parte in cui sono
scritte istruzioni, è in grado di capirle e di eseguirle. Tutto ciò che conta è quello che
noi abbiamo messo in memoria.
Il meccanismo dell'unità di controllo è sequenziale dal punto di vista spaziale,
ma anche dal punto di vista temporale cioè vi è una temporizzazione. Si tratta di un
meccanismo che temporizza tutte le azioni del computer. Passato un certo tempo
ricomincia il ciclo tornando nuovamente a leggere nella memoria l'istruzione
successiva (che non è necessariamente quella che segue, ma quella che l'istruzione
precedente ha indicato). L'istruzione precedente "determina" la successiva.
I processi non sono tutti sequenziali.
Random: accedere dove si vuole.
Tale ciclo è detto ciclo Fetch.
Ciò che differenzia un'unità dall'altra è la velocità con cui svolge questo ciclo.
Unità logico aritmetica (ALU)
È l'unità che svolge operazioni aritmetiche (moltiplicazione, divisione,
addizione, sottrazione) e operazioni logiche (il confronto: se due locazioni hanno lo
stesso contenuto o no). Questa è un'unità che opera sui dati.
La CPU deve prelevare i dati su cui devono essere effettuate queste operazioni
e portarli nella ALU. La ALU svolge il suo lavoro e poi il risultato deve essere
riportato dalla memoria. I dati che sono portati nell'ALU devono essere messi da
qualche parte ciò vuol dire che la ALU deve avere anch'essa una sua memoria
(registri).
I dati (due dati) vengono caricati nei due registri si fa l'operazione che gli compete il
risultato si trasferisce in un registro e quest'ultimo poi ritorna alla memoria.
Oggi la CU è spesso integrata con la ALU. Insieme costituiscono la CPU.
UNITÀ DI CONTROLLO + UNITÀ LOGICO ARITMETICA
=
CPU o processore (central processing unit)
Il parametro di misurazione della CPU è la velocità ossia il tempo con cui viene
eseguita un istruzione.
6
7. Appunti d’esame
Il computer www.profland.135.it
Per sincronizzare le attività del sistema si utilizza un circuito elementare
(clock) che emette degli impulsi a precisi intervalli di tempo. L'intervallo tra due
impulsi consecutivi è chiamato tempo di ciclo di clock.
Il ciclo di clock varia più o meno tra 10 e 1 nano secondo.
In genere si determina quanti clock vengono fatti in un'unità di tempo (1 sec).
Quindi preferiamo misurare la frequenza, cioè quante volte si ha un clock nel
secondo. La frequenza va tra i 10 e i 1000 MHz. 1MHz = 106 H.
La frequenza limite attuale è 2 GHz.
Misure della velocità operativa
La velocità operativa è un concetto intimamente legato alla frequenza.
Se l'unità di controllo esegue il ciclo Fetch esattamente nell'ambito di un ciclo, ma il
ciclo di Fetch potrebbe avvenire anche in più cicli. Una cosa è il ciclo temporale di
sincronizzazione una cosa è il ciclo in cui viene eseguita una istruzione (Fetch).
L'indicatore che non comporta nessun equivoco è quello che da la conoscenza
a priori di quante istruzioni vengono fatte al secondo. Questo parametro è il MIPS
milioni di istruzioni per secondo tipicamente coincide con li numero di cicli.
Un altro parametro molto importante è quello che consente di misurare quante
operazioni aritmetiche possono essere fatte in un secondo. Il MFLOPS (Milioni di
operazioni FLOating Point al Secondo) rappresenta quante operazioni vengono fatte
al secondo. Quando necessitano più cicli per eseguire un'istruzione i MIPS di questa
macchina sono inferiori alla frequenza.
Unità di input output
Permettono al computer di interfacciare con il mondo esterno:
Video, Tastiera, Stampante, Mouse, Plotter, Scanner.
Classificazione dei Computer
Ogni macchina si distingue per una differente tecnologia.
personal computer workstation mainframe super computer
Frequenza Hanno un tecnologia Sono oggetti molto Hanno incredibili
1000 - 2000 MHz differente dal PC Sono più grandi ed hanno velocità rispetto ad
Capacità più robusti poiché non capacità estremamente altri tipi di computer.
64 - 256 Mbyte si spengono mai superiori. Hanno più di un
processore in
parallelo.
Scopo: Scopo: Scopo: Scopo:
piccoli archivi Ricerche Data processing Calcolo scientifico di
scrittura CAD (banche dati) altissimo livello
internet Calcolo
giochi internet
Velocità di operazioni al secondo
PC e Workstation 5 - 50 milioni di operazioni al secondo (MFLOPS) un super
computer è nell'ordine dei GFLOPS di miliardi di operazioni sono cioè 1000 volte
più veloci.
7
8. Appunti d’esame
Il computer www.profland.135.it
Costo Computer
PC = 2 - 10 mil di lire
WS = 10 - 10 mil di lire
MF = 200mil - 2mld
SC = 2 - 60 mld
Le istruzioni si rappresentano in memoria tali istruzioni vengono scritte
utilizzando solo due caratteri O e I. Essendo solo due caratteri nello scrivere avrò
bisogno di più caratteri. Si farà corrispondere ad ogni carattere una frase scritta
secondo il codice binario.
Ad ogni carattere del mio alfabeto farò corrispondere una successione di caratteri
dell'altro alfabeto.
Esempio
caratteri codice DCD codice DIC codice ascii
0 001010 11110000 01010000
1 000001 11110001 11001000
2 000010 11110010 11000100
se utilizzo solo due caratteri avrò solo 4 combinazioni, 00 01 10 11 se ne considero 3
le combinazioni saranno 8. All'aumentare delle combinazioni il tentativo di
enumerarle diventa sempre più difficile enumerarle quindi dovrà essere elaborata una
strategia. Utilizziamo dei modelli che sono basati su dei criteri, in questi modelli si
avrà una deduzione logica che se falsa fallisce anche la strategia ma se è vera la
strategia non può fallire. Questo è il pensiero matematico
Nel nostro problema la prima combinazione è 2 la seconda è 2 2 la terza 23 forse
la quarta secondo la logica sarà 24.
Ragioniamo quindi in termini matematici
Nel sistema posizionale decimale ogni numero assume un significato in relazione al
posto che occupa e alla base di numerazione che nel nostro caso è il 10
Quindi 123 significa 1 x 102 + 2 x 101 + 3 x 10. Al simbolo 123 siamo dunque in
grado di dare un significato.
Le stringhe di codici di sui sopra sono esattamente la stessa cosa con la differenza che
queste stringhe sono basate su due caratteri e sono quindi in base 2.Se è scritto 01 io
leggo 0 x 21 + 1 x 20 = 1; 0 x 21 + 0 x 20
Quindi alla domanda quanti sono i caratteri minimi necessari rispondo andando
a vedere quanti sono i numeri che io posso rappresentare con un certo numero
prefissato di cifre. Es con 1 cifra decimale posso rappresentare 10 numeri, con 2 cifre
posso rappresentare i numeri che vanno da 0 a 99 che sono 100, con tre cifre decimali
posso rappresentare 1000 numeri cioè da 0 a 999.
Quindi con tot cifre quanti numeri posso esprimere? potrò esprimere totn, con
tot cifre binarie io esprimo 2tot e quindi ho trovato quanti bit dovrò avere minimo per
esprimere i dati. Con una casella 2 bit, con due caselle 4, con tre 8, con quattro 16,
8
9. Appunti d’esame
Il computer www.profland.135.it
con cinque 32, con sei caselle 64. Quindi 6 caselle è il numero minimo con cui io
posso rappresentare i circa 64 caratteri della lingua italiana.
Dal punto di vista dell'efficienza sarebbe più logico operare con gruppi di 6 ma dal
punto di vista della tecnologia sarebbe, invece più opportuno operare con gruppi di 8
poiché sono potenze di due e sui computer tutto è basato sul 2 o sulle potenze di due.
Oggi si usano codici a 8 bit in particolare il codice ascii è il più usato.
Es per scrivere Dado ad ogni lettera corrisponderà una stringa di caratteri binari. Ci
chiediamo se il modo di esprimere i dati sia soltanto questo.
Esprimendo i numeri il metodo suddetto è efficiente?
Es 123 lo rappresento 010100000 01010010 01010011 sono necessarie ben 24 cifre
binarie. Con una stringhetta da 8 bit posso enumerare 256 oggetti diversi. Se invece
ho dei numeri posso usare soltanto 8 bit per rappresentare i numeri che vanno da 1 a
256.
Utilizzare questo meccanismo quando opero solo con i numeri questo
meccanismo sarebbe solo uno spreco di spazio. Quindi mi converrà utilizzare un
processo di conversione del numero decimale nella base 2. Una volta che ho
effettuato questa conversione poiché so che con 8 bit si possono rappresentare i
numeri da 1 a 256 si possono rappresentare io userò non 24 ma solo 8 bit. Le
informazioni nel computer non vengono codificate allo stesso modo ma dipende dal
tipo di informazione.
I caratteri li rappresenterò convertendo carattere per carattere, i numeri sarà più
conveniente convertirli in numeri binari.
I tipi di dati
- Caratteri (alfanumerici)
- Numeri
- Informazioni logiche (confronto fra due entità il cui risultato è V o F)
Il dato logico si esprime semplicemente con un bit es 0 falso, 1 vero.
I dati vengono rappresentati tramite locazioni ma le locazioni spesso non sono
sufficienti e quindi dobbiamo utilizzare la parola. La locazione è minimamente 8 bit.
La parola può essere formata da più locazioni quindi se la parola è a 32 bit sarà
costituita da 4 locazioni.
Caratteri
Su stringhe di caratteri posso fare le seguenti operazioni:
lettura, ordine quindi il computer è in grado di fare dei confronti, trasferimenti e
concatenazioni.
Numeri
Possono essere interi o decimali. Il procedimento di rappresentazione esposto prima
lo posso utilizzare solo sui numeri interi.
Numeri interi
Prendiamo un numero intero e lo trasformiamo in binario, es. 123 diventa un
certo numero binario utilizzando un certo numero di bit che mettiamo in memoria.
9
10. Appunti d’esame
Il computer www.profland.135.it
utilizzerò tante locazioni quante sono necessarie per scrivere tutti questi numeri. Si
decide una volta per tutte quanti bit al massimo utilizzare per rappresentare i numeri,
normalmente si utilizzano tutti i bit contenuti nella parola. I numeri interi considerati
sono solo quelli che possono essere rappresentati nel computer cioè quelli che
rimangono al di sotto dei bit prefissati per essere utilizzati. Quindi quando parliamo
di tipi interi indichiamo la sottoclasse di numeri interi che noi effettivamente siamo in
grado di rappresentare. Es 2 corrisponderà ad un certo numero binario.
In presenza di un numero negativo dovrò sacrificare un bit per li segno meno.
Se ho a disposizione 8 bit io convertirò i numeri interi che riempiono soltanto 7 bit
perché l'ottavo è per il segno. Se ho a disposizione 7 bit il massimo numero
rappresentabile è 127, cioè 27 = 128 ma uno è lo zero quindi 127 (01111111). Esiste
quindi un massimo intero rappresentabile. Con questo tipo di rappresentazione
avremmo due modi per poter rappresentare lo zero 0+,0- ciò potrebbe creare errori.
Quindi il numero 10000000 viene interpretato come un ulteriore numero attribuito o
ai positivi 128 o ai negativi -128.
Sul tipo intero, cioè sull'insieme dei numeri interi rappresentabili, sono definite le
seguenti operazioni: addizione, sottrazione, moltiplicazione, divisione. Nelle
operazioni dei tipi interi possono sorgere dei problemi legati al fatto che i numeri non
sono tutti rappresentabili e quindi il risultato potrebbe non esserlo:
Es ipotizziamo una macchina che possa al massimo scrivere i numeri fino a 100
posso scrivere 60, posso scrivere 50 ma non posso fare la somma di 60 + 50 in tal
caso si ha una situazione di non rappresentabilità del risultato.
Situazione eccezionale │ x │ > max dato non rappresentabile
│ x # y│ > max risultato non rappresentabile (# indica una qualsiasi operazione).
Tale situazione è in generale detta di overflow. In questo caso la macchina darà
errore. La somma di 1 in binario si realizza mediante uno spostamento degli uno fino
ad arrivare al massimo numero rappresentabile 11111111 se ci sommo 1 = 2 , 0 e 1 di
riporto .... fino a diventare un numero negativo si invade quindi il campo dei numeri
negativi -128 dal punto di vista software potrei creare un programma che permetta di
segnalare l'errore prima di effettuare il calcolo.
Quindi questo rischio ci fa capire che dobbiamo usare molto poco i numeri interi.
A cosa servono i numeri interi? Servono solo a contare. I numeri decimali vengono
utilizzati per i calcoli, essi possono però avere anche la parte decimale nulla. I numeri
usati per i calcoli sono solo apparentemente interi ma in realtà hanno i decimali nulli.
Se su una calcolatrice faccio l'operazione 1/2 il risultato è 0.5 se invece faccio un
operazione di divisione 1/2 (numeri interi) fa 0 col resto di 2.
Esistono numeri interi e numeri reali, le operazioni dell'uno non sono le operazioni
dell'altro. Dovrò quindi indicare al computer di trattare i numeri come decimali. I
software in genere operano sui numeri reali.
I numeri reali vengono trattati in modo completamente differente dai numeri interi.
Di Tipo reale
10
11. Appunti d’esame
Il computer www.profland.135.it
Cos'è un numero? Es. 2 è la rappresentazione in valore di un numero che
ottengo contando uno due. I valori sono simboli concatenati tra di loro che esprimono
un valore. I simboli identificano delle proprietà dei numeri 1/2 identifica un simbolo
che moltiplicato per due darà 1, il suo valore nel mondo dei numeri interi non esiste
perché non esiste nessun numero intero che moltiplicato per due da 1.
2 è un simbolo che rappresenta un numero il cui quadrato è esattamente uguale a 2
il, suo valore non è rappresentabile. In conclusione i tipo reale comprende i numeri
interi in cui il simbolo corrisponde al valore del numero, i numeri razionali che sono
espressi da simboli a volte sono rappresentabili ma altre no, i numeri irrazionali non
sono mai rappresentabili. Il tipo reale non considera quindi tutti i numeri reali ma
soltanto una parte cioè quella rappresentabile.
Per rappresentare un numero considero una locazione Suddividendola in due parti
separandole ideologicamente con un punto a sinistra scrivo la parte inter del numero a
destra quella decimale 11110.00111 avrò un certo numero di bit da dedicare all'intero
ed un certo numero di bit da dedicare al decimale. Questa idea di rappresentazione è
un idea molto poco efficiente perché limita moltissimo la rappresentatività occorre
quindi cambiare la strategia con cui noi siamo tipicamente abituati a rappresentare i
numeri sorge un problema di spazio. Ci chiediamo se esiste un metodo matematico
per rappresentare meglio questi numeri posso esprimere numero es. 30 milioni come
prodotto tra un numero e una potenza.
I tipi reali sono una sottoclasse dei numeri razionali. Abbiamo detto che il modo con
cui noi rappresentiamo i numeri è un modo poco efficiente. Si ricorre ad una
rappresentazione più efficiente scrivendo una parte principale del numero e indicando
l'esponete del 10 che completa quel numero per allinearlo in posizione corretta. Es
1mld = 1 x 109 ; 1/1mld = 1 x 10-9. Questo tipo di rappresentazione è la
rappresentazione floating point (pag 98). In generale qualunque numero può essere
rappresentato in questo modo: X = f x e dove: f è la mantissa, è la base di
numerazione 10 per l'uomo 2 per la macchina, e è l'esponente.
In alcuni casi la mantissa è rappresentabile in altri no. La rappresentazione Floating
Point non è unica. Ma è invece opportuno che il tipo di rappresentazione sia univoco
in modo da evitare ambiguità. Si sceglie quindi un sola tra quelle possibili
(scientifica, ingegneristica). L'ingegneristica prende il numero ne guarda le cifre e le
trasforma tutte in intero, quella scientifica fa l'operazione esattamente opposta il
numero lo interpreta come un numero decimale es 0.35 potrei scrivere anche 0.035
sarebbe ancora decimale e allora mettiamo un'ulteriore limitazione: la prima cifra
deve essere obbligatoriamente diversa da zero in questo modo la rappresentazione
diventa unica. Questa è la rappresentazione scientifica Floating Point. La mantissa
sarà quindi un numero sicuramente più piccolo di 1 e poi la prima cifra deve essere
necessariamente diversa da zero ciò significa che nel caso di base 10 la mantissa
dovrà essere maggiore di 1/10 in generale 1/ f 1.
Per rappresentare il numero io devo conoscere la mantissa e l'esponente. Il
calcolatore deve rappresentare due numeri interi trasformandoli in base binaria. (pag
11
12. Appunti d’esame
Il computer www.profland.135.it
104). Sia la mantissa sia l'esponente possono avere un proprio segno un bit verrà
usato per il segno della mantissa un bit per li segno dell'esponente.
Quali problemi possono nascere da questo tipo di rappresentazione?
non posso rappresentare il numero:
-se la mantissa ha più cifre di quante io ne possa scrivere, (precisione del numero)
-se l'esponete ha più cifre di quante ne posso rappresentare (ordine di grandezza)
La parte di numeri che posso rappresentare è ovviamente finita. L'insieme infinito dei
numeri viene rappresentato con un numero finito di oggetti quindi vi è una
approssimazione. I numeri che noi usiamo li chiameremo numeri macchina e sono
una sottoparte finita dei numeri. La precisione dipende dal numero di bit che io ho a
disposizione.
L'approssimazione
Il problema della precisione può essere risolto attraverso l'approssimazione. Anche se
qui rappresentiamo comunque un intero a tale intero noi attribuiamo un significato
diverso Es se il numero intero è 1236 ed io posso rappresentare soltanto 3 cifre siamo
in una situazione di overflow. Ora invece abbiamo un numero decimale che è solo
rappresentato come intero quindi al posto di scrivere 0.1236 posso scrivere 0.123.
Le approssimazioni sono due:
Troncamento: Non scrivere le cifre che vanno da t in poi.
Arrotondamento: scrivere le cifre fino a t lasciando l'ultima inalterata se quelle che
taglio sono inferiori a 0.5 arrotondare alla superiore se invece è maggiore.
Tra le due tecniche la più precisa è l'arrotondamento il cui errore varia da 0 a 5.
La seconda limitazione consiste in un range limitato, vi è cioè un numero finito di
cifre con cui posso rappresentare l'esponente E min < e < Emax. Non posso rappresentare
numeri al di fuori di un certo intevallo
Es =10 t=3 Emin = -9 Emax = 9 allora:
rmax = 0.999 x 109 massimo numero rappresentabile
rmin = 0.100 x 10-9 minimo numero rappresentabile
Situazioni Eccezionali
Cosa accade quando andiamo al di sopra o al di sotto del range possibile?
Es devo rappresentare 10100 al massimo posso rappresentare 1099
Se e > Emax si dice che si è verificato un overflow.
Se e < Emin si dice che si è verificato un underflow.
(pag 120) con i reali il calcolatore si ferma. Nelle situazioni di underflow il
calcolatore sostituisce il più piccolo numero di tutti lo zero altri calcolatori si
fermano. I numeri che mettiamo nel computer sono sia numeri positivi che negativi e
vanno tra un minimo valore rappresentabile e un massimo valore rappresentabile un
esponente minimo e un esponente massimo sia dalla parte positiva che dalla parte
negativa. Poi c'è una fascia compresa tra il minimo e lo zero di non rappresentabilità.
Le situazioni di overflow non possono essere risolte le situazioni di underflow spesso
vengono approssimate con lo zero.
12
13. Appunti d’esame
Il computer www.profland.135.it
I parametri che caratterizzano il sistema aritmetico floating - point a precisione finita
sono: (pag 112)
= base di numerazione
t = precisione
Emin = minimo esponente
Emax = massimo esponente
Tali parametri variano da macchina a macchina ma i parametri secondo il sistema
aritmetico standard IEEE sono:
=2 t = 23 Emin = -127 Emax =128
tutto questo è scritto in una voce 32 bit di cui 23 sono per la mantissa, 7 per
l'esponente due per il segno. In termini decimali si possono rappresentare dalle 6 alle
7 cifre decimali (da 2-127 a 2128) in decimali da 10-38 a 1039 è dunque di fficile che si
verifichi una situazione di overflow. Tipicamente l'overflow sarà causato da
situazioni di errore (es la divisione per zero).
La precisione t invece è molto limitata 23 cifre binarie sono circa 6 - 7 cifre decimali
tale precisione è detta precisione singola.
Quando ne abbiamo bisogno noi possiamo ottenere una maggiore precisione
aumentando il numero delle cifre che abbiamo a disposizione i computer sono quindi
abilitati a mettere il numero in due voci si raddoppia così il numero di bit a
disposizione:
Doppia Precisione:
=2 t = 52 Emin = -1023 Emax =1024
i tempi di calcolo sono più elevati quindi userò la semplice o la doppia a seconda
delle esigenze.
Di Tipo Logico
Vero e Falso. Un dato logico si rappresenterà con un bit (es 0 = vero; 1 = falso ).
Sorge un problema di indirizzamento nella loro rappresentazione per cui un intera
locazione deve essere sciupata pur avendo bisogno soltanto di un bit (es pag 136)
Sul tipo logico si fanno le operazioni dell'algebra di Boule:
• Negazione (not,)
• Congiunzione (and,)
• Disgiunzione (or,)
Negazione
Se ho un valore logico che è vero il suo opposto sarà falso.
p: 12 > 2 (vero)
not p: 12 < 2 (falso)
Congiunzione
13
14. Appunti d’esame
Il computer www.profland.135.it
entrano due input ed esce un solo output si tratta infatti di un'operazione e in
matematica un'operazione comporta l'ingresso di due input e di un solo output.
p: 2 < 3 (vero)
q: 5 < 3 (falso)
p and q: 2 < 3 e 5 < 3 (falso).
La congiunzione lega i due input costituendo un'unica frase logica.
Disgiunzione
Anche in questo caso si hanno due input ed un output.
p: 2 < 3 (vero)
q: 5 < 3 (falso)
p or q: 2 < 3 o 5 < 3 (vero)
Tavole di verità
negazione congiunzione e disgiunzione
p not p p q p and q p or q
V F V V V V
F V V F F V
F V F V
F F F F
Esercizio 1
Costuire una funzione logica con queste proprietà:
a b
v v F
f v V
v f V
f f F
La funzione corrispondente è (not a e b) or (a e not b)
Esercizio 2
Data una funzione calcolarla a seconda dei valori di a, b, c. Si costruisca la tavola di
verità della seguente
funzione: (a e b) or c
Devo quindi elencare tutte le possibilità e ad ogni possibilità scrivere la risposta.
a b c
v v v V
v v f V
v f v V
v f f F
f v v V
f v f F
14
15. Appunti d’esame
Il computer www.profland.135.it
f f v V
f f f F
La rappresentazione delle istruzioni
Nel computer scriverò dei comandi che verranno interpretati dalla unità di controllo.
L'istruzione è la sequenza di bit scritta in linguaggio binario 0 e 1
solo la cpu è capace di interpretare. Questo linguaggio direttamente comprensibile
all'elaboratore è detto linguaggio macchina.
Questo linguaggio cambia da calcolatore a calcolatore perché dipende dall'unità di
controllo.
Es calcolo 2 x 3 + 7 le operazioni sono due, un istruzione elementare per il prodotto e
un'istruzione elementare per la somma. Il comando fai una moltiplicazione può
tradursi in una serie di comandi intermedi che noi non vediamo neanche. Ogni
comando viene svolto in un ciclo di Clock, ma il tempo dell'operazione non
corrisponde esattamente ad un solo ciclo di Clock. Parlando di MIPS abbiamo visto
quante operazioni "ciclo" si fanno al secondo.
Come sarà organizzato un programma che fa fare questo calcolo?
Innanzitutto dovranno essere inseriti i dati: 2, 3, e 7 in forma binaria.
D Bin
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
Le cifre binarie sono allineate a destra nelle locazioni di memoria (pag. 153).
Dopo i dati dobbiamo prevedere delle altre locazioni in cui andare a scrivere i
risultati. L'operazione può comportare anche due o più risultati parziali che
comunque dovranno essere messi in memoria.
Il calcoli sono svolti dall'unità logico aritmetica che dotata di sue memorie proprie
dette registri.
Il processo di esecuzione del calcolo sarà il seguente:
Il dato 2 viene preso e portato nel registro; il dato 3 viene preso e portato nel registro,
nel registro viene eseguita materialmente l'operazione di prodotto il risultato viene
scritto nel registro dei risultati infine questo risultato viene riportato in memoria nel
posto in cui avevamo previsto doveva andarsi a scaricare il risultato. La seconda fase
del processo è simile alla precedente si somma il parziale a 7. Prendo 7 lo porto nel
registro, prendo il risultato parziale e lo porto nel registro faccio le somme il risultato
viene messo nel registro dell'operatore di somma, il risultato viene scaricato in
memoria (pag. 155). Le istruzioni saranno costituite da stringhe di bit alcuni dei quali
15
16. Appunti d’esame
Il computer www.profland.135.it
saranno interpretati come codice dell'operazione da fare, altri come gli indirizzi delle
locazioni in cui ci sono i dati su cui effettuare l'operazione e di quelle in cui andare a
mettere il risultato.
Fondamentalmente una stringa di bit è divisa in 4 settori un primo settore contiene un
certo numero di bit che sono interpretati come comando, e poi avremo gli indirizzi
degli operandi tipicamente due di input ed uno di output. Questa stringa sarà scritta
nella memoria. Se il calcolatore opera su 16 bit la stringa sarà di 16 bit 4,4,4,4. Se
opera su 32 bit la stringa sarà composta da 8,8,8 e 8. (pag. 157).
Le limitazioni:
Con 4 bit posso il numero massimo rappresentabile è 15 perché va da 0 a 15 cioè la
potenza 24 e quindi con 4 bit posso definire 16 diverse operazioni. Avendo a
disposizione 16 bit e devo dare 3 indirizzi posso dare 4 bit a indirizzo significa che io
posso localizzare solo 16 locazioni di memoria. Quindi questo tipo di istruzione ha un
enorme limitazione dal punto di vista dell'indirizzamento. Una soluzione potrebbe
essere quella di aumentare i bit dedicati all'istruzione aumenta la numerosità delle
operazioni elementari e aumenta la capacità di indirizzamento. Un'altra soluzione è
quella di ridurre il numero di indirizzi da dare. Es un istruzione che invece di avere 3
indirizzi 2 operandi e un risultato, potrei dire di scrivere il risultato sempre in una
parte prefissata in questo caso non ho bisogno di dargli l'indirizzo. Il risultato lo
scriviamo in uno dei due posti che contengono i dati ad esempio lo scriviamo nel
posto in cui c'é il primo dato: 2 x 3 ognuno avrà un suo indirizzo, viene fatto il
prodotto che poi viene scritto nell'indirizzo di 2 cioè 1000. L'operazione 6 + 7
coinvolgerà l'indirizzo 1000 che contiene il risultato dell'operazione precedente, e il
7. Il risultato totale comparirà nella locazione del primo operando all'indirizzo 1000.
Lo svantaggio di quest'ultimo metodo è che i dati strada facendo si perdono. Se
avessi bisogno dei dati in seguito dovrò effettuare dei salvataggi. Oggi potendo avere
istruzioni a 32 o 64 bit non sorgono problemi di indirizzamento. L'istruzione sarà
sempre costituita da un codice e gli indirizzi degli operandi. Dei due dati uno è libero
e io dico l'indirizzo l'altro dato deve risiedere in una locazione predefinita. Per fare
una somma o un prodotto ora dovrò fare due operazioni una di salvataggio del dato e
poi l'operazione effettiva di calcolo.
Allora nell'esecuzione di un programma indicheremo prima di tutto di copiare la
locazione che contiene ad es. il dato 2 in un altra locazione chiamata registro poi
facciamo la moltiplicazione del contenuto della locazione 1001 che è 3 quest'ultimo
sarà moltiplicato con quello che sta nel registro quindi con 2. Il risultato di questo
prodotto finirà nel registro che quindi non conterrà più 2 ma 6. L'utima operazione
consiste nel sommare il contenuto del registro con 7. Vi sarà un'istruzione in cui si
preleva il dato dal registro e si scrive nella memoria il risultato della locazione. (pag.
161).
I limiti della programmazione in linguaggio macchina
• scarsa interpretabilità poiché devo associare codici numerici a determinate
operazioni
16
17. Appunti d’esame
Il computer www.profland.135.it
• le istruzioni utilizzano indirizzi, le formule sono invece espresse con dei simboli
non con degli indirizzi numerici
• numero di operazioni elementari molto elevato (scarsa potenza del linguaggio)
• riferimento a tipi di dati differenti (es interi o Floating Point)
Dati questi limiti si attuano dei correttivi tra cui il più immediato è quello di sostituire
i caratteri binari con dei caratteri a noi più familiari (es posso chiamare un casella a
senza necessità di ricordare il suo indirizzo.
L'istruzione sarà del tipo MPY moltiplica il contenuto di una locazione ideale che io
chiamo A ed il contenuto di una locazione ideale che io chiamo B. (es. pag.165).
Ancora potrò dare l'istruzione di moltiplicare A e B e di mettere il risultato in A,
quindi dico somma A e C. (istruzione a 2 indirizzi)
Potrò inoltre dare un istruzione ad 1 indirizzo del tipo: carica nel registro il dato A
moltiplicalo con B, sommagli C e quindi salvalo in S.
Si ha in questo caso un modo più semplice di scrivere un'istruzione: un nome
mnemonico al posto del codice operativo, un nome simbolico al posto dell'indirizzo
dell'operando.
Quando facciamo questo abbiamo costruito un linguaggio che chiameremo:
Linguaggio assembler
Tale linguaggio ovviamente non è compreso dalla macchina occorrerà quindi un
programma che traduca l'assembler in linguaggio binario e poi sarà necessario gestire
gli indirizzi. Io invento le lettere A, B, C, e lui assegnerà a queste lettere degli
indirizzi. Dobbiamo disporre quindi di una programma che sia capace di prendere in
input il linguaggio assembler e di tradurlo in binario.
L'elaboratore sarà sempre affiancato da un programma di base che mi permette di
utilizzarlo in maniera più efficiente. Elaboratore e programmi assemblatori
costituiscono quella che chiamiamo la macchina virtuale. (pag .168).
MACCHINA FISICA
calcolatore che mette a disposizione solo le potenzialità del suo hardware e del suo
linguaggio macchina
MACCHINA VIRTUALE
macchina fisica
+
insieme di programmi (software) che sfruttano le potenzialità della macchina fisica.
Il programma Assembler è formato da tante righe quante sono le istruzioni in
linguaggio macchina. Quindi noi chiediamo di poter esprimere un messaggio umano
che comunichi un contenuto che si traduce più ampio. Posso dunque intervenire sulla
capacità di comprensione chiedendo se è possibile di avere delle istruzioni umane più
potenti.
17
18. Appunti d’esame
Il computer www.profland.135.it
Ho sostituito i caratteri binari in caratteri alfanumerici a me facilmente comprensibili,
ma ho bisogno inoltre di avere delle istruzioni umane più potenti in cui con un solo
comando io gli faccio fare più cose. Il secondo passo evolutivo è quello di costruire:
Linguaggio di programmazione ad alto livello
• più potente del linguaggio macchina (dietro un istruzione vi sarà un numero
elevato di istruzioni in linguaggio macchina).
• più vicino al linguaggio naturale
• formalmente definito
Esistono numerosi linguaggi ad alto livello ognuno dei quali è specializzato in varie
cose. Inizialmente c'erano quelli di tipo calcolo scientifico e quelli di tipo gestione dei
dati commerciale poi le periferiche di input output del Computer si sono fortemente
arricchite, le capacità di interazione sono aumentate e i linguaggi si sono via via
evoluti e specializzati. L'errore che talvolta viene commesso è quello di cercare di
usare un linguaggio non appropriato per risolvere un problema che una altro
linguaggio farebbe meglio.
I linguaggi più diffusi sono: Fortran, C, C++, Pascal, Basic, Orcle, Progress, Matlab,
Java.
Il passaggio tra un linguaggio ad alto livello e il linguaggio macchina è reso possibile
mediante l'uso di Programmi Traduttori. Il programma traduttore è molto più
complesso di un programma assemblatore. Esistono due tipi di traduttori: Interpreti e
compilatori.
L'interprete
• Prende in input contemporaneamente un'istruzione di un programma a.l. ed i dati
ad essa relativi. Capisce le istruzioni le traduce in linguaggio macchina acquisisce i
dati e le risolve.
• Fornisce in output direttamente il risultato dell'esecuzione dell'istruzione
Il concetto compilativo presenta invece due fasi
FASE 1
Il Compilatore
• prende in input un programma in linguaggio a.l.
• Fornisce in output un programma in linguaggio macchina.
FASE 2
Il programma in linguaggio macchina, a cui sono forniti in input i dati, viene esguito
e fornisce in output i risultati.
VANTAGGI E SVANTAGGI
Compilatore
18
19. Appunti d’esame
Il computer www.profland.135.it
le fasi di compilazione ed esecuzione sono logicamente e temporalmente distinte. Il
compilatore è più efficiente perché richiede un tempo minore per la risoluzione del
problema.
Utilizzerò il compilatore quando ho un prodotto consolidato, la strategia è sicura
faccio la traduzione e poi naturalmente userò soltanto il prodotto
Traduce globalmente assemblando macro istruzioni e poi lo rilegge nella sua
globalità e lo ottimizza cosa che l'interprete non può fare.
(il Fortran è il compilatore scientifico più utilizzato).
L’interprete
Se io sto facendo un programma e questo programma contiene un errore io lo devo
rifare ritradurlo e poi rilanciarlo cosa che per l'interprete avviene automaticamente.
Il programma in linguaggio a.l. è costantemente sotto il controllo dell'interprete (più
flessibile).
Viene solitamente utilizzato l'interprete nelle fasi in cui devo fare parecchi interventi
quindi tipicamente nelle fasi progettuali. Sono interpretativi la maggior parte dei
linguaggi di sperimentazione. L'interprete traduce frase per frase.
Tutti i linguaggi di programmazione devono avere delle definizioni rigorose e
precise, devono essere scritti esclusivamente utilizzando alcune parole, alcuni
simboli.
I sistemi operativi
Sono programmi per il funzionamento minimale di una macchina. Inzialmente i PC
utilizzavano le valvole, successivamente si passò ai transistor enormemente più
piccoli mantenendo le stesse capacità o anche aumentandole e poi si è passati al
circuito integrato che contiene un certo numero di transitor. Lo schema dei calcolatori
attuali rispecchia quello della macchina di Von Neumann (pag. 418).
Le capacità di memoria di un computer sono vincolate dalla presenza di un campo
elettrico che se è assente il computer non contiene niente, senza dati in memoria il
computer non può funzionare.
Vediamo di ripercorrere i passi logici per poter risolvere un probelma, esso deve
essere analizzato, si costruisce un linguaggio e si prepara il problema utilizzando
questo linguaggio.
Anni 40
I passi erano:
1. preparare il programma in linguaggio macchina
2. memorizzare istruzioni e dati
3. fare eseguire il programma
4. estrarre il risultato dalla memoria
19
20. Appunti d’esame
Il computer www.profland.135.it
Il programma veniva scritto su un supporto esterno al computer che poi il
computer potesse leggere. Uno dei primi strumenti che hanno permesso di immettere
dati ne computer sono le schede perforate. I buchi che venivano fatti in verticale
corrispondevano alla presenza di zeri e uno. Ogni stringhetta rappresentava un
carattere. Si aveva la necessità di memorizzare questi dati cosa che può avvenire solo
dando istruzioni al computer. Devo dare istruzione al computer di caricare le schede e
necessario disporre di un programma che sia già in memoria che insegni al computer
come caricare le schede (loader). Il risultato veniva scritto su altre schede.
Come si fa a caricare il loader?
Un computer per essere acceso necessita di un processo di inizializzazione. In
passato il loader veniva caricato a mano scrivendo a mano una serie di zeri e uno
utilizzando una serie di interruttori all'esterno del PC.
Lo schema era costituito dal nostro programma, dai dati del nostro programma, il
loader. Vi era un comando di start up che faceva leggere il loader che poi permetteva
la lettura degli altri programmi.
Già all'epoca si era sviluppata l'idea di programmi di utlità generale che servissero a
tutte le persone: il software di base di un computer il loader e in un certo senso il
precursore dell'attuale sistema operativo.
Fine anni 50
Furono poi introdotti i linguaggi ad alto livello e si avvertì la necessità di programmi
traduttori che si trovano su schede. Quando lancio il programma scritto su schede
dell'utente ad alto livello precedentemente dovrò caricare nella macchina un
programma su schede che traduce il primo. (pag. 429) I risultati erano costituiti dal
programma tradotto in linguaggio macchina che veniva scaricato su schede. Questo
programma in linguaggio macchina veniva rimesso in memoria con i dati che
servivano. La logica che veniva usata era di tipo compilativo davo un pacchetto in
linguaggio ad alto livello ricevevo in cambio un pacchetto in linguaggio macchina. In
caso di errore si doveva correggere la scheda in linguaggio ad alto livello che noi
ritenevamo sbagliata rilanciare li processo ed ottenere un altro pacchetto in
linguaggio macchina.
Il sistema operativo è dunque costituito da un caricatore e da un programma
traduttore (pag 430) essi rappresentano l'hardware.
Inzialmente vi erano solo le schede perforate come unità di input/output poi fu
introdotta la stampante solo successivamente il monitor e la tastiera.
Ora sorge un problema la macchina ha una sua velocità interna di natura
elettronica, quando interagisce con l'esterno opera con stampanti e tastiere che sono
unità di tipo elettro-meccaniche che sono molto più lente delle precedenti. Il
probelma è la differenza di velocità operativa tra due oggetti, vi sono operazioni che
sono incredibilmente più lente rispetto alle altre, quando vengono eseguite il
computer perde tempo.
Noi vogliamo che la macchina lavori al massimo delle sue prestazioni cioè
vogliamo che il processore svolga sempre qualche cosa.
20
21. Appunti d’esame
Il computer www.profland.135.it
Mentre viene eseguita l'istruzione di stampa la CPU resta inattiva (pag. 431). Tale
processo non è efficiente. Se io lancio solo il comando di stampa alla quale ci pensa
poi la stampante e la CPU nel frattempo può riprendere le sue funzioni il processo
diventa più efficiente.
L'idea è stata quindi quella di introdurre qualcosa che potesse gestire le unità di
input/output senza l'intervento diretto dell'unità di controllo. Questo dipositivo
aggiuntivo per controllare esclusivamente le operazioni di I/O prende il nome di
CANALE di I/O.
Il canale può essere visto come un calcolatore indipendente dalla CPU che provvede
a gestire il programma utente. Esso si occuperà dell'eventuale conversione di codici,
del controllo sulla quantità dei dati da memorizzare, dell'indirizzamento delle varie
unità di I/O.
Il canale gestisce di solito più unità di I/O due sono i tipi di gestione:
• mediante bus (un'ulteriore interfaccia tra il canale e le unità di I/O (pag. 436)
• mediante gestione a stella, il canale parla direttamente con l'unità.
I PC operano in genere con la logica del bus. La gestione a stella è più efficiente
rispetto a quella bus perchè il canale parla direttamente con le singole unità di I/O. Se
la comunicazione è diretta significa che io avrò un certo numero di uscite
specializzate che non posso aumentare, la soluzione è quindi molto rigida.
Invece nell'altro tipo di gestione l'unità si attacca per il tramite di un bus che è
un'interfaccia con una tecnologia molto più bassa che mi consente di avere un
numero molto elevato di unità di collegamento.
Quindi la tecnologia a stella è più efficiente perché il canale parla direttamente
con le unità di I/O ma è più limitativa, la tecnologia di bus è meno efficiente ma
molto più flessibile. In una macchina in cui vi possono potenzialmente essere più
unità di I/O la filosofia più razionale è quella del bus, in una macchina specializzata
che ha un unico output userò la tecnologia a stella.
Il sistema operativo risulta quindi costituito da:
• programma caricatore
• programma traduttore
• programma per la gestione dell'I/O
• programma per la sincronizzazione tra CPU e canale
ANNI '60
L'idea del canale è stata una buona idea ma non risolve il problema di esecuzione
contemporanea di più programmi. Se la CPU resta momentaneamente inattiva poichè
sul prog. 1 sta intervenendo un'altra unità, essa potrà intanto operare su un altro
programma, si ha così un uso efficiente della CPU. Nasce dunque la
multiprogrammazione (pag. 438) cioè la capacità del sistema operativo di far
condividere a più programmi l'uso della CPU. quando un programma effettua una
operazione di I/O, l'uso della CPU passa ad un altro programma, i programmi in coda
21
22. Appunti d’esame
Il computer www.profland.135.it
attendono lunghi periodi di tempo nell'attesa dell'istuzione di I/O del programma che
sta utilizzando la CPU.
Time Sharing
Il processo mediante il quale passiamo da un programma a un'altro richiede
una strategia dunque ci dovrà essere nel calcolatore un programma che gestisce
questa filosofia con un certo criterio.
Nasce la filosofia di gestire il tempo con cui i programmi stanno in memoria ad ogni
programma viene assegnato un tempo massimo di utlizzo della CPU (time slice) la
filosofia attuale è quella del Time Sharing.
Ogni programma può utilizzare la CPU finché non si verifica una delle seguenti
condizioni:
1. il programma finisce
2. il programma va in errore (divisione per zero, overflow...)
3. è richiesta una operazione di I/O
4. è terminato il tempo assegnato
Casi 1 e 2: il programma è eliminato dalla memoria
Casi 3 e 4: il programma è sospeso (viene mantenuto nella memoria)
Il mantenimento di un programma in memoria potrebbe essere costoso se questo è di
elevate dimensioni conviene quindi scaricarlo da qualche altra parte in attesa che
venga ripreso.
Lo Scheduler
Per decidere quale programma passare in memoria quando diversi programmi sono in
attesa, bisogna stabilire un ordine di accesso alla CPU. Si dovrà dunque disporre di
un programma che stabilisca quest'ordine, cioè lo scheduler.
Lo Scheduler per decidere la priorità si basa su diversi fattori:
• memoria richesta dai programmi
• tempo di CPU richiesto dai programmi
• tipo del programma (di utente o di sistema)
• tipo di utente (qualunque o gestore del sistema)
• uso recente della CPU
Lo scheduler assegna ad ogni programma un numero che determina il criterio di
precedenza nell'utilizzo della CPU.
Hanno priorità più alta i programmi che richiedono poca memoria e poco tempo di
CPU. I programmi di sistema hanno priorità più alta rispetto a quelli di utente.
Un SISTEMA OPERATIVO è l'insieme dei programmi che consentono il controllo e
la gestione di tutte le risorse del calcolatore
Hardware + sistema operativo (software) = macchina virtuale.
22
23. Appunti d’esame
Il computer www.profland.135.it
Evoluzione della memoria (pag. 454)
Buona parte della memoria centrale è occupata da un certo numero di programmi del
sistema operativo. L'evoluzione dei sitemi operativi comporta l'uso di memorie che
sono sempre più ampie.
La memoria del computer ha uno spazio fortemente limitato rispetto a quelle
che sono le nostre necessità. La memoria centrale è quella che contiene
effettivamente il programma, solo se è contenuto in essa quest'ultimo può essere
eseguito. Esistono altre memorie aggintive abilitate a contenere dati storici.
I programmi che non posso essere memorizzati in memoria centrale vengono
memorizzati nella memoria di massa o ausiliaria.
Le memorie di massa hanno un minor costo rispetto alla centrale, maggiore capacità
ma più lento tempo di accesso, e sono stabili. Sono costituite da dischi e nastri
magnetici. La CPU non può manipolare informazioni direttamente dalla memoria di
amssa. Queste devono essere prima trasferite in memoria centrale; si ha quindi la
necessità programma che consenta il trasferimento dei dati dalla memoria di massa
alla memoria centrale.
Poché l'hard disk ha delle capacità molto elevate potrebbe anche contenere
programmi che non entrano in memoria centrale in tal caso quel programma non può
essere eseguito. Non ho bisogno di caricare tutto il programma affinché esso possa
essere eseguito ma lo posso suddividere in blocchi (pagine) per tenere in memoria
solo l'istruzione in esecuzione. (pag. 458) I programmi entrano ed escono
continuamente dalla memoria, si ha dunque la necessità di programmi per la gestione
automatica dello scambio di informazioni tra memoria centrale e memoria ausiliaria
(memoria virtuale)
Il termine memoria virtuale sta ad indicare che i computer possono andare oltre le
loro capacità intrinseche di memoria. Vi deve essere un legame tra la memoria
virtuale e quella reale. Se la memoria reale è piccola questo meccanismo di passaggio
(paging) deve essere molto frequente ciò rallenta le funzioni del sistema. Le
prestazioni di una macchina dipendono da quanta memoria centrale poiché in
relazione alle sue dimensioni il paging sarà più o meno frequente. Anche il disco è in
grado di influenzare il paging, se il disco è lento lo sarà anche il paging.
Il software del computer risiede in una struttura esterna che abbiamo
genericamente chiamato memoria di massa. Ogni sistema operativo organizza il
proprio archivio in un certo modo creando il file sistem. Col termine file noi
indichiamo un insieme di informazioni del computer. Ciò che distingue i file è l'end
of file cioè un segnale di fine. Ad ogni file noi daremo un nome che ci permetterà di
identificarlo. Ma non basta assegnare dei nomi soltanto occorre fissare delle regole di
organizzazione.
L'organizzazione è articolata in gruppi, se il gruppo è molto numeroso potrei
suddividerlo in sottogruppi, si ha dunque una struttura gerarchica o ad albero. I nomi
devono essere assegnati anche ai sottogruppi. I sottogruppi vengono chiamati
cartelle.
23
24. Appunti d’esame
Il computer www.profland.135.it
Una cartella può contenere oggetti o eventualmente altre cartelle. Nel file
sistem la nomenclatura segue la logica posizionale, il nome vale per dove sta. Si
associa al nome l'intera percorrenza dalla radice sino al file. Ad esempio se ho due
file chiamati entrambe B, ma il secondo è contenuto nella 1, quest'ultimo è
denominato 1B.
I file oltre ad avere un nome, avranno anche un titolo ciò permette di codificarli.
Il titolo si può attribuire in due modi:
• I nomi per i file non sono liberi (i file Fortran saranno preceduti da una F, gli
assembler da una A) tale metodo è complicato e poco flessibile.
• I nomi sono liberi, ma ad essi verrà affiancato un titolo (estensione).
I programmi possono essere a seconda del tipo essere suddivisi in due parti:
• una parte residente in memoria centrale contenete i programmi che devono essere
utilizzati da tutti i programmi in esecuzione.
• una parte residente in memoria di massa che contiene i programmi che non devono
essere mandati immediatamente in esecuzione dopo l'accensione.
Questa parte principale prende il nome di Kernel.
Il kernel del sistema operativo è l'insieme dei programmi che risiedono
permanentemente in memoria centrale (cioé vengono caricati al momento
dell'accenzione oltre ai gestori della memoria e della CPU) appartengono
generalemete al Kernel i programmi per la gestione di:
• I/O
• situazioni speciali (accensione, spegnimento, accesso via rete, malfunzionamenti)
• scambio di informazioni tra memoria centrale e memorie ausiliarie.
La memoria centrale deve contenere almeno il programma che consenta di far partire
la macchina. Negli anni quaranta questo programma veniva caricato a mano.
Attualmente tali comandi vengono scritti in una terza memoria classificabile come
memoria centrale poiché deve essere di tipo operativo, la quale deve avere la
caratteristica teconolgica di non cancellarsi. Si tratta di istruzioni che permettono di
innescare il processo di caricamento del Kernel.
La memoria centrale è dunque divisa in due parti di cui una necessariamente non
volatile nella quale vengono scritte le informazioni di partenza.
ROM = read only memory
memoria di sola lettura che contiene informazioni inserite al momento della
costruzione ed il cui contenuto non si perde se si spegne il computer (memoria non
volatile)
24
25. Appunti d’esame
Il computer www.profland.135.it
RAM = random access memory significa memoria di accesso diretto nel senso che
ogni locazione di memoria può essere raggiunta indipendente mente dagl'altri. Quindi
la memoria dal punto di vista logico non è di tipo sequenziale.
inoltre fanno parte della memoria centrale particolari memorie di capacità ridotta ma
ad accesso molto rapido: i registri che fanno parte dell'unità logico aritmentica che
oggi è parte della CPU.
La CPU ha una sua memoria che conterrà i dati che sono in esecuzione.
Inoltre poiché le strutture operative hanno velocità diverse è inevitabile che si venga a
creare una sturuttura intermedia che attenui le differenze di velocità si hanno così le
memorie cache che si collocano tra la Ram e la CPU e sono caratterizzate da una
maggiore velocità.
25