𝑙 ≥ log 𝑛𝑘
La rappresentazione digitale
La rappresentazione binaria digitale è basata su un alfabeto costituito da due
simboli 0 e 1. Tali simboli rappresentano le unità minime di rappresentazione e
memorizzazione digitale denominate BIT. La rappresentazione digitale semplifica
la memorizzazione delle informazioni e rende i sistemi digitali meno soggetti ai
disturbi elettrici. In generale esistono tanti fenomeni diversi che possono essere
facilmente associati a un bit:
- La presenza o assenza di tensione elettrica in un circuito elettrico
- La polarità positiva e negativa di un magnete
- La presenza di un buco su un supporto ottico
- L’apertura o chiusura di una conduttura
- La condizione di acceso o spento di un interruttore
Nei sistemi di numerazione basati su numeri a precisione finita si introduce il
concetto di periodicità per cui valori non compresi nell’intervallo di definizione
vengono fatti ricadere in esso. In tali sistemi di calcolo ci possono essere degli errori,
si dice condizione di overflow quella che si verifica quando il risultato
dell’operazione è minore o è maggiore dei valori min e max dell’intervallo. Anche
l’algebra dei numeri a precisione finita è diversa da quella convenzionale in quanto
proprietà del tipo, associativa e distributiva, non sempre vengono rispettate in base
all’ordine con cui le operazioni vengono eseguite.
Il sistema binario consente di rappresentare i numeri mediante la compilazione di
due soli simboli ovvero di codificare i numeri direttamente in bit. Nel byte il bit più a
destra è quello meno significativo mentre quello a sinistra è quello più significativo.
I sistemi di numerazione vengono di solito classificati in sistemi posizionali e non
posizionali. Nei primi ogni cifra della sequenza ha un'importanza variabile a seconda
della relativa posizione, nei secondi ogni cifra della sequenza esprime una quantità
non dipendente dalla propria posizione. In informatica per evitare di dover trattare
con stringhe di bit troppo lunghe sono stati introdotti il sistema ottale e quello
esadecimale. La conversione avviene raggruppando le cifre binarie in gruppi di tre a
partire dalla posizione di peso minore. La conversione opposta avviene in modo
opposto: ogni cifra ottale viene esplosa nelle tre cifre binarie che la rappresentano.
La rappresentazione esadecimale è ancora più compatta il processo di conversione
è equivalente a quello binario ma le cifre binarie devono essere raggruppate in
gruppi di quattro.
Conversione da binario con virgola fissa a decimale
Trasformare in decimale il numero binario in virgola fissa: 110,101
Per la parte intera del numero si lavora come d’abitudine per i numeri binari interi,
ovvero moltiplicando ogni cifra per la rispettiva potenza di due data dalla sua
posizione (la cifra più vicina alla virgola va moltiplicata per 2^0, la successiva per 2^1
e così via) e sommando tutto.
parte intera in binario 110 -> 6 in decimale perché:
prima cifra: 0 * 2^0 = 0 * 0 = 0
seconda cifra: 1 * 2^1 = 1 * 2 = 2
terza cifra: 1 * 2^2 = 2 * 2 = 4
somma dei valori parte intera: 0 + 2 + 4 = 6
Per la parte dopo la virgola si lavora in modo del tutto analogo alla parte intera: si
moltiplica ogni cifra per la rispettiva potenza di due data con esponente pari alla sua
posizione e poi di somma tutto; l’esponente della potenza di due che moltiplicherà
la cifra più vicina alla virgola sarà -1, l’esponente di quella successiva -2 e così via.
parte dopo la virgola in binario 0,101 -> in decimale 0,625 perché:
prima cifra: 1 * 2^ (-1) = 1 * 0,5 = 0,5
seconda cifra: 0 * 2^ (-2) = 0 * 0,25 = 0
terza cifra: 1 * 2^ (-3) = 1 * 0,125 = 0,125
somma dei valori: 0,5 + 0 + 0,125 = 0,625
La rappresentazione del numero in decimale sarà data dalla somma della parte
intera a quella dopo la virgola.
numero complessivo
parte intera + parte dopo la virgola:
6 + 0,625 = 6,625
Conversione da decimale con virgola a binario
Come si passa da un numero decimale con la virgola a un numero binario con la
virgola
Trasformiamo 7,625 in binario
La parte intera si trasforma in binario come d’abitudine per i numeri interi.
decimale: 7 -> binario: 111
Per la parte dopo la virgola si procede ripetendo il seguente procedimento fino a
che si è rappresentata completamente la parte dopo la virgola o si sono ottenute il
numero di cifre dopo la virgola cercate.
Il procedimento consiste in questo:
– si prende il numero senza parte intera e lo si moltiplica per due, la parte intera del
risultato sarà la prima cifra dopo la virgola
0,625 * 2 = 1,250 <- 1 sarà la prima cifra dopo la virgola
– si ripete il procedimento con il risultato della moltiplicazione del passaggio
precedente.
0,25 * 2 = 0,5 <- 0 sarà la seconda cifra dopo la virgola
– bisogna fermarsi quando: o il risultato della moltiplicazione è 1 o 0 (in quel caso si
è scritto esattamente il numero da rappresentare) o ci si può fermare al numero di
cifre dopo la virgola voluto, quando si lavora al computer di norma c’è un numero
massimo di cifre memorizzabili (in questo caso il numero rappresentato non sarà
esattamente il numero da rappresentare ma una sua approssimazione).
0,5 * 2 = 1 <- 1 sarà la terza cifra dopo la virgola
0 * 2 = 0 <- dalla quarta cifra in poi ci sono solo zeri che sono omettibili
il risultato sarà poi dato dalla parte intera e dalla parte dopo la virgola quindi:
111,101 è il valore in binario del decimale 7,625
La rappresentazione dei numeri relativi
Per i numeri interi relativi ovvero tutti i numeri interi positivi e negativi incluso zero
si possono utilizzare diverse tipologie di rappresentazione, per segno e modulo,
complemento a uno, complemento a due e per eccesso. Per segno e modulo si può
utilizzare ad esempio lo 0 come segno positivo e 1 come segno negativo.
Complemento a due
SE NUMERO POSITIVO:
1) TRASFORMO IL NUMERO IN BINARIO
2) AGGIUNGO EVENTUALI ZERI DAVANTI AL NUMERO PER ARRIVARE AL
NUMERO DI BIT PER LA RAPPRESENTAZIONE IN COMPLEMENTO A DUE
Esempio: 14 con 8 bit
1) -15=1110
2) 1110 aggiungo 4 zeri davanti per arrivare a 8 bit=00001110
SE NUMERO NEGATIVO:
1) TRASFORMO IL NUMERO SENZA SEGNO IN BINARIO
2) AGGIUNGO EVENTUALI ZERI DAVANTI AL NUMERO PER ARRIVARE AL
NUMERO DI BIT PER LA RAPPRESENTAZIONE IN COMPLEMENTO A DUE
3) INVERTO I BIT (al posto di 0 metto 1 e viceversa)
4) SOMMO 1 (attenzione ad eventuali riporti nella somma)
Esempio: -14 con 8 bit
1) 14=1110
2) 1110 aggiungo 4 zeri davanti per arrivare a 8 bit=00001110
3) inverto i bit quindi 11110001
4) sommo 1 quindi 11110001+1= 11110010
Complemento a uno
Si scambiano 1 con 0 e viceversa
Per eccesso
In tale rappresentazione, il numero binario sarà associato allo zero, mentre i valori
minori a tale numero saranno i numeri negativi e quelli maggiori a quelli positivi. Nel
caso di l=8 i numeri appartenenti a (-127;+127) sono mappati nell’intervallo (0,255)
(con i numeri da 0 a 127 considerati negativi, il valore 128 vale 0, e quelli maggiori a
128 sono i positivi)
La rappresentazione dei numeri reali
Un numero reale viene rappresentato in binario attraverso una notazione scientifica
con m numero frazionario detto mantissa e la base b un numero naturale prefissato
ed e numero intero chiamato esponente. L'esponente determina l'ampiezza
dell'intervallo di valori preso in considerazione mentre il numero di cifre della
mantissa determina la precisione del numero. I valori rappresentabili in binario
appartengono invece a un sottoinsieme che contiene un numero finito di valori reali
ognuno dei quali rappresenta un intervallo del continuo. La sostituzione di un
numero reale x con il valore X rappresentante l'intervallo a cui x appartiene pone
notevoli problemi di approssimazione. Per valutare gli effetti delle approssimazioni
e gli errori che ne possono derivare è nata la disciplina chiamata calcolo numerico.
In concreto i numeri reali rappresentabili in binario godono della seguente
proprietà.
|𝑥 − 𝑋|
<𝜀
|𝑥 𝑖+1 − 𝑋𝑖|
Dove 𝜀 rappresenta l’errore e X=X se si approssima con difetto, X=X 𝑖+1 se si
approssima per eccesso.
L'insieme dei numeri reali è costituito da infiniti valori ma i numeri reali
rappresentabili sono definiti in un insieme limitato con estremi predefiniti minreal e
maxreal. Si definiscono nel caso dei numeri reali:
-l’overflow come la condizione si verifica quando i valori sono più piccoli di minreal o
più grandi di maxreal
-underflow come la condizione che si verifica quando un valore per effetto delle
approssimazioni viene confuso con lo zero.
La rappresentazione binaria dei numeri reali nota anche come rappresentazione in
virgola mobile, fissata la base consente di esprimere lo stesso valore con infinite
coppie (48.5=4.85 x 10=0.485 x 102 ). Nei numeri decimali possiamo considerare
come normalizzata la rappresentazione in cui la parte intera è formata da una sola
cifra. Per i numeri minori di uno finché la cifra più a sinistra è uno zero, si traslano
verso sinistra le cifre diverse da zero decrementando l'esponente di tante cifre
quante sono le posizioni scalate ad esempio 0.0025x100=0.2500x 10−2 . La mantissa
scalata è detta normalizzata e il numero in virgola mobile, il nome di un numero
normalizzato. Per i numeri maggiori di uno la normalizzazione avviene
semplicemente spostando la virgola a sinistra e sommando l’esponente di tante
cifre quante sono le posizioni scalate finché il numero non diventa minore di 1. La
forma normalizzata della mantissa obbliga che la sua prima cifra sia diversa da zero
e che la mantissa sia sempre un numero frazionario minore di uno. Con la
rappresentazione in virgola mobile le operazioni possono generare errori di
approssimazione. Il grande vantaggio della rappresentazione in virgola mobile è che
se si conviene che le mantisse siano trasformate in valori minori di uno con
operazioni interne, un numero reale può essere rappresentato nella memoria di un
calcolatore con numero intero indicativo della mantissa e con un altro numero
intero per l'esponente. Nel 1980 i principali costruttori di elaboratori elettronici
producevano calcolatori che utilizzavano i numeri reali, ognuno con un proprio
formato numerico e con proprie convenzioni di calcolo. Nel 1985 divenne operativo
lo standard LEEE 754 per i numeri in virgola mobile, e i maggiori costruttori
adottarono questo standard per i loro processori matematici. Tale standard
definisce principalmente tre formati numerici a virgola mobile:
-singola precisione 32 bit
-doppia precisione 64 bit
-precisione estesa 80 bit
L’algebra di boole
L'algebra di Boole consente di descrivere in forma algebrica le funzioni dei circuiti
componenti e delle reti fornendo i metodi per la realizzazione del progetto logico.
Con l'impiego di tale algebra il progetto di un'apparecchiatura numerica viene
condotto secondo una metodologia puramente matematica che fornisce
indicazioni non solo sul comportamento della rete, ma anche sulla struttura e
soprattutto sui collegamenti da realizzare fra gli n-poli elementari per ottenere
dalla rete un'elaborazione dei segnali. L’algebra di boole consente di stabilire una
corrispondenza fra espressioni algebriche e i circuiti di un calcolatore; le prime
descrivono le elaborazioni effettuate dalle seconde nonché la loro organizzazione in
termini di schemi, viceversa da una rete si trae l’espressione algebrica che la
descrive. L'algebra di Boole si sviluppa partendo alla definizione di insieme di
supporto X, detto anche sostegno, su cui sono definiti gli operatori binari che
associano a coppie di elementi X un elemento dello stesso insieme. Gli operatori
definiti nell'algebra di Boole sono due:
l'operatore somma +
l'operatore prodotto x
Valgono le seguenti proprietà:
I commutativa: della somma e del prodotto
II distributiva: della somma e del prodotto
III dell'esistenza dell'elemento neutro (somma 0, prodotto 1)
IV del complemento per cui per ogni elemento X del sostegno deve esistere e deve
essere unico l’elemento X’ detto complemento di X tale che X+X’=1 / XxX’=0
In più con queste si possono dimostrare ulteriori proprietà quali
V associativa: della somma e del prodotto
VI impotenza: per somma X+X=X, per il prodotto XxX=X
VII assorbimento: della somma X+(XxY)=X, del prodotto Xx(X+Y)=X
VIII del minimo e del massimo: per il minimo Xx0=0, per il massimo X+1=1
Una sestupla di elementi per cui valgono la proprietà I, V, VI, VII è detta reticolo una
proprietà del reticolo è che risulta possibile introdurre in esso una relazione d'ordine
che gode della proprietà riflessiva asimmetrica e transitiva. Un reticolo che gode
delle rimanenti proprietà è detto algebra di Boole. Tutti gli assiomi di un’algebra di
Boole sono caratterizzati dal principio di dualità che recita ‘’da una qualsiasi identità
booleana se ne ricava un'altra sostituendo l'operatore di somma con quello
prodotto e l'elemento zero con uno e viceversa’’. Inoltre nell’algebra di Boole
valgono le relazioni di de Morgan secondo cui: il complemento di una somma è
uguale al prodotto dei complimenti dei termini, e il complemento di un prodotto è
uguale alla somma dei complementi dei fattori. Se si definiscono le costanti
booleane come gli elementi appartenenti all'insieme x di sostegno, e le variabili
booleane, variabili a cui possono essere associati insiemi di costante booleane,
allora si possono costruire espressioni booleane con gli operatori di
complementazione somma e prodotto del tipo:
𝑎 𝑥 𝑏 + (~𝑏 + 𝑐 𝑥 𝑎)
La CPU, dopo aver attivato il processore dedicato, può occuparsi di altro fino a che
non viene interrotta.
L’utilizzo di processori dedicati permette un miglioramento complessivo del
sistema (Questo perché vengono utilizzati i tempi morti dei canali, anche se il
turnaround time dei singoli programmi peggiora)
Overhead (o sovraccarico gestionale):
-Tempo di esecuzione e risorse concessi ai programmi del sistema operativo,
sottraendoli ad altri programmi in esecuzione
-È di norma tanto più grande quanto più complesso e sofisticato è il sistema
operativo
Confronto tra tempi di elaborazione
Chi gestisce tali tempi è il sistema operativo che adesso per ottimizzare
sovrappone i tempi.
Evoluzione storica dei sistemi operativi
Generazione 0
Assenza di sistemi operativi
Gli utilizzatori
-scrivono programmi direttamente in linguaggio macchina
-si fanno carico del caricamento in memoria e dell’avvio dei programmi
-eseguono la stampa dei risultati; in caso di terminazione anomala, eseguono il
dump (stampa) dei registi della memoria per esaminare la causa dell’errore
Il programma
-viene caricato singolarmente, usando schede perforate
-viene fatto eseguire fino al suo completamento, oppure fino a che, per qualche
motivo, non si ferma
La CPU
-rimane inattiva durante tutti i periodi relativi alla gestione delle operazioni di I/O e
tra l’esecuzione di un programma ed un altro
Generazione 1
Monitor e sistemi operativi batch
La General Motors produce il primo sistema operativo per il proprio calcolatore,
l’IBM 701
Il sistema operativo è una sorta di monitor che si occupa di
-caricare i programmi in memoria
-controllare l’esecuzione del programma
-azzerare (reset) la macchina tra un’esecuzione e l’altra di programmi
-limitare i tempi morti della CPU riducendo l’azione dell’uomo nell’esecuzione dei
programmi
I programmi sono fatti in modo da restituire il controllo, alla fine della propria
esecuzione, al sistema operativo
Un’ulteriore ottimizzazione è quella di raggruppare più programmi in un singolo
gruppo o lotto (batch)
-I programmi sono caricati tutti, prima dell’esecuzione, su una periferica più veloce
del lettore di schede
-Il caricamento viene fatto fuori linea da un apposito dispositivo
-Il controllo della esecuzione ed il passaggio da un programma all’altro avviene
utilizzando un apposito linguaggio di controllo Job Control Language (JCL)
Sono messi a disposizione dei programmatori delle primitive di I/O sui dispositivi
standard
-I programmatori sono svincolati dalla natura delle periferiche di I/O
Generazione 2
Sistemi operativi multiprogrammati
Introduzione della multiprogrammazione (o multitasking)
-Caricamento in memoria centrale di più programmi che condividono la CPU
Questa caratteristica è resa possibile grazie all’introduzione di due importanti
innovazioni:
Processori di I/O
-Processori più semplici della CPU, dotati di un insieme proprio di istruzioni e
registri, in grado di gestire la comunicazione con i dispositivi di I/O
Interruzioni
-Segnali generati dai controllori dei dispositivi di I/O in grado di interrompere il
normale ciclo di esecuzione della CPU
Le operazioni di I/O sono sovrapposte con quelle di calcolo
-Vengono eliminati i tempi morti della CPU dovuti all’attesa del completamento
delle operazioni di I/O
-Se la CPU sta eseguendo un programma che richiede un’operazione di I/O
il programma corrente viene sospeso
l’operazione di I/O è delegata al processore di I/O del dispositivo
-La CPU può eseguire un altro programma
un’interruzione segnala il termine dell’operazione di I/O e la ripresa del programma
precedentemente sospeso
Il sistema operativo è l’amministratore delle risorse del calcolatore
-I vari programmi che coesistono nella memoria centrale devono dividersi l’uso di
periferiche, memoria e CPU
Generazione 3
Sistemi operativi general purpose
Ottimizzazione della tecnica della multiprogrammazione:
-Caricamento in memoria dei programmi idonei all’esecuzione, mediante la tecnica
dello swapping. Ogni programma viene spostato dalla memoria di massa alla
memoria centrale solo quando serve
-Caricamento in memoria di specifiche parti di un programma. Quelle che con più
probabilità serviranno in un dato istante secondo il principio di località dei dati e
delle istruzioni
Il numero di programmi che è possibile caricare nella memoria centrale
contemporaneamente aumenta
-Grado di multiprogrammazione
Introduzione della memoria virtuale
-Viene estesa la capacità della memoria centrale con quella delle memorie di massa
-Con la divisione del programma in parti vengono portate in memoria solo quelle
che devono essere eseguite. Le restanti restano a disposizione sulla memoria di
massa
Swap out
-Le porzioni di programma sono trasferite in memoria di massa quando non
servono
Swap in
-Le porzioni di programma che devono essere eseguite sono prelevate dalla
memoria di massa
Generazione 4
Sistemi operativi time sharing
Sistemi multiutente o conversazionali/interattivi
-Più utilizzatori possono avere accesso diretto e contemporaneo a programmi e dati
durante l’esecuzione
Problema
-Programmi con molto calcolo interno (CPU bound) possono monopolizzare l’uso
della CPU, causando lunghi tempi di attesa per gli altri programmi
Soluzione
-Assegnazione di intervalli di tempo (time slice) della CPU ad ogni programma
-Terminato tale tempo il programma in esecuzione deve abbandonare la CPU
-Viene eseguito il programma successivo secondo prestabilite politiche di
schedulazione
Un programma potrebbe richiedere molte time slice prima di terminare
-Rispetto ai sistemi multiprogrammati non time sharing, il turnaround time
peggiora ma migliora il throughput complessivo
Generazione 5
Sistemi operativi per PC e transazionali
Architettura interna dei sistemi operativi pressoché invariata
-L’attenzione viene posta sulla progettazione di interfacce d’utilizzo user-friendly.
Facilitano l’uso dei primi Personal Computer agli utenti inesperti
-Le funzionalità sono rivolte alla tipologia di applicazioni per cui i sistemi operativi
sono progettati
Sistemi operativi transazionali
-Sistemi interattivi destinati ad eseguire transazioni. Sequenze di operazioni
elementari logicamente legate, dove l’utente interroga ed aggiorna archivi di dati
Generazione 6
Sistemi operativi real-time, per multiprocessori, distribuiti
Sistemi operativi real-time
-Gestiscono programmi che interagiscono con l’ambiente esterno attraverso
periferiche garantendo tempi di risposta utili per le applicazioni e l’ambiente
esterno stesso. Ad es., sistemi per il controllo di un reattore nucleare o dei radar
Sistemi operativi con supporto multiprocessore e distribuiti
-Gestiscono più processori e risorse multiple che non sono più localizzati su una
macchina, ma si trovano distribuiti sia fisicamente che logicamente. Supportano
l’evoluzione dell’hardware e la diffusione di internet
Generazione 7
Sistemi operativi per dispositivi mobili
Adeguamento delle caratteristiche dei sistemi operativi ai dispositivi mobili. Ad es.,
palmari e cellulari
In tali sistemi si prediligono caratteristiche come interfacce grafiche evolute e
risparmio energetico
Esempi sistemi operativi
In commercio esistono numerosi sistemi operativi differenti. Fino a qualche anno fa,
l’attitudine delle società di sistemi di elaborazione era quella di realizzare sistemi
operativi proprietari per i loro sistemi. La propensione attuale è quella di sviluppare
sistemi operativi portabili su piattaforme diverse.
UNIX
Sviluppato nel 1969 nei Bell Laboratories della AT&T:
-Ulteriori sviluppi da parte del mondo universitario
-Esistono differenti versioni di UNIX, ognuna con diverse caratteristiche a seconda
del produttore: BSD, System V, SunOS,…
Caratteristiche:
-Multiutente
-Multitasking con time sharing
-Portabile: Grazie all’impiego del linguaggio C
-Aperto
-A linea di comando
DOS (Disk Operating System)
Versione più famosa è MS-DOS, sviluppata dalla Microsoft nel 1981 per il PC IBM.
Progettato e sviluppato per lavorare con i microprocessori Intel 8086-8088.
Adottato da altri per PC IBM-compatibili
Caratteristiche:
-Monoutente
-Monotasking
-A linea di comando
OS/2
Sviluppato nel 1987 da Microsoft e IBM per le piattaforme basate sui processori Intel
e compatibili. Versione 3.1 del 1989 ultima ad essere sviluppata da IBM e Microsoft.
L’ultima versione prodotta da IBM nel 2002 è la 4.52
Caratteristiche:
-Multiutente
-Multitasking
-Supporta la modalità protetta
-Interfaccia grafica
Linux
Sviluppato nel 1991 dallo studente finlandese Linus Torvalds. Il suo nucleo è
utilizzato come base in diverse distribuzioni: Red Hat, Debian, Fedora, Mandrake,
Ubuntu,…
Caratteristiche
-Multiutente
-Multitasking
-Aperto
-Unix-like
-Interfaccia grafica
Windows
Famiglia di sistemi operativi prodotti dalla Microsoft
Nasce negli anni ’80 come ambiente operativo dei sistemi DOS. Si impone sul
mercato dalla versione 3.1
Caratteristiche:
-Multiutente
-Multitasking
-Multimedialità
-Grafica curata ed interazione intuitiva
-Versioni per PC, workstation, server, dispositivi mobili
Mac OS (Macintosh Operating System)
Sviluppato nel 1984 da Apple per computer Macintosh. Prima versione ideata per
processori CISC Motorola 68000. Adattato dopo il lancio nel 1994 di Power
Macintosh basati sui processori RISC PowerPC sviluppati da Apple, IBM e Motorola.
Completamente riscritto e basato su UNIX a partire dalla versione Mac OS X. Dal
2005 disponibili versioni per sistemi Apple basati su CPU Intel
Caratteristiche:
-Multiutente
-Multitasking
-Multimedialità
-Basato completamente su interfacce grafiche (GUI)
ARCHITETTURA SISTEMI OPERATIVI
Ogni livello del sistema operativo è una macchina virtuale, ovvero una macchina definita da ciò che è
capace di fare e non da com’è fatta. Solo l’hardware costituisce una macchina reale. Il sistema operativo ha
il principale obiettivo di virtualizzare le caratteristiche dell’hardware, offrendo all’utente la visione di una
macchina astratta più potente e più semplice da utilizzare di quella fisicamente disponibile.
Esistono dei livelli del sistema operativo:
Interfaccia utente