sistemi operativi - home page luca orrù
Transcript
sistemi operativi - home page luca orrù
CENTRO MULTIMEDIALE MONTIFERRU Concetti introduttivi 1. Quali sono le funzioni fondamentali di un sistema operativo? Il Sistema Operativo è un componente software di un sistema di elaborazione. Un sistema di elaborazione può essere rappresentato come un insieme di tre componenti organizzati in tre livelli: Livello hardware: costituito dalle risorse fisiche come cpu-memoria principalememoria di massa-stampante-mouse-modem-tastiera-video; Livello di sistema operativo; Livello dei programmi di utente: sono i programmi usati direttamente dagli utenti come word processor-web browser-compilatore -shell (interprete dei comandi); appartengono a questo livello anche il loader e il linker. Il sistema operativo agisce come intermediario tra i programmi applicativi e l’hardware del sistema di elaborazione. Il sistema operativo mette a disposizione dei programmi applicativi un’interfaccia costituita da una serie di funzioni (system call) con la quale gli stessi programmi applicativi possono richiedere le risorse hardware necessarie per la loro esecuzione. CENTRO MULTIMEDIALE MONTIFERRU Le principali funzioni di un sistema operativo sono: • Semplificare l’utilizzo e lo sviluppo dei programmi nascondendo i dettagli hardware. Il programmatore non deve preoccuparsi delle interazioni con l’hardware poiché questo compito è demandato al sistema operativo. Ogni qual volta è necessaria l’interazione con un dispositivo fisico, il programmatore richiede l’intervento del sistema operativo facendo ricorso alle funzioni apposite offerte dallo stesso sistema operativo (system call). Il sistema operativo s’interesserà di tradurre le system call in una sequenza di comandi per la gestione della risorsa richiesta. Il fatto che i programmi possano essere sviluppati indipendentemente dall’hardware ha come conseguenza positiva la portabilità dei programmi. • Gestire in maniera efficiente le risorse hardware (CPU, memoria, dispositivi di I/O): anche in un normale PC è possibile mandare in esecuzione contemporaneamente più programmi. Un utente potrebbe contemporaneamente navigare in Internet, tenere aperto un word processor, per copiare magari delle informazioni, e ascoltare musica. Essendo il sistema monoprocessore, il sistema operativo deve gestire l’accesso alla risorsa condivisa (CPU) in modo tale da far procedere a turno i tre programmi. Il sistema operativo deve quindi decidere a chi assegnare la CPU nel momento in cui ci sono più richieste contemporanee e quale politica usare nell’assegnazione della risorsa. Anche per la memoria vale lo stesso discorso: se a un certo punto un programma deve essere caricato in memoria per essere eseguito e non c’è spazio disponibile per allocarlo, allora il S.O deve decidere quale programma sostituire per far posto al nuovo programma. • Gestire le situazioni di errore e di malfunzionamento e garantire la protezione dei dati dei vari utenti: in un sistema multiutente è necessario che il sistema operativo garantisca la protezione dei dati dei vari utenti da accessi indesiderati. CENTRO MULTIMEDIALE MONTIFERRU 2. Si descriva la tecnica della multiprogrammazione Con questa tecnica più programmi vengono caricati contemporaneamente in memoria fisica. Una parte della memoria contiene il sistema operativo e poi vi sono altre partizioni dedicate ad ospitare più programmi applicativi. Naturalmente il numero dei programmi che possono essere contemporaneamente presenti in memoria principale dipende dalla dimensione della memoria. Il vantaggio principale della multiprogrammazione è l’aumento dell’efficienza nell’uso della CPU a differenza dei sistemi monoprogrammati. In un sistema monoprogrammato un solo programma, oltre al sistema operativo, è caricato in memoria e questo comporta un basso utilizzo della CPU (bassa efficienza.) Un programma viene mantenuto in memoria per tutto il tempo necessario alla sua esecuzione, per cui ogni volta che richiede un’operazione di I/O, la CPU rimane inattiva per tutto il tempo necessario al completamento dell’operazione di I/O. Se il programma è di tipo I/O bound, ovvero richiede molte operazioni di I/O e poca elaborazione, allora l’efficienza della CPU scende drasticamente. CENTRO MULTIMEDIALE MONTIFERRU Con la tecnica della multiprogrammazione, essendoci più programmi residenti in memoria, quando il programma che è in esecuzione richiede un’operazione di I/O, il sistema operativo sospende momentaneamente tale programma e lo sostituisce con un nuovo programma residente in memoria in modo tale che la CPU non rimanga inattiva. Naturalmente esistono ancora intervalli di tempo in cui la CPU non è utilizzata (tempo necessario per il cambio di contesto da un programma all’altro: overhead) ma l’efficienza è comunque molto maggiore rispetto al caso monoprogrammato. Si possono ottenere valori di efficienza anche superiori all’80%. La multiprogrammazione comporta un Sistema Operativo più complesso. Il sistema operativo deve ora garantire, oltre alla protezione dell’area del sistema operativo dall’area dei programmi, anche la protezione dell’ area di un programma dagli accessi non autorizzati degli altri programmi. Il sistema operativo deve scegliere i programmi da caricare in memoria in modo da massimizzare l’uso della CPU e delle altre risorse. Un criterio usato è quello di scegliere un mix di programmi con caratteristiche diverse (alcuni CPU bound che richiedono molti calcoli) e altri I/O bound (che richiedono pochi calcoli e molte operazioni di I/O). Il sistema operativo deve implementare poi opportuni algoritmi di scheduling sia per quanto riguarda la scelta di quale programma mandare in esecuzione, sia per quanto riguarda la scelta dei programmi da caricare in memoria principale dalla memoria di massa. 3. Si descrivano i sistemi time-sharing In un sistema time-sharing ci sono diversi programmi in memoria pronti per essere eseguiti cosi come in un sistema batch multiprogrammato. In un sistema multiprogrammato, se un programma va in esecuzione ed è di tipo CPU bound, allora questo utilizzerà la CPU per molto tempo, impedendo agli altri programmi di essere eseguiti. Un sistema time sharing risolve questo problema in quanto assegna a ciascun programma un quanto di tempo di CPU ( time slice) dell’ordine di alcune decine di msec, terminato il quale la CPU viene assegnata ad un nuovo programma. La scelta dei programmi da mandare in esecuzione avviene in modalità Round Robin ( a rotazione tutti vengono mandati in esecuzione). Un programma può andare nuovamente in esecuzione solo se tutti gli altri programmi hanno usato CENTRO MULTIMEDIALE MONTIFERRU il loro quanto di tempo. Se durante il quanto di tempo assegnato il programma richiede un’operazione di I/O allora il Sistema Operativo sospende la sua esecuzione anche se il suo time slice non è terminato e la CPU viene assegnata ad un nuovo processo. Lo stesso accade se durante il time slice il programma termina. Il Sistema Operativo provvede subito ad assegnare la CPU ad un altro programma. Questa tecnica presenta il vantaggio di assegnare la CPU ai vari programmi in maniera equa (non ci sarà mai un programma che monopolizza la CPU). Lo svantaggio è che l’efficienza nell’uso della CPU diminuisce in quanto ci sono i numerosi cambi di contesto tra i vari programmi. Ogni volta che, un programma termina il suo quanto di tempo, dovrà essere salvato il suo contesto (PC e registro di stato) e poi dovrà essere ripristinato quando gli verrà nuovamente assegnata la CPU. L’utilizzo della CPU nei cambi di contesto è overhead che porta quindi ad una diminuzione della efficienza (rapporto tra tempo necessario per eseguire i programmi e il tempo totale). 4. Qual è la differenza tra un sistema batch multiprogrammato e un sistema time sharing? La differenza principale riguarda la proprietà d’interattività degli utenti. Un sistema operativo time sharing consente l’interazione diretta con il sistema da parte di più utenti, quindi è un sistema interattivo e multiutente. Un sistema batch multiprogrammato non consente l’interazione diretta dell’utente con il sistema. In un sistema time sharing l’utente opera all’interno di sessioni di lavoro. Ogni sessione di lavoro inizia specificando nome utente e password (login in). A questo punto l’utente inizia ad interagire con il sistema attraverso opportuni comandi (quelli relativi ai compiti richiesti) alla quale il sistema risponde attivando il programma che esegue il compito richiesto. Ogni volta che il sistema termina di eseguire il compito richiesto propone nuovamente all’utente il prompt dei comandi, in modo tale che l’utente possa digitare un nuovo comando. Se l’utente non ha più operazioni da far svolgere al sistema chiude la sessione di lavoro attraverso il logout. In un sistema batch multi programmato questo non era possibile. Un sistema operativo time sharing non consente alcuna discriminazione riguardo alla complessità dei programmi perché a tutti i programmi è dedicato lo stesso time slice. CENTRO MULTIMEDIALE MONTIFERRU Questo significa che un sistema time sharing privilegia i programmi semplici e danneggia quelli più complessi. In un sistema batch multiprogrammato questo non avviene. 5. Si descriva la tecnica di spooling Nei primi sistemi di elaborazione, i sistemi batch, l’efficienza nell’uso della CPU era molto bassa in quanto i dispositivi periferici (stampante e lettori di schede perforate) avevano una velocità notevolmente inferiore rispetto a quella della CPU. Per questo motivo quando la CPU attivava un trasferimento dati con questi dispositivi (lettura di una scheda o stampa dei risultati), rimaneva in attesa per lunghi periodi di tempo. L’introduzione dei dischi magnetici e della tecnica del DMA consentì l’utilizzo della tecnica di spooling che portò ad un miglioramento in termini di efficienza. Con questa tecnica venivano preventivamente caricati su disco un insieme di job. La CPU operava solo con il disco, ovvero prelevava da disco i dati necessari per eseguire il job e caricava su disco i risultati dell’elaborazione. Con la tecnica del DMA, durante l’esecuzione di un job era possibile contemporaneamente stampare i risultati di un job, precedentemente terminato, prelevandoli dal disco, e inserire su disco un nuovo job letto dal lettore di schede. Questa tecnica consenti anche di utilizzare delle politiche di scheduling riguardo ai jobs presenti su disco. Il sistema operativo, quando un programma (job) terminava, decideva quale programma, tra quelli presenti su disco, caricare in memoria principale per essere eseguito. Tra tutti i job presenti su disco veniva scelto, mediante una certa regola, quale job mandare in esecuzione (per esempio poteva essere scelto il programma con tempo di esecuzione più breve: politica SJF (Shortest Job First)). CENTRO MULTIMEDIALE MONTIFERRU 6. Un sistema a divisione di tempo (time sharing) non raggiunge un’elevata utilizzazione della CPU. Perché? Perché in questi sistemi c’è un overhead di tempo necessario alla CPU per salvare e ripristinare il contesto dei vari programmi che hanno terminato il loro quanto di tempo. L’overhead non si può eliminare. 7. Si descriva il concetto di overhead L’overhead è particolarmente rilevante, come già detto nella risposta alla domanda 5, nei sistemi di tipo time sharing, vale a dire nei sistemi in cui la CPU viene assegnata ai vari programmi per un certo quanto di tempo, in modalità Round Robin. Trascorso il quanto di tempo assegnato ad un programma, il Sistema Operativo sospende quel determinato programma ed assegna la CPU ad un altro programma , scelto tra quelli residenti in memoria principale e quindi pronti per essere eseguiti. Prima di assegnare la CPU ad un nuovo programma, il sistema operativo deve preoccuparsi di salvare il contesto del programma che ha visto scadere il suo quanto di tempo, ovvero deve salvare il contenuto del Program Counter (PC) e il contenuto del registro di stato (PSW: Program Status Word) che contiene i bit che codificano i risultati di una istruzione e altri bit . CENTRO MULTIMEDIALE MONTIFERRU Il Program Counter contiene l’indirizzo della successiva istruzione da eseguire, che è quella immediatamente successiva all’istruzione in cui il programma ha terminato il suo quanto di tempo e quindi deve essere ripristinato nel momento in cui il programma viene nuovamente scelto per continuare la sua esecuzione dal punto d’interruzione. Questo tempo, impiegato per il salvataggio del contesto e per il suo ripristino, non è lavoro utile (tempo per eseguire il programma) per la CPU, bensì è un overhead. Nella figura seguente è rappresentato il caso di due programmi che operano in modalità time sharing. Il primo programma ad andare in esecuzione è il programma 2 e poi passa in esecuzione il programma 1, ma solo dopo un intervallo di tempo necessario per salvare il contesto del programma 2 (parte in azzurro) 8. Si descrivano i sistemi in tempo reale In un sistema in tempo reale i programmi devono terminare la loro esecuzione entro un certo intervallo di tempo prefissato (deadline del programma). Il compito principale di un sistema operativo real time non è quello di massimizzare l’efficienza d’uso delle risorse come nei sistemi batch e neanche quello di minimizzare i tempi di risposta come nei sistemi time sharing, ma garantire che tutti i programmi vengano eseguiti entro il tempo CENTRO MULTIMEDIALE MONTIFERRU prefissato ovvero entro la propria deadline. Se il sistema operativo non fosse in grado di garantire ciò si potrebbe incorrere in problemi gravi. Si pensi ad un’auto che si muove su una catena di montaggio e il robot dedicato a saldare salda troppo presto o troppo tardi. Certamente l’auto verrà rovinata. I sistemi real time possono essere classificati in sistemi hard real-time e sistemi soft real time. Nei sistemi hard real-time il tempo di risposta ha dei vincoli stringenti (deve essere assolutamente rispettato) mentre nel caso di sistemi soft real-time i vincoli sono meno stringenti anche se naturalmente occorre che il sistema risponda entro un tempo ragionevole. In un sistema soft real- time non rispettare una deadline non compromette il funzionamento del sistema fisico che si sta controllando, ma semplicemente riduce la qualità di servizio. 9. Quali compromessi si adottano nei sistemi palmari? La categoria dei sistemi palmari comprende i pocket PC ma anche i cellulari. Le principali caratteristiche di questi dispositivi sono: a. ridotta dimensione e di conseguenza peso limitato (poche centinaia di grammi) b. costi contenuti. A cause delle loro ridotte dimensioni questi dispositivi hanno dei limiti in riferimento a CPU, memoria e schermo. CPU con prestazioni ridotte, memoria limitata e schermo piccolo. La velocità della CPU è solitamente una frazione di quella di una CPU per PC. La quantità di memoria è tipicamente compresa tra 512KB e 128MB. Lo schermo non supera solitamente i 6x9 cm. La CPU non può avere prestazioni elevate in quanto comporterebbe avere batterie più grosse, perché crescono i consumi, e di conseguenza non si potrebbe mantenere il peso ridotto del dispositivo. In alternativa ci sarebbe la necessità di ricaricarle più spesso. CENTRO MULTIMEDIALE MONTIFERRU La quantità di memoria è limitata in quanto la memoria è molto costosa e quindi una quantità di memoria superiore comporterebbe un notevole incremento dei costi. Il Sistema Operativo di questi dispositivi deve avere le seguenti caratteristiche: a. Garantire una alta efficienza nell’uso della memoria essendo questa di capacità ridotta. Quando la memoria non è in uso occorre subito restituirla al gestore della memoria in modo che possa essere riallocata. b. Il sistema operativo deve essere semplice ossia non deve richiedere prestazioni elevate al processore proprio perché il processore ha prestazioni limitate 10. Si descrivano le chiamate di sistema (system call) Le chiamate di sistema sono usate dai programmi applicativi per chiedere un servizio al sistema operativo. Ogni sistema operativo mette a disposizione dei programmi applicativi un insieme di system call che possono essere divise nelle seguenti categorie: a. System call per il controllo dei processi: creazione (fork), sospensione (wait), terminazione volontaria (exit), caricamento di un nuovo programma (exec). b. System call per la gestione dei file: creazione di un file (creat), lettura di un file (read), scrittura di un file (write), apertura di un file (open), chiusura di un file (close) c. System call per la gestione dei dispositivi di Input/Output: read e write d. System call per la gestione delle informazioni: sono chiamate di sistema per ottenere determinate informazioni (ora,data, spazio disponibile su disco, quantità di memoria disponibile, versione del sistema operativo, numero utenti collegati al sistema. e. System call per la gestione delle directory e del file system: creazione nuova directory (mkdir), cancellazione directory vuota (rmdir) etc. Le system call sono solitamente disponibili come routine in linguaggio C. Ad ogni system call è associata una funzione di libreria. Se per esempio in un programma C vi è la funzione printf() allora la libreria C intercetta la funzione e invoca la corrispondente chiamata di sistema che sarà la system call write(). CENTRO MULTIMEDIALE MONTIFERRU Il sistema operativo esegue la write e poi restituisce il controllo alla funzione di libreria che a sua volta ritorna il controllo al programma utente. L’esecuzione della write avviene naturalmente in modalità kernel. Alcune system call richiedono l’utilizzo di parametri che devono essere passati dalla corrispondente funzione di libreria. Nel caso di Unix per esempio la system call che permette di leggere un file necessita di tre parametri: nome del file da leggere, area di memoria dove trasferire i dati e numero di byte da leggere. In un programma C per eseguire la chiamata di sistema read occorre chiamare la corrispondente funzione di libreria che ha lo stesso nome della system call (read) specificando i tre parametri visti precedentemente: read (nome-file, buffer, numbyte) CENTRO MULTIMEDIALE MONTIFERRU Questa istruzione provoca il passaggio dei tre parametri alla funzione di libreria. La funzione di libreria carica i parametri in dei registri oppure in una zona di memoria il cui indirizzo è reso disponibile in un registro. Ora il sistema operativo preleva i parametri per eseguire la sequenza di codice che implementa la system call. Quando il S.O ha completato la system call passa i risultati alla funzione di libreria che a sua volta fornisce i risultati al programma chiamante. Nella figura è rappresentato il funzionamento della system call read. Quando il programma vuole eseguire la system call READ interviene la funzione di libreria read. Questa carica i parametri, indicati in figura con x, in un blocco di memoria il cui indirizzo iniziale è posto in un registro. Tutto ciò avviene in modalità utente. La funzione di libreria informa il sistema operativo con un segnale di interruzione (istruzione INT) (freccia 2). La INT permette di cambiare lo stato di esecuzione del processore che passa ora da modo utente a modo kernel (vedi domanda 11). CENTRO MULTIMEDIALE MONTIFERRU Ora il sistema operativo preleva i parametri dall’area di memoria specificata nel registro, esegue la system call e al termine (freccia 3) ripassa il controllo alla funzione di libreria (istruzione IRET) che penserà poi a passare i risultati della system call al programma utente. 11. Quali sono le modalità di funzionamento di un sistema di calcolo? Un sistema di calcolo può operare secondo due modalità di funzionamento: a. modo utente (user mode) b. modo kernel (kernel mode) Per distinguere le due modalità di funzionamento le CPU moderne dispongono nel registro PSW di un bit opportuno chiamato bit di modalità. Il valore del bit di modalità consente di stabilire se si sta eseguendo una istruzione relativa ad un programma di utente (bit di modalità =1) oppure una istruzione di sistema (bit di modalità =0). Tutti i programmi applicativi vengono eseguiti in modalità utente (bit modalità=1). Tutte le funzioni del sistema operativo vengono invece eseguite in modalità kernel (bit di modalità=0). Quando un programma applicativo richiede l’intervento del sistema operativo, lo fa attraverso una chiamata di sistema (system call). Il sistema, prima di poter eseguire la system call, deve passare dalla modalità utente alla modalità kernel (il bit di modalità viene modificato da 1 a 0). Viene ora eseguita la system call (routine di servizio) e al termine viene modificato nuovamente il bit di modalità che viene posto a 1 e passato nuovamente il controllo al programma di utente. La figura seguente riassume quanto detto. CENTRO MULTIMEDIALE MONTIFERRU In modalità utente non è possibile eseguire istruzioni privilegiate come può essere l’istruzione che modifica il bit di modalità nel PSW o le istruzioni che coinvolgono l’input/output. Quando un programma richiede una operazione di I/O viene eseguita una chiamata di sistema che porta il controllo al sistema operativo. Le istruzioni privilegiate sono tipicamente tutte quelle istruzioni macchina che possono causare danni allo stato del sistema. In modalità utente non è possibile accedere all’area di memoria del sistema operativo. Un errore di programmazione, che potrebbe causare danni al sistema operativo, viene subito segnalato dall’hardware che scatena un’eccezione e porta subito il sistema in modalità kernel, consentendo al sistema operativo di gestire tale eccezione. L’eccezione viene trattata come una normale interruzione. Le vecchie architetture Intel 8086 e 8088 sul quale girava il sistema operativo MSDOS erano prive del bit di modalità. Un qualunque programma scritto dall’utente in modo non corretto poteva accedere all’area di memoria del sistema operativo e quindi cancellare tutto o in parte il sistema operativo stesso.