Il Software: Obiettivi n Programmare direttamente la macchina hardware è molto difficile: n l’utente dovrebbe conoscere l’organizzazione fisica del computer e il suo linguaggio macchina; n un programma dipenderebbe strettamente dalla struttura hardware e ogni piccola differenza hardware comporterebbe una riscrittura del programma. n n n Macchine Virtuali Concetto di Macchina Virtuale n Questi obiettivi vengono raggiunti grazie alla definizione di macchine virtuali che vengono realizzate al di sopra della macchina hardware reale n Utente n HW n macchina virtuale Questo non è accettabile, vogliamo invece: astrarre dall’organizzazione fisica della macchina, in quanto vogliamo usare nello stesso modo, 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; infine vogliamo programmi applicativi per svolgere diversi compiti utili (videoscrittura, fogli di calcolo, database, editing di immagini, etc…) Ogni macchina reale ha un suo linguaggio macchina L0 le cui istruzioni sono direttamente eseguibili dal processore (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 Il software fornisce: Utente Interfaccia Macchina virtuale N - sistema di comandi LN Interprete dei comandi 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…) Macchina virtuale 1 - sistema di comandi L1 Interprete dei comandi Hardware - Linguaggio macchina L0 1 1. Esempio esecuzione di un comando virtuale supponiamo che l'utente voglia stampare un documento doc1 (un file). A livello fisico questa operazione è complessa e richiede operazioni di trasferimento dati ad esempio dal disco alla stampante (via memoria principale) La macchina virtuale potrebbe fornire all'utente un semplice comando di stampa del tipo: stampa doc1 2. Linguaggi di programmazione n n n 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 n n n 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) n 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 n Per ogni comando della macchina virtuale si dovranno però avere diversi programmi di traduzione, uno per ogni tipo di hardware 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)); getch(); } Esempio di Programma in linguaggio C che copia un file Compilazione #include <stdio.h> main(int argc, char* argv[]) {FILE *fsource; char p[80] = "Copia di "; char c; if (argc < 2) {printf("FILE SORGENTE NON SPECIFICATO\n"); exit(1);} fsource=fopen(argv[1],"rb"); fdest=fopen(strcat(p, argv[1]),"wb"); if (!fsource) {printf("ERRORE FILE NON ESISTENTE\n"); exit(1);} while((c=getc(fsource))!=EOF) putc(c,fdest); fclose(fsource); fclose(fdest); return 0;} n n n n Il programma è contenuto in un file copia.c (fatto.c) copia.c (fatto.c) viene compilato mediante un programma compilatore Il compilatore produce un programma eseguibile copia.exe (fatto.exe) Il programma eseguible può essere poi eseguito 2 Il Sistema Operativo Compiti del Sistema operativo Sistema Operativo: insieme di programmi che interagiscono e cooperano tra di loro per realizzare due obiettivi fondamentali: n gestire efficientemente il computer e le sue periferiche, cercando di sfruttare al massimo tutte le componenti hardware n creare un ambiente virtuale per facilitare l'interazione uomo-macchina n Configurazione e accensione macchina n Gestione del processore n Gestione della memoria principale n Gestione di informazione in memoria secondaria (File System) n Gestione delle periferiche n Interazione utente macchina: interfaccia e interprete comandi Protezione dei dati (sicurezza) n Esempio di esecuzione di un comando da parte del sistema operativo Eseguiamo da una finestra MS-DOS un comando come date: Esempio date BUFFER 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 MEMORIA CENTRALE listener Monitor Disco rigido file manager terminal driver disk driver date BUFFER Tastiera Ogni carattere dato in input dalla tastiera viene ricevuto dal terminal driver che lo invia al monitor per la visualizzazione Struttura del sistema operativo Esempio 05/04/05 BUFFER MEMORIA CENTRALE date listener Monitor file manager terminal driver disk driver BUFFER Disco rigido Nucleo (kernel) 148.608.043.200.104 timer Tastiera gestione memoria processore, risorse interfaccia comandi applicazioni/programmi di utilita’ Il programma date tramite il terminal driver visualizza sul monitor la data 3 Tipi di sistemi operativi n Esistono diversi tipi di sistemi operativi per diverse classi di computer n Distinzione fondamentale – sistemi mono-utente – sistemi multi-utente Il Sistema Operativo Sistemi mono-utente pensati per Personal Computer – IBM PC - Compatibili (DOS - Windows) – Macintosh n Due diversi tipi di interazione utente/computer: – interazione testuale (es. MS-DOS per PC-IBM) – interazione grafica (es. Macintosh, Windows,Linux) Avviamento del computer Sistemi operativi multi-utente: n UNIX (Workstation, PC: LINUX) – Utilizzato per computer collegati in rete – supporta varie interfacce grafiche (a finestre) n Windows NT,2000,XP – Utilizzato per computer collegati in rete Fase di bootstrap: n Verifica delle risorse hardware e inizializzazione dei programmi relativi di gestione n diagnostica n caricamento e mantenimento del sistema operativo Gestione del processore e dei processi BIOS (Basic Input-Output System) n n n 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 n 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 n Il ruolo del processore è quello di eseguire programmi n Si chiama processo un programma in esecuzione 4 Limite del mono-tasking Processore e processi n qualunque processo alterna fasi di esecuzione a fasi in cui è bloccato in attesa di qualche evento esterno n 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 n mentre il processo è bloccato in attesa di eventi esterni, il processore rimane inattivo, in uno stato chiamato idle, e risulta pertanto sotto-utilizzato La gestione del processore è in modo: mono-tasking: esegue un programma per volta (MS-DOS) n multi-tasking: esegue più programmi contemporaneamente (Windows varie versioni dal 95, Macintosh, UNIX) n Multi-tasking n 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) n n n n n 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 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 Un processo può trovarsi in tre diversi stati: n in esecuzione, processore; quando sta utilizzando il n in attesa (bloccato), quando è in attesa del verificarsi di un evento esterno (terminazione di un’operazione di input/output o altro) n pronto, quando è potenzialmente in condizione di utilizzare il processore che è occupato da un altro processo 5 Gestione della memoria principale Gestione del processore e dei processi n n terminazione in_esecuzione scambio esecuzione richiesta I/O o risorsa pronto creazione in_attesa I/O terminato o risorsa disponibile Indirizzi fisici e indirizzi logici n n n 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 in quelli fisici n 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 (pagine): – segmentazione: blocchi di dimensione variabile (segmenti) Corrispondenza tra blocchi logici e fisici RAM P1/2 P3/1 P2/1 P1/1 P2/2 P1/3 P1/2 P1/3 P3/2 P2/1 P3/1 P2/2 P2/3 P2/3 P3/2 P1/1 6