Date post: | 02-May-2015 |
Category: |
Documents |
Upload: | urbano-speranza |
View: | 215 times |
Download: | 3 times |
Il Software
Programmare direttamente la macchina hardware è molto difficile:
l’utente dovrebbe conoscere l’organizzazione fisica del computer e il suo linguaggio macchina;
un programma dipenderebbe strettamente dalla struttura hardware e ogni piccola differenza hardware comporterebbe una riscrittura del programma stesso.
Questo non è accettabile, è necessario disporre di un meccanismo per:
astrarre dall’organizzazione fisica della macchina usare nello stesso modo, o in modo molto simile,
macchine leggermente diverse dal punto di vista hardware o, al limite, macchine con hardware molto diverso
interagire in modo semplice con la macchina; programmare ad alto livello la macchina; inoltre vogliamo programmi applicativi per
svolgere diversi compiti (videoscrittuta, fogli di calcolo, database, etc…)
Nei moderni sistemi di elaborazione questi obiettivi vengono raggiunti grazie alla definizione di macchine virtuali che vengono realizzate al di sopra della macchina hardware reale
HW
macchina virtuale
Utente
Macchine Virtuali Ogni macchina reale ha un suo linguaggio macchina
L0 le cui istruzioni sono direttamente eseguibili dai circuiti elettronici (HW)
Al di sopra di questo linguaggio è possibile definire una gerarchia di linguaggi Li e fornire delle regole per tradurne le istruzioni in opportune sequenze di istruzioni in linguaggio macchina
L’insieme di queste nuove istruzioni definisce una macchina virtuale in quanto non esiste fisicamente ma viene realizzata mediante il software
La macchina virtuale si occupa della traduzione delle istruzioni al livello Li nell'opportuna sequenza di istruzioni di livello Li-1 che realizza la stessa funzione
Machine virtuali
Hardware - Linguaggio macchina L0
Macchina virtuale N - sistema di comandi LN
Utente
Interprete dei comandi
Interfaccia
Macchina virtuale 1 - sistema di comandi L1
Interprete dei comandi
Il software fornisce:
1. Un sistema di interazione semplice con la macchina
2. Linguaggi ad alto livello per programmare la macchina;
3. Programmi applicativi per svolgere diversi compiti (videoscrittuta, fogli di calcolo, database, etc…)
supponiamo che l'utente voglia stampare un documento doc1 (un file). A livello fisico questa operazione è complessae richiede operazioni di trasferimento dati dal discoalla stampante (via memoria principale)
La macchina virtuale potrebbe fornire all'utente un semplice comando di stampa del tipo:
stampa doc1mediante il quale può richiedere la stampa delle informazioni contenute nel file di nome doc1
1. Esempio esecuzione di un comando virtuale
La macchina virtuale deve innanzitutto verificare se si tratta di un comando valido
Poi tradurlo nell’opportuna sequenza di istruzioni a basso livello per la macchina fisica
Grazie a questo livello software si può astrarre dalle caratteristiche fisiche della macchina e della periferica (la stampante)
Si può anche fare in modo che macchine differenti siano
usabili in modo simile: si tratta, infatti, di costruire al di sopra
delle diverse macchine fisiche la stessa macchina virtuale
Per ogni comando della macchina virtuale si dovranno però
avere diversi programmi di traduzione, uno per ogni tipo di
hardware
2. Linguaggi di programmazione
Un programma scritto in un linguaggio di programmazione è costituito da una sequenza di istruzioni ad alto livello strutturate in modo complesso
Compilatore: traduce il programma intero in un insieme di istruzioni macchina– il programma tradotto si chiama (file) eseguibile
Interprete: traduce una istruzione per volta del linguaggio in una sequenza di istruzioni macchina e le esegue
Esempio di Programma in linguaggio C che calcola la funzione fattoriale
#include <stdio.h>
long int fattoriale(int n)
{if (n == 0 || n == 1)
return 1;
else
return n * fattoriale(n-1);
}
main()
{ int x;
printf("dimmi un numero\n");
scanf("%d", &x);
printf("fattoriale di %d = %d\n", x, fattoriale(x));
}
Compilazione
Il programma è contenuto in un file fatto.c fatto.c viene compilato mediante un
programma compilatore (in questo caso gcc)
gcc produce un eseguibile a.exe Il programma eseguible a.exe può essere
eseguito
Software di base Strumenti per l’uso di linguaggi ad alto livello:
– Interpreti e compilatori– Strumenti per l’esecuzione di programmi
Sistema Operativo: insieme di programmi che interagiscono e cooperano tra di loro per realizzare due obiettivi fondamentali:
– gestire efficientemente il computer e le sue periferiche, cercando di sfruttare al massimo tutte le componenti hardware
– creare un ambiente virtuale per facilitare l'interazione uomo-macchina
Compiti del Sistema operativo Configurazione e accensione macchina Gestione del processore Gestione della memoria principale Gestione di informazione in memoria
secondaria (File System) Gestione delle periferiche Interazione utente macchina: interfaccia e
interprete comandi Protezione dei dati (sicurezza)
Esempio di esecuzione di un comando da parte del sistema operativo
Eseguiamo da una finestra MS-DOS un comando come date:
Il comando provoca l’esecuzione di una decina (o anche più) di funzionalità del S.O.
Le operazioni effettuate provocano una serie di eventi in cui
vengono coinvolte sia risorse hardware che risorse software
Il coordinamento e la gestione delle varie risorse viene effettuato
dal Sistema Operativo
Esempio
Ogni carattere dato in input dalla tastiera viene ricevuto dal terminal driver che lo invia al monitor per la visualizzazione
listener
terminal driverdisk driver
file manager
Disco rigido
BUFFERTastiera
BUFFER
Monitor
148.608.043.200.010
timerdat
datMEMORIACENTRALE
Esempio
Il programma date tramite il terminal driver visualizza sul monitor la data
Tastiera
datelistener
terminal driverdisk driver
file manager
Disco rigido
BUFFER
BUFFER
Monitor
148.608.043.200.104
MEMORIACENTRALE01/04/03
timer
Struttura del sistema operativo
nucleo
gestione memoria processore, risorse
interfaccia comandi
Tipi di sistemi operativi
Esistono diversi tipi di sistemi operativi per diverse
classi di computer
Distinzione fondamentale
– sistemi mono-utente
– sistemi multi-utente
Il Sistema Operativo
Sistemi mono-utente pensati per Personal Computer– IBM PC - Compatibili (DOS - Windows)– Macintosh
Due diversi tipi di interazione utente/computer:– interazione testuale (es. MS-DOS per PC-IBM)– interazione grafica (es. Macintosh, Windows 95-98-
2000)
Sistemi operativi multi-utente: UNIX (Workstation, PC: LINUX)
– Utilizzato per computer collegati in rete– supporta varie interfacce grafiche (a
finestre) Windows NT
– Utilizzato per computer collegati in rete
Avviamento del computer
Fase di bootstrap: Verifica delle risorse hardware e
inizializzazione dei programmi relativi di gestione
diagnostica caricamento e mantenimento del sistema
operativo
BIOS (Basic Input-Output System)
E’ la parte piu’ interna del SO risiede su un chip di memoria RAM permenente (e ROM)
gestisce direttamente le risorse hardware (terminal driver)
gestisce anche il caricamento (avviamento) del sistema operativo (ad es. Windows o DOS)
Gestione del processore e dei processi
Il processore è la componente più importante di un sistema di elaborazione e pertanto la sua corretta ed efficiente gestione è uno dei compiti principali di un sistema operativo
Il ruolo del processore è quello di eseguire programmi
Si chiama processo un programma in esecuzione
Processore e processi
La gestione del processore è in modo:
mono-tasking: esegue un processo per volta (MS-DOS)
multi-tasking: esegue più processi contemporaneamente (Windows varie versioni dal 95, Macintosh, UNIX)
qualunque processo alterna fasi di esecuzione a fasi in cui è bloccato in attesa di qualche evento esterno
Un processo può essere in attesa che sia terminata un’operazione di input di dati oppure in attesa di poter usare una risorsa in quel momento occupata
mentre il processo è bloccato in attesa di eventi esterni, il processore rimane inattivo, in uno stato chiamato idle, e risulta pertanto sotto-utilizzato
Limite del mono-tasking
I tempi di lavoro delle periferiche di input/output, o
addirittura i tempi di reazione umani sono maggiori di
molti ordini di grandezza della velocità del processore
(quindi del tempo in cui un processo è in esecuzione)
Multi-tasking
Come è possibile eseguire più programmi contemporaneamente sullo stesso processore?Ad ogni istante vi è un solo processo attivo
Il processore alterna l’esecuzione dei vari programmi
Il tempo di lavoro della CPU viene suddiviso tra i vari programmi
Se l'alternanza tra i processi è frequente (ad es.10 millisecondi), l'utente ha l'impressione che l'esecuzione dei programmi sia simultanea
A livello macroscopico si ha quindi l'impressione della contemporaneità, mentre a livello microscopico si ha una semplice alternanza sequenziale molto veloce
Il tempo di esecuzione, cioè il tempo che intercorre tra l'inizio e la fine del processo, risulta aumentato rispetto al caso mono-tasking a causa dell’alternanza con gli altri processi
Un processo può trovarsi in tre diversi stati:
in esecuzione, quando sta utilizzando il processore;
in attesa (bloccato), quando è in attesa del verificarsi di un evento esterno (terminazione di un’operazione di input/output o altro)
pronto, quando è potenzialmente in condizione di utilizzare il processore che è occupato da un altro processo
Gestione del processore e dei processi
I/O terminato o risorsa disponibile
in_esecuzione
pronto in_attesacreazione
terminazione
richiesta I/O o risorsascambio
esecuzione
Gestione della memoria principale
Nel caso multi-tasking la memoria deve essere condivisa da piu’ programmi
la memoria viene suddivisa in blocchi, ad ogni programma viene assegnato un certo numero di blocchi (non necessariamente contigui) di memoria
Meccanismi di partizione: – paginazione: blocchi di dimensione costante: – segmentazione: blocchi di dimensione
variabile
Indirizzi fisici e indirizzi logici
indirizzi logici: gli indirizzi presenti nei programmi indirizzi fisici: gli indirizzi RAM assegnati al
programma quando viene caricato dal disco Per poter essere caricato a blocchi il programma
viene suddiviso in blocchi logici e il SO si occupa di assegnare a ciascun blocco logico un blocco fisico trasformando gli indirizzi logici a quelli fisici
Corrispondenza tra blocchi logici e fisici
RAM
P1/2
P2/1
P2/2
P1/3
P3/1
P3/2P1/1
P1/2
P1/3
P3/1
P2/1
P2/2
P2/3P2/3
P3/2
P1/1
Memoria virtuale Come è possibile eseguire uno o più progammi
contemporaneamente che richiedono piu’ memoria di quanta sia disponibile?
Per eseguire un programma non è necessario caricarlo completamente in memoria
È sufficiente caricare in memoria principale solo quelle parti del programma e dei dati che servono durante una certa fase dell’esecuzione; le altre parti possono essere tenute su un supporto di memoria secondaria
Per gestire la memoria in modo virtuale, si usa: La memoria principale in cui tenere solo i
programmi, o i pezzi di programmi, che servono in un certo istante.
Un supporto di memoria secondaria in cui mantenere tutte le informazioni relative ai processi (programma e dati). Si utilizzano i dischi rigidi perché sono abbstanza veloci e hanno accesso diretto)
Le pagine vengono caricate nella RAM indipendentemente, quando sono richieste per l’esecuzione (on demand)
Il SO stabilisce quali pagine scaricare o eliminare dalla RAM per far posto a nuove pagine di processi in esecuzione. Se le pagine sono state modificate devono essere ricopiate sul disco
Il processo di scambiare pagine tra memoria e disco si chiama swapping
Lo swapping è costoso in termini di tempo e rallenta l’esecuzione di un programma
Demand paging
Esempio: la RAM non è sufficiente a contenere P1, P2 e P3
RAM
P1/2
P2/1
P2/2
P1/3
P3/1
P3/2P1/1
P1/2
P1/3
P3/1
P2/1
P2/2
P2/3
Visione astratta della memoria: un programma non deve conoscere la configurazione e le dimensioni della memoria reale e può essere eseguito su computer con dotazioni di memoria differenti