Materia:Sistemi operativi
Questa materia è incompleta
Tutti i contributi sono ben accetti perché sono state scritte poche (o nessuna) lezioni di questa materia.
Questa pagina contiene il testo delle lezioni legate alla materia generale, per una più agevole lettura necessita di essere divisa in lezioni.
Per una lista completa delle materie da suddividere in lezioni, consulta la relativa categoria.
|
SSD = ING-INF/05 |
||
|
Presentazione Secondo quanto descritto dalla tabella dei Livelli architetturali di un computer, il livello del Sistema Operativo é il terzo. Subito sopra questo livello troviamo l'ASSEMBLY ed il livello dei Liguaggi orientati alla risoluzione di problemi (la comune programmazione); subito sotto il Livello ISA della macchina (vedi Corso di Architetture).
Un sistema operativo è un insieme di programmi ed istruzioni che controllano le funzionalità della macchina fisica in modo tale da offrire una base ai programmi applicativi. Senza di esso i programmi applicativi non potrebbero trovare il modo di comunicare con l'hardware del pc, perché normalmente vengono scritti ad alto livello. I programmi applicativi accedono quindi alle risorse hardware mediante opportuni componenti del sistema operativo. Alcuni sistemi operativi offrono un'interfaccia visuale all'utente, in modo da facilitare l'uso del pc anche ai più distaccati da questo mondo. La gestione dell'hardware viene diviso in genere in 5 parti:
Un altro aspetto importante è quello della comunicazione. Il sistema operativo si occupa di "codificare" tutti i messaggi dei programmi applicativi e prepara le periferiche per l'invio dei dati. Allo stesso modo quando riceve dei dati questi vanno decodificati ed eventualmente inviati ai programmi applicativi che ne faranno uso. Questa funzionalità è importantissima quando si ha un sistema multi-tasking dato che spesso i vari processi devono comunicare tra loro scambiandosi messaggi o segnali di sincronizzazione e il compito del sistema operativo è anche gestire la concorrenza tra i vari processi ottimizzando anche l'uso delle risorse di elaborazione. La supervisioneI sistemi operativi si distinguono anche dal tipo di supervisione adottata. La supervisione è la parte del sistema operativo che consente o nega un'azione (normalmente sulle periferiche) allo stato utente. Livello servizi (Monolitica)Lo stato utente permette di accedere senza autorizzazione a poche risorse e nega l'accesso diretto alla memoria principale. La richiesta per accedere ad una qualche risorsa (ad esempio al gestore del processore) viene inviata al nucleo del sistema operativo (anche chiamato kernel) che svolge, tra le altre cose, anche la funzione di supervisore) attraverso una chiamata di sistema (system call). Il kernel decide se e quando mandare in esecuzione il processo in base ad una politica realizzata dall'algoritmo di scheduling ( e il modulo che applica l'algoritmo è detto scheduler). In caso di risposta affermativa il kernel mette il processo in esecuzione, altrimenti il processo viene inserito nella coda dei processi pronti. Livello macchina (Server)Il sistema operativo avvia i processi senza che questi vedano una parte di memoria comune e, per scambiarsi dati e segnali, i processi utilizzano una "rete di comunicaione virtuale". Tale sistema prende il nome di sistema a scambio di messaggi (e la "rete" è detta Inter Process Communication System). Il processo utente per effettuare un azione invia la richiesta allo specifico server (ad esempio per stampare una pagina invierà la richiesta al server di stampa) attraverso una send asincrona, sincronizzata o con sincronizzazione estesa (Remote Procedure Call) in base al protocollo di comunicazione stabilito fra processo cliente e servitore. Il server, ricevuto il messaggio, riesce a determinare se l'azione richiesta può essere eseguita, dato che conosce lo stato interno della risorsa protetta. Appena possibile esegue l'azione e al termine invia al processo utente l'ok per continuare l'esecuzione e l'eventuale risultato dell'operazione. Quale la migliore?
Processi e ThreadCome già spiegato nella gestione della memoria, ogni processo è indipendente dall'altro, sia come istruzioni sia come memoria. Se creando un programma si ha la necessità di eseguire due azioni contemporaneamente, cio è impossibile data la sequenzialità intrinseca nel concetto di processo. Quindi si dovrebbero creare due processi, ma avendo essi la memoria separata, essi dovrebbero continuamente scambiarsi dati, introducendo un grande overhead dovuto all'esecuzione delle system call. Uno schema simile farebbe diminuire drasticamente le prestazioni della macchina e l'esecuzione in contemporanea diventerebbe impossibile ai fini pratici. E' qui che vengono in aiuto i thread: dei sottoprocessi chiamati anche "flussi di controllo" o "processi leggeri". I thread hanno svariati vantaggi:
Ogni thread possiede un suo stato che può essere: pronto, in esecuzione, bloccato. Un processo, anche se non utilizza thread, ha comunque la funzione principale (in c main()) che viene vista come un il singolo thread di un processo. Un esempio molto comune di utilizzo dei thread è un server multi-client. Il server (ad esempio uno di chat) deve interagire con più client (ad esempio se un client invia al server il testo "ciao" il server lo deve inviare a tutti gli altri client). Per fare questo si può attivare un thread per ogni utente connesso che gestisce la comunicazione esclusivamente per quel singolo client. Una volta che il client si disconnette il thread termina. Gestione del softwareI sistemi operativi più diffusiI sistemi operativi principali e più diffusi (anche in passato) sono (in ordine alfabetico):
|
Programma |
|
Risorse |
Verifiche d'apprendimento È possibile, e fortemente consigliato, integrare le lezioni e valutare la propria preparazione attraverso queste esercitazioni. È possibile verificare la conoscenza di un argomento specifico o dell'intero programma.
|
|
Utenti interessati |