Il sistema operativo Sistema operativo Insieme di programmi per la gestione del funzionamento del computer. Interfaccia tra utente e hardware, ambiente per l’esecuzione dei programmi. Un sistema operativo viene caricato nella memoria RAM all’accensione della macchina (programma di boot) e rimane attivo fino allo spegnimento. Sistema operativo Il sistema operativo: • è un insieme di moduli software; • controlla le risorse hardware del sistema; • mette a disposizione dell’utente una macchina virtuale, in grado di eseguire comandi dati dall’utente, utilizzando la macchina “reale”. Sistema operativo Il sistema operativo: presenta all’utente una macchina virtuale che nasconde tutti i dettagli hardware che sarebbero troppo complicati da gestire per la maggior parte degli utenti. Sistema operativo Le richieste dell'utente al SO, fatte digitando dei comandi nelle interfacce a carattere o selezionando oggetti con il mouse nelle interfacce grafiche (Graphic User Interface), sono intercettate dall'interprete dei comandi (shell), il quale attiva i moduli programma che agiscono nei componenti del nucleo (kernel). Questi attivano i dispositivi hardware quali il processore, la memoria, i controller di I/O, ecc., che svolgono la richiesta dell'utente. Sistema operativo E’ uno strato software che opera direttamente sull’hardware Isola gli utenti dai dettagli dell’hardware E’ organizzato a strati: Programmi utente Interprete comandi attivazione programmi d’utente o di sistema File system controllo e gestione degli accessi a file Gestione delle periferiche gestione di ingresso/uscita da periferica Gestione della memoria • Architettura a buccia di cipolla • Ogni strato costituisce una macchina virtuale allocazione e gestione della memoria Gestione dei processi (nucleo) gestione dei processi e delle interruzioni Macchina fisica Kernel Funzioni del sistema operativo Il gestore della memoria ha la funzione di allocare la memoria e partizionarla tra i vari programmi Il gestore dei processi è responsabile dell’esecuzione dei programmi da parte dell’unità di elaborazione Il gestore dell’input/output (drivers) sono responsabili delle operazioni di ingresso/uscita che coinvolgono le periferiche Il file system è responsabile della gestione dei file in memoria di massa L’interprete dei comandi consente all’utente di attivare i programmi da una interfaccia grafica o testuale (GUI o Shell) Cos’è un processo Un processo è un’attività, controllata da un programma E’ un entità dinamica che rappresenta l’esecuzione del programma In un sistema multitasking possono essere avviati molti processi contemporaneamente Per l’avanzamento di un processo è necessaria l’assegnazione di un processore Dato che i processi si alternano nell’esecuzione,possiamo dire che generalmente l’avanzamento di un processo avviene in maniera discontinua Gestione dei processi Caratteristiche • Interazione diretta con l’Hardware • Esecuzione dei programmi come processi Lo strato del gestore dei processi offre agli strati superiori una macchina virtuale in cui ciascun programma opera come se avesse a disposizione un’unità di elaborazione dedicata Gestione dei processi I processi hanno in memoria sempre aree dati disgiunte (sebbene possano, a richiesta, condividere parte dei dati oppure scambiarsi dei messaggi tra di loro). Memoria centrale Memoria centrale Altri processi Codice eseguibile del programma Q Codice eseguibile del programma P Processo P1 Dati sui cui agisce il programma P Processo Q1 Processo P2 Processo P1 Dati sui cui agisce il programma Q Codice eseguibile del programma P Dati sui cui agisce il programma P Codice eseguibile del programma P Dati sui cui agisce il programma P Obiettivi Massimizzare l’uso della CPU. Massimizzare il numero di processi eseguiti nell’unità di tempo. Minimizzare il tempo di risposta. I Processi Contesto all’istante t : • istruzione da eseguire (indirizzo in RAM: PC, IR) • contenuto dei registri dati del processore • il processo rappresenta lo stato di avanzamento del programma istante per istante. Processi Concorrenti Nei sistemi attuali sono in esecuzione più processi contemporaneamente. (multitasking) La CPU esegue comunque una sola istruzione per volta. Il S.O. gestisce l’avvicendamento dei processi in esecuzione: assegna la CPU ai vari processi istante dopo istante. Scheduler: parte del S.O. che si occupa della gestione dei processi e dei processori Esempio di S.O. Multi-tasking : time-sharing Si usa la tecnica dei quanti di tempo • es: 3 programmi attivi Prog1, Prog2, Prog3 • vengono mandati in esecuzione ciclicamente Eseguo Prog1 Quanto 20-100 ms Eseguo Prog2 Eseguo Prog3 Eseguo Prog1 Interruzione : il SO riprende il controllo e decide chi eseguire nel quanto successivo Clock ‘orologio interno’ Gli stati di un processo I processi appena creati si mettono in stato di pronto Il S.O. decide quale processo pronto eseguire (pronto esecuzione) Il S.O. assegna il processore ad un processo per un intervallo (quanto) di tempo L’assegnazione di un processo al processore tiene conto della coda dei processi pronti e della priorita’ dei processi Gli stati di un processo Nuovo: il processo viene creato In esecuzione: assegnato al processore ed eseguito da esso Pronto: può andare in esecuzione, se il gestore dei processi lo decide In attesa: attende il verificarsi di un evento esterno per andare in stato di pronto Terminato: il processo ha terminato l’esecuzione, ma non è stato ancora fisicamente cancellato dalla memoria centrale. Nuovo Inizio esecuzione Processo pronto Termine processo: -Fine quanto di tempo -Interruzione esterna Primo processo pronto Processo in esecuzione Evento esterno atteso Interruzione interna - Fine esecuzione - Abort per errore Processo in attesa Il ciclo di vita dei processi 1 Ogni nuovo processo entra nel sistema accedendo alla ready queue (new ready), e va in esecuzione (ready running) quando viene selezionato dallo scheduler Un processo attivo può essere arrestato per un interrupt esterno (running ready) Un processo può anche essere sospeso dal nucleo (running ready), dopo un dato intervallo temporale, per garantire a tutti i processi un uso paritario della CPU: lo scheduler sceglie quale fra i processi pronti mandare in esecuzione Il ciclo di vita dei processi 2 Anche un’interruzione interna può causare l’arresto di un processo (running waiting) Viceversa, il verificarsi dell’evento atteso da un processo fa sì che esso passi dallo stato di attesa allo stato di pronto (waiting ready) Infine, un processo in esecuzione può terminare regolarmente, o essere interrotto e terminato forzatamente dal nucleo (aborted ) per il verificarsi di un errore Lo scheduler seleziona un nuovo processo dalla coda dei processi ready Cambiamento di contesto Contesto: insieme delle informazioni che caratterizzano lo stato di un processo Se il processo è fisicamente in esecuzione parte del contesto si trova nei registri della CPU (Program Counter, registri utente) Se il processo non è in esecuzione il contesto è in memoria. Cambiamento di contesto (context switch): operazione che avviene quando il sistema operativo decide di mandare in esecuzione un altro processo Il sistema operativo deve salvare tutte le informazioni necessarie a ripristinare esattamente lo stato del processo in esecuzione nel futuro. Context Switch della CPU da processo a processo Dispatcher Divide il tempo in quanti (< 50 millisec.) Da’ un quanto ad ogni processo, uno alla volta Alla fine del quanto, segnale che passa la CPU ad un altro processo pronto Prima di passare al prossimo processo, la CPU esegue il programma di gestione delle interruzioni • Aggiorna la tabella dei processi • Salva lo stato (registri, celle di M, ...) • Sceglie un altro processo dalla tabella • …….. Transizioni tra stati di un processo In esecuzione richiesta di I/O schedulazione pronti fine tempo oppure evento esterno In attesa conclusione I/O Coda ordinata in attesa della CPU Insieme in attesa di eventi Gestione informazione sui processi Il S.O. mantiene l’informazione relativa a tutti i processi attivi (non terminati) nella tabella dei processi (PCB, Process Control Block) . Per ogni processo la PCB contiene un certo numero di informazioni. La tabella dei processi è in ogni istante caricata interamente in RAM. La tabella dei processi (PCB) Per ogni processo attivo: PID: Process Identifier Stato corrente (Execute, Ready, Blocked) Program Counter Contenuto dei registri CPU Priorità Stato della memoria Processi I/O e CPU bound I processi utente si possono sospendere in attesa che un dispositivo esterno abbia completato un’operazione di I/O, rispetto alla frequenza con la quale invocano operazioni di l’I/O si possono definire due tipologie di processi: • I/O bound: si sospendono frequentemente eseguendo brevi fasi di elaborazione (burst di CPU) tra un’operazione di I/O e l’altra. I processi interattivi sono tipicamente I/O bound. • CPU bound: si sospendono raramente ed eseguono lunghe fasi (burst di CPU) di elaborazione. I processi non interattivi sono spesso CPU bound. La velocizzazione delle CPU tende a rendere più numerosi i casi di processi I/O bound, in quanto la velocità dei dispositivi non aumenta allo stesso ritmo. Processi I/O e CPU bound CPU bound I/O bound Scheduling dei processi È l’attività mediante la quale il sistema operativo effettua delle scelte per ottimizzare l’esecuzione dei processi, riguardo : • al caricamento in memoria centrale • all’assegnazione del processore ai processi Tre livelli di scheduling: • Scheduling a breve termine o Sceglie tra i processi pronti quello a cui assegnare il processore – non preemptive scheduling – preemptive scheduling (preemption = prelazione) • Scheduling a medio termine (Swapping) o trasferimento temporaneo in memoria secondaria di processi - quando la disponibilità di memoria principale è inferiore alla necessità dei processi esistenti (= esclusione/reinserimento nell’insieme dei processi schedulabili in coda) • Scheduling a lungo termine o Sceglie tra i lavori in arrivo quelli da ammettere per la prima volta tra i processi schedulabili - controlla il grado di multiprogrammazione per ottimizzarlo Scheduling nei sistemi Batch Tre livelli di scheduling Criteri di scheduling Lo scheduler ha come obiettivo quello di far eseguire ciascun processo utente entro un tempo approssimativamente proporzionale alla sua complessità, effettuando una ripartizione equa della risorsa CPU max min Utilizzo di CPU — la CPU deve essere più attiva possibile Throughput — numero di processi completati nell’unità di tempo Tempo di turnaround — tempo di esecuzione di un processo Tempo di attesa — tempo di attesa del processo nella ready queue Tempo di risposta — tempo che intercorre tra la sottomissione di una richiesta e la prima risposta prodotta Obiettivi dello Scheduling Obiettivi principali degli algoritmi di scheduling: Fairness (Equità) - processi della stesso tipo devono avere trattamenti simili ==> In particolare: evitare l’attesa indefinita Balance (Bilanciamento) - tutte le parti del sistema (CPU, dispositivi …) devono essere utilizate al massimo Throughput - massimizzare il numero di job completati in un intervallo di tempo Turnaround time - minimizzare il tempo di permanenza di un job nel sistema Tempo di risposta - minimizzare il tempo di riposta agli eventi Proporzionalità - assicurare un tempo di risposta proporzionale alla complessità dell’azione Politiche di Scheduling della CPU Roundrobin : la politica di scheduling più semplice, che consiste nel garantire la rotazione nell’esecuzione dei processi Lo scheduler assegna la CPU ad un processo per un quanto di tempo Quando il quanto di tempo termina, il processo in esecuzione viene interrotto e ritorna nella ready queue Per realizzare l’alternanza fra processi, lo scheduler gestisce la ready queue in modo tale da assegnare il processore al primo processo in coda che, quando esaurisce il suo quanto, viene posto alla fine della coda (FIFO) Alla fine della coda si inseriscono anche i processi che passano dallo stato di attesa allo stato di pronto Politica Round Robin Primo Primo Coda Pronti B C D In Esecuzione A A passa in esecuzione E Coda Pronti C D E A In Esecuzione B A esaurisce il quanto di tempo Politica Round Robin Esaurimento del quanto di tempo segnalato dal timer del processore - L’interruzione del timer provoca l’attivazione dello scheduler - Al termine del suo intervento, lo scheduler carica il timer con un nuovo quanto di tempo Lo scheduler interviene anche quando il processo in esecuzione si sospende prima della scadenza del quanto di tempo - lo scheduler riassegna il processore e carica il timer con un nuovo quanto di tempo Come fissare il quanto di tempo - deve essere abbastanza lungo da ammortizzare il costo di un context switch deve - essere abbastanza breve da permettere una risposta veloce agli utenti interattivi - in sistemi reali tipicamente 20-120 ms RR non favorisce i processi I/O bound Scheduling con priorità Ogni processo ha una priorità Ogni volta va in esecuzione il processo a priorità più elevata • Criteri di assegnazione della priorità ?? >> Per esempio: politica Shortest Job First (SJF) Punti chiave •Priorità statica ==> Possibilità di attesa indefinita per i processi a priorità più bassa •Priorità dinamica ==> strategia di assegnazione della priorità ? per esempio: priorità maggiore ai processi I/O bound Scheduling con priorità Molte strategie per il calcolo dinamico della priorità: • Priorità crescente nel tempo per i processi che rimangono in stato di pronto. Obiettivo: impedire attesa indefinita • Incremento di priorità quando i processi vengono riattivati. Obiettivo: tempo di risposta • Priorità legata alla percentuale f del quanto di tempo che è stato consumato l’ultima volta che il processo è andato in esecuzione (es. proporzionale a 1/ f ). Obiettivo: favorire processi I/O bound Scheduling con Politica SJF Scheduling con politica Shortest Job First (SJF) ==> privilegia il job più corto Ipotesi: • l’insieme dei job da schedulare è noto all’inizio • si conosce il tempo di esecuzione T di ogni job Politica: • i job sono schedulati in ordine di T crescente • non c’è prerilascio Proprietà: SJF minimizza il tempo medio di turnaround Gestione della Memoria Gestione della memoria RAM: volatile, costosa e quindi di dimensione limitata contiene i Programmi + Dati (Modello di Von Neumann) Processi della CPU in esecuzione in un certo intervallo di tempo utilizzando i registri Programma + Dati contenuti nella RAM Il sistema operativo deve gestire lo spostamento di Progr. + Dati tra RAM e CPU . 39 Gerarchia di memoria Si cerca di raggiungere un compromesso sfruttando la gerarchia di memoria Registri Cache Memoria Principale Dischi Magnetici Dischi Ottici Nastri Magnetici 40 Gerarchia di memoria Dispositivo di memoria Velocità di accesso Capacità Costo Volatilità Registri nanosecondi Kbyte Molto alto alta Cache decine di ns Mbyte €100/Mby te alta Memoria principale 50-70 ns centinaia Mbyte €1/Mbyte alta Dischi magnetici 5-15 ms decine Gbyte €10/Gbyt e bassa Dischi ottici 100 ms centinaia Mbyte €5/Gbyte bassa Nastri Fino a 1 s Fino a 1 Tbyte €1/Gbyte bassa 41 Gestore della memoria La parte del SO che gestisce la memoria è il Gestore di Memoria i cui compiti sono: • tenere traccia di quali parti di memoria sono in uso e quali non lo sono • allocare la memoria ai processi che la necessitano e deallocarla • gestire lo swapping tra la memoria principale e il disco quando la memoria principale non è sufficientemente grande per mantenere tutti i processi • in definitiva cercare di sfruttare al meglio la gerarchia di memoria 42 Gestione della memoria centrale La memoria centrale… …è un “array” di byte indirizzabili singolarmente …è un deposito di dati facilmente accessibile e condiviso tra la CPU ed i dispositivi di I/O Il SO è responsabile delle seguenti attività riguardanti la gestione della memoria principale: Tenere traccia di quali parti della memoria sono usate e da chi Decidere quali processi caricare quando diventa disponibile spazio in memoria Allocare e deallocare lo spazio di memoria quando necessario 43 Gestione della memoria centrale Premessa indispensabile per la gestione concorrente di molti processi è la presenza di molti programmi in memoria centrale (multiprogrammazione) La memoria centrale assume un ruolo simile all’unità di elaborazione: è una risorsa unica, spesso scarsa, da suddividere fra i vari processi/programmi Per allocare i programmi in memoria centrale è necessario rilocarli: Rilocare significa trasformare gli indirizzi logici, presenti nei programmi, in indirizzi fisici, corrispondenti alle locazioni di memoria dove il codice eseguibile viene effettivamente caricato D’altra parte, l’uso di indirizzi logici nei programmi è essenziale per consentirne il caricamento in differenti porzioni di memoria Problema: come allocare lo spazio in maniera ottimale 44 Allocazione a partizioni multiple Memoria 0000x Programma A Memoria 0000x Programma A Programma D Programma B Programma E Programma C Programma C 45 Istante T1 Istante T2 Allocazione a partizioni multiple Memoria 0000x Programma A Programma D Programma F Programma E PROBLEMA !!!! FRAMMENTAZION E Programma C 46 Paginazione Un importante meccanismo di “suddivisione” della memoria centrale, e delle entità in essa memorizzate, è quello della paginazione: La memoria centrale è considerata dal gestore della memoria come partizionata in pagine, ciascuna delle quali è un’area di memoria contigua, di dimensione prefissata Anche i programmi vengono partizionati in pagine ed allocati in un numero intero di pagine, non necessariamente contigue Tabella di mappa di pagina 47 Tabella di mappa di pagina Compito della Tabella di mappa di pagina è: - mettere in relazione le pagine di un programma e i blocchi di memoria - consentire al Sistema Operativo di sapere quali pagine sono realmente presenti in memoria e in quali blocchi sono memorizzate (paginazione dinamica) - generare un’interruzione quando un lavoro vuole accedere ad un indirizzo contenuto in una pagina non presente in memoria e quindi richiedere al Sistema Operativo di caricarla dal disco in memoria. 1) Se vi sono blocchi liberi, questa operazione consisterà nell'aggiornamento della tabella di mappa e nel caricamento effettivo nel blocco prescelto. 2) Se invece non vi sono blocchi disponibili, occorrerà scegliere tra le pagine presenti in memoria quale riportare sul disco, liberando così il relativo blocco di memoria. 48 Soluzione: Paginazione Memoria 0000x Programma A Memoria 0000x Programma A Programma A Programma A Programma A Programma A Programma B Programma E Programma B Programma F Programma D Programma D Programma F 49 Segmentazione Segmento: parte di un programma che svolge una determinata funzione logica. (funzioni, array, Il ecc) gestore della memoria può utilizzare il partizionamento logico del programma per caricare segmenti di lunghezza variabile in maniera indipendente Segmenti logici 1 4 1 2 3 4 2 3 Spazio utente (Programma) Spazio fisico di memoria Segmenti fisici NB: Mentre le pagine hanno lunghezza fissa, i segmenti, essendo logicamente suddivisi, hanno50 lunghezza variabile La Segmentazione Definiamo segmento un insieme di istruzioni considerate come una unità logica ad esempio una routine, un array, un'area dati ecc. Uno spazio degli indirizzi di un programma si può quindi pensare composto da diversi segmenti di dimensioni variabili, ciascuno dei quali viene caricato in memoria all'occorrenza e collegato al resto del programma in modo dinamico (paginazione dinamica) ed utilizzato per l'esecuzione. 51 Paginazione e Segmentazione • Paginazione – la divisione in pagine eseguita dal S.O. – le pagine hanno dimensione fissa – le pagine possono contenere informazioni disomogenee (ad es. sia codice sia dati) – una pagina ha un indirizzo di memoria – dimensione tipica della pagina: 4 KB 52 Segmentazione e Paginazione Segmentazione – la divisione in segmenti spetta al programmatore. – i segmenti hanno dimensione variabile – un segmento contiene informazioni omogenee per tipo di accesso e permessi di condivisione (insieme di istruzioni) – un segmento ha un nome. – dimensione tipica di un segmento: 64KB - 1MB 53 Memoria Virtuale (swap) Segmentazione e paginazione non sono mutuamente esclusive: in molti SO vengono applicate contemporaneamente In entrambi i casi, il gestore della memoria offre al programma applicativo la visione di una memoria virtuale, che può essere maggiore di quella fisica Si possono gestire programmi caricandone effettivamente in memoria solo le pagine (o i segmenti) relative al codice attualmente in esecuzione Le pagine (o i segmenti) che non sono al momento caricate in memoria rimangono disponibili sulla memoria di massa, all’interno di opportuni file 54 La memoria virtuale Memoria 0000x Programma A-1 Programma B-1 Programma D Swap Programma A-2 Programma A-3 Programma B-2 55 La memoria virtuale Memoria 0000x Programma A-2 Programma B-1 Programma D Swap Programma A-1 Programma A-3 Programma B-2 56 Memoria fisica e memoria virtuale Decimale Mem. virtuale o logica Mem. fisica 0 1 0 2 1 3 2 4 …... 5 …... 128 Mega 4 Giga Il numero di indirizzi virtuali (o logici) è maggiore 57 del numero di indirizzi fisici !!! Indirizzi logici e fisici Se numero ind. logici = numero ind. fisici abbiamo una corrispondenza uno a uno Mem. virtuale Mem. fisica 148 148 …... …... 58 Indirizzi logici e fisici - Poiché nella memoria virtuale: num. indirizzi logici > num. indirizzi fisici allora più indirizzi logici vengono tradotti in un unico indirizzo fisico Mem. virtuale 56 Mem. fisica 132 148 300 …... …... 59 Indirizzi logici e fisici Mem. virtuale 56 Mem. fisica 132 148 300 ... Istante T1 ... Mem. virtuale 56 Mem. fisica 132 148 300 Istante T2 ... ... N.B. Le celle con ind. logici tradotti in un unico ind. fisico non possono essere usate contemporaneamente. 60 Traduzione degli indirizzi La traduzione degli indirizzi logici in indirizzi fisici è effettuata dalla MMU (Memory Management Unit), componente HW nella CPU. CPU Ind. logici RAM MMU Ind. fisici Address BUS Data BUS Control BUS 61 File System – il gestore dei file Un file è un insieme di dati omogenei fra loro e raggruppati ai fini di archiviazione, di successiva elaborazione o di esecuzione. Possono contenere dati (file dati), programmi in linguaggio macchina (file eseguibili) o sequenze di comandi del sistema operativo (script o file batch). Un sistema operativo fornisce dei formati standard con cui organizzare i dati nella memoria di massa e i comandi per manipolare i file (file system). Ogni file è caratterizzato da un nome e da una estensione, che serve ad identificarne il tipo. Es. i file eseguibili sotto MSDOS/Windows hanno estensione .EXE, quindi il file prova.exe è un file che contiene codice direttamente eseguibile dalla CPU. File System – il gestore dei file L'oggetto elementare su cui opera il file system è il FILE, ossia una raccolta di dati registrati su memoria di massa (il file è visto dal SO come una sequenza di byte) Tipi di file: • testo (ASCII): una sequenza di caratteri, ad esempio un programma sorgente (es. in linguaggio C) o un editor di testo semplice • binari: una sequenza di byte • eseguibili (programmi) e non eseguibili (es. immagini, documenti creati con word processor) File System – il gestore dei file Sul disco rigido i file sono organizzati in modo gerarchico e possono essere inseriti in opportuni “contenitori” (cartelle o directory: sono anch’essi file! Una directory contiene una lista dei nomi e attributi dei file e directory al suo interno). Il disco può essere considerato come un archivio che contiene varie cartelle. Ogni cartella contiene documenti (file) o altre cartelle, che a loro volta contengono file o cartelle, realizzando una struttura ad albero. Ogni file è quindi identificato da un percorso, che rappresenta la sequenza delle cartelle che bisogna aprire per raggiungerlo. File System – il gestore dei file Il percorso di un file individua le directory che devono essere percorse per raggiungere quella che contiene il file. Il percorso e il nome del file individuano l’oggetto e ne specificano la collocazione nella struttura gerarchica: c:/Didat/esami/iscrmar.doc File System – il gestore dei file Funzioni principali: • • • • • • Creazione di file Copiatura di file Spostamento (da una cartella ad un’altra) di file Ridenominazione di file Cancellazione di file Strutturazione dei dischi (e dei nastri) come insiemi di file. • ... Per ognuna di queste operazioni esiste un opportuno comando (interfaccia utente alfanumerica) o una azione corrispondente con mouse e tastiera (GUI). Gestione delle periferiche Funzioni principali: • Indirizzamento dei segnali da e verso le periferiche • Sincronizzazione delle periferiche Gestione del sistema di Ingresso/Uscita • Sistema di tamponamento dei flussi di dati (buffercaching). • Interfaccia generale per i programmi di controllo (driver) delle periferiche (device). • Collezione di programmi di controllo (driver) specifici per le varie periferiche (device) collegabili al calcolatore. Driver - Gestione delle periferiche I driver sono meccanismi software cui è affidato il compito di comunicare dati da e verso le periferiche Garantiscono ai programmi che li usano una visione di alto livello • E’ possibile leggere o scrivere tramite primitive indipendenti dalla struttura hardware delle periferiche Si distingue fra: • Driver fisici (hardware). Vengono attivati direttamente dal gestore delle interruzioni • Driver logici (software). Fanno parte del sistema operativo e forniscono una gerarchia di operazioni, con un’organizzazione a strati Fine Sincronizzazione dei processi A volte, i processi devono sincronizzarsi, ovvero coordinare le loro attività Il coordinamento sequenziale: un processo termina invocando l’attivazione di un altro processo La competizione: due processi vogliono accedere simultaneamente a una medesima risorsa (risorsa critica) Processi CPU bound (P1) e I/O bound (P2) P1 Lungo burst di CPU Attesa completamento I/O Corto burst di CPU P2 tempo In esecuzione In attesa Process Control Block (PCB) Per descrivere gli stati del processo e per gestire le commutazioni di contesto subite dal processo, al processo va associata un’opportuna struttura dati, chiamata area dati di nucleo (process control block- PCB). L’area dati di nucleo del processo è creata e gestita direttamente dal sistema operativo; non è direttamente visibile da parte del processo. puntatore stato del processo numero del processo (process id, o PID) contatore di programma contenuto dei registri del processore limiti di memoria assegnata al processo elenco dei file aperti (descrittori di file) altro Parametri dell’area dati di nucleo (PCB) Stato del processo: nuovo, pronto, attivo, sospeso, terminato. Contatore di programma: l’indirizzo della prima istruzione da eseguire, quando il processo entra in stato attivo. Numero del processo, o PID: identificatore univoco del processo. Registri del processore: tutti i registri (general e special purpose) del processore, da ripristinare nel processore quando il processo entra in stato attivo. Informazioni di scheduling del processore: priorità del processo, puntatori alle code di scheduling, parametri di scheduling, ecc. Informazioni di gestione della memoria: registri base e limite dello spazio di memoria assegnato al processo, tabelle delle pagine o dei segmenti di memoria di proprietà del processo, ecc. Informazioni contabili: tempo di processore e tempo reale di utilizzo del processore, limiti di tempo, ecc. Informazioni di I/O: elenco delle periferiche assegnate al processo, elenco dei descrittori di file aperti da parte del processo, ecc. Classificazione dei SO In base alla modalita’ di gestione dei programmi: • Monoprogrammazione (esegue un solo programma alla volta) • Multiprogrammazione (esegue piu’ programmi apparentemente conteporaneamente, in realta’ in timesharing, suddividendo il tempo di esecuzione in intervalli molto piccoli e assegnando a turno le risorse ai diversi programmi) In base al tipo di accesso fornito agli utenti: • Monoutente (un solo utente puo’ usare la macchina) • Multiutente (piu’ utenti possono contemporaneamente interagire con la stessa macchina) Classificazione dei SO I concetti di mono e multi-programmazione sono indipendenti sa quelli di SO mono e multi-utente I SO attuali operano tutti in multiprogrammazione Windows nasce come sistema monoutente, anche se le versioni evolute (NT, 2000, XP) hanno alcune funzioni che possono essere utilizzate in modo concorrente da piu’ utenti contemporaneamente UNIX e’ un sistema multiutente che opera in multiprogrammazione Classificazione dei SO In base al tipo di interfaccia utilizzato: • interfaccia testuale (MS-DOS, UNIX, Linux…) i comandi vengono inseriti come stringhe di caratteri e impartiti tramite la tastiera • interfaccia grafica - Graphic User Interface (GUI) i comandi e gli oggetti vengono rappresentati in modo grafico e possono essere impartiti, eseguiti o manipolati attraverso l’uso congiunto di mouse e tastiera Sistema operativo in time sharing Permette la condivisione della CPU tra più processi Ogni processo in esecuzione ha a disposizione un quanto di tempo di utilizzo della CPU, al termine del quale viene sospeso per lasciare il posto ad un altro processo in attesa di esecuzione.