110 likes | 300 Views
TEORIA DEI SISTEMI OPERATIVI. Sistema operativo: è un insieme di programmi e di moduli software scritti allo scopo di rendere disponibili all’ uso le risorse di calcolo e i dispositivi collegati al PC. Device driver: dispositivo hardware che permette la gestione di una periferica
E N D
TEORIA DEI SISTEMI OPERATIVI Sistema operativo: è un insieme di programmi e di moduli software scritti allo scopo di rendere disponibili all’ uso le risorse di calcolo e i dispositivi collegati al PC. Device driver: dispositivo hardware che permette la gestione di una periferica Dispositivi Plug & Play: colloquiano col sistema in modo tale da «farsi riconoscere» e richiedere l’installazione dei driver corretti. Come nasce uno standard: Differenziazione sul mercato da parte di un’azienda che ottiene il monopolio; ISO emana normative che consigliano a tutti di conformarsi all’uso di un dispositivo; Alleanze e joint-venture tra aziende concorrenti Sistema aperto: SO costruito in modo da poter operare con molti dispositivi, tra cui quelli hardware che richiedono la scrittura di poco codice software. Sistema proprietario: SO eseguito su un ristretto e ben definito insieme di macchine, corredate o meno di specifici dispositivi. I s. proprietari sono caratteristici dei «legacysystem», i s. aperti sono tipici dei «sistemi distribuiti» (basati sulle reti, downsized).
L’ ORGANIZZAZIONE MODULARE La struttura formale di un SO è di tipo gerarchico: i programmi che lo compongono si collocano a livelli diversi, si servono di programmi che stanno ai livelli sottostanti e servono i programmi dei livelli superiori. All’ interno di ogni livello i moduli sono collezioni di routine che attivano meccanismi fisici necessari per risolvere problemi logici di uno stesso tipo (per esempio le operazioni di I/O o la gestione della memoria). Ogni procedura standard per mezzo della quale si possono usare i servizi di un modulo è detta primitiva. Primitiva Modulo Verso altri moduli o verso la macchina Operazioni logiche corrispondono all’esigenza dell’utente di ottenere un risultato; operazioni fisiche consistono nell’eseguire molte operazioni elementari dipendenti dal particolare elaboratore (o stampante) al quale l’operazione è stata richiesta. Macchine diverse vengono viste all’esterno come esecutrici di primitive, quindi se le primitive disponibili sono identiche, le macchine possono eseguire le stesse operazioni logiche. Per questo i moduli che accedono a queste primitive possono essere esattamente uguali.
SISTEMI MONO E MULTI-PROGRAMMATI Risorse hardware sono: CPU, Memorie centrali, Unità di memoria di massa, dispositivi di I/O. Sistema monoprogrammato: la sua memoria centrale contiene, in un dato istante, codice utente proveniente da un unico programma. Sistema multiprogrammato: utilizza meccanismi di sospensione dell’esecuzione, impiegati per le routine di sistema, e permette l’esecuzione di altri programmi utente. Bisogna: decidere quale istruzione far eseguire dopo quella attuale, se prelevarla da un programma o da un altro; realizzare meccanismi di protezione fra i diversi programmi; risolvere conflitti di attribuzione delle risorse. Una risorsa è gestita in modo ‘time sharing’ quando il suo uso viene concesso per un tempo che non può superare un massimo: questo intervallo è il ‘time slice’. Il SO opera un riassegnamento della CPU (contextswitch); il tempo necessario a prendere tale decisione è detto tempo di riassegnamento. Le modalità con le quali il SO prende queste decisioni costituisce un esempio di politiche di gestione. La realizzazione più semplice consiste nell’assegnamento round robin (a rotazione). È possibile che un SO usi meccanismi di priorità, che concedono un time slice più lungo ai programmi con priorità più alta oppure scelgono di assegnare più spesso la CPU ai programmi con priorità più alta.
CLASSIFICAZIONE DEI S.O. Sistemi dedicati: prevedono l’ utilizzo da parte di un solo utente per volta. Supportano il multitasking. Sistemi batch (a lotti di lavoro): rispetto ai precedenti, devono avere in più i moduli per gestire le code dei lavori in ingresso e di stampa, provvedere alla protezione reciproche degli utenti, realizzare meccanismi di assegnazione delle risorse. Non è adatto per molte applicazioni di tipo gestionale, è preferito nei sistemi moderni che non hanno bisogno dell’ intervento dell’ operatore. Sistemi interattivi multiutente: utilizzano il ‘time sharing’ della CPU; velocità della CPU e dimensione della memoria centrale sono parametri critici. Ci sono problemi legati alla mutua sicurezza dei programmi eseguiti e alla corretta gestione delle risorse. L’interattività è la possibilità di fornire i dati che servono al momento della richiesta, di ottenere risultati parziali durante l’esecuzione oppure messaggi di avvertimento e di errore.
PROCESSI E PROCESSORI Con riferimento ad un sistema multiprogrammato e interattivo: Il compito del SO è quello di garantire la corretta evoluzione dello stato, assegnando le risorse e realizzando la sicurezza per ciascun utente e per sé stesso. La memoria centrale deve poter essere divisa tra gli utenti. Processo: insieme formato da un elenco finito di azioni da eseguire in sequenza e dai dati che vengono elaborati dalle stesse azioni. Differenza con i programmi: Il processo evolve nel tempo, i programmi sono traduzioni di algoritmi i processi sono sequenziali, i programmi possono contenere cicli e salti. Processore: oggetto che causa l’ evoluzione del processo. Passaggi di stato dei processi: Parcheggio Pronto Esecuzione Attesa (richiesta operazione di I/O) | Pronto (quando scade il time slice) Terminazione (processo può essere tolto dalla memoria centrale)
MODELLO A MACCHINE VIRTUALI Il modello onionskin(buccia di cipolla) rappresenta il SO come una successione gerarchica di strati costruiti sopra la macchina hardware, ciascuno dei quali rappresenta un livello di macchina virtuale. La macchina virtuale è un oggetto costituito da una macchina più semplice, in grado di eseguire un certo numero di operazioni fisiche, e da un modulo che fornisce un’interpretazione logica di tali operazioni. I livelli più bassi sono più vicini all’ hardware, quelli + alti sono vicini all’utente e alle sue applicazioni. Il Kernel(nucleo) del SO avvolge idealmente tutto l’ hardware e si occupa di interagire con i programmi applicativi che , ogni volta che necessitano di un servizio da parte di un dispositivo hardware, devono «passare attraverso di lui». Il kernel è costituito da primitive. I servizi offerti dal kernel si ottengono per mezzo di chiamate di funzione. Funzioni sono: avvio e terminazione dei processi, assegnazione della CPU ai processi, sincronizzazione di un processo con gli altri processi e con l’ambiente esterno. Alcune funzioni del kernel vengono chiamate direttamente dai programmi utente, altre devono essere scelte o richiamate dall’ utente stesso: per favorire la comunicazione e semplificare l’interfacciamento col kernel è disponibile il programma Shell o interfaccia utente. L’i.u. può essere di tipo CUI (Command User Interface) oppure GUI (Graphical U.I.).
Esecuzione parallela e concorrente di processi Esecuzione parallela di processi = un singolo programma viene suddiviso in più processi che vengono eseguiti in parallelo. Un threadè una sequenza di istruzioni in corso di esecuzione. Ambienti in cui non è possibile parallelizzare le operazioni è detto single thread, mentre in un ambiente multithreadpossiamo creare più thread contemporaneamente attivi (e parallelizzare le istruzioni in essi contenute). Più thread, eseguiti all’interno dello stesso processo, condividono tutte le info riservate di quel processo. Quando un thread apre un file, tutti i thread di quel processo possono accedere al file. Un thread ha un proprio Program Counter e alcune aree di memoria private, che formano il contesto del processo (detto anche Area di salvataggio dello stato della CPU). Nell’ elaborazione concorrente di processi, il SO deve svolgere fondamentalmente la gestione della sincronizzazione tra i processi; inoltre deve gestire l’interferenza tra essi, evitando perdite di dati e garantendo la protezione delle rispettive aree di lavoro. Il meccanismo più importante per la gestire la sincronizzazione è il semaforo. È una variabile all’interno della memoria di lavoro del SO, il cui valore può essere controllato e cambiato da un processo; può assumere i valori 0 e 1. Un sistema equo permette di evitare due problemi noti come deadlock (due o più processi sono in attesa di una condizione che non si verificherà mai) e starvation(uno o più processi non riescono ad accedere a una risorsa e quindi non possono eseguire il proprio lavoro).
GESTIONE DELLA MEMORIA Simula l’ esistenza di una pluralità di unità di memoria centrale, ciascuna associata a uno dei processori virtuali generati dal nucleo, mascherando la limitazione fisica della memoria centrale reale. Funzioni: a) Determinare l’ area di memoria da assegnare al processo e gestire dinamicamente le informazioni; b) Evitare che un processo possa scrivere nell’ area di memoria di un altro; c) Consentire la condivisione del codice eseguibile; d) Garantire la trasparenza . Metodi sono: a partizioni fisse (cioè blocchi di dimensioni fisse) e a partizioni variabili, che prevedono un maggior carico di lavoro del SO ma sfruttano al meglio la memoria disponibile. Tecniche di suddivisione dei programmi in blocchi in ambiente multi-programmato: La paginazione è tale per cui ogni programma viene diviso in blocchi di eguali dimensioni detti pagine logiche; analogamente la memoria centrale è divisa in pagine fisiche di dimensioni uguali a quelle delle pagine logiche. Vantaggi: le pagine hanno uguale dimensione. Svantaggi: arbitrarietà con cui le pagine logiche sono generate suddividendo il programma. La segmentazione è tale che la suddivisione del programma è eseguita con criteri logici e può essere controllata dal programmatore. Ciascun blocco ha dimensioni variabili ed è detto segmento. Vantaggi: Possibilità di far condividere a più processi alcuni segmenti. È possibile caricare in memoria un numero elevato di segmenti, non come le pagine. Svantaggi: La memoria è soggetta a frammentazione; Le tabelle impiantate per gestire la memoria virtuale con i segmenti sono più complesse di quelle con le pagine.
GESTIONE DI PERIFERICHE E FILE SYSTEM Il device management è la parte del SO che consente di definire dispositivi virtuali che: Mettono a disposizione le capacità delle periferiche per un certo tempo e per un certo processo; Permettono di gestire i comuni contrattempi che si possono verificare nelle operazioni stesse (errori di trasmissione, periferiche disattivate). SPOOL: consente a diversi processi l’ uso contemporaneo della stessa periferica. Il file di spool genera la coda di stampa numerando i file in coda. La logica è FIFO. Il file system è strutturato in modo gerarchico e regola l’ organizzazione, l’ assegnamento, la protezione e il ritrovamento di insiemi di dati su memoria di massa. Tiene traccia della posizione dei file e del loro stato usando particolari tabelle dette file directory; Decide le protezioni e regola gli accessi; Assegna un file al programma che lo ha richiesto; Toglie l’ uso del file ad un programma per renderlo disponibile ad altri. Il file system consente di riferirsi alle informazioni in termini di identificatori, piuttosto che di indirizzi fisici, utilizzando le directory (tabelle dei descrittori). Esse contengono: Il nome e il tipo del file; I tipi di protezione e di accessi consentiti; Il nome dell’ utente che creato o modificato il file; La dimensione del file in byte e il numero di record contenuti; La data della creazione, dell’ ultima modifica o dell’ ultimo accesso. Root:directory di più alto livello. Pathname: nome di file espresso tramite un cammino.
SHELL È un programma del SO che riceve in ingresso le richieste di esecuzione di operazioni, espresse usando il linguaggio dei comandi, e le rende possibili. In anni più recenti l’ interfaccia utente utilizza interfacce grafiche; il concetto è che l’interfaccia deve essere il più possibile userfriendly. Windows si serve di librerie DLLche dispongono del codice necessario a definire il comportamento dei tipici oggetti Windows. Processi attivati dal S.O. Bootstrap = caricamento; il SO provvede a caricare sé stesso in memoria centrale. IPL (Initial Program Loader): è un programma registrato sulla memoria ROM che assume il controllo della CPU all’accensione e carica il SO in memoria centrale eventualmente attraverso un solo modulo del sistema, il quale assume il controllo e carica il resto. Viene caricato in memoria il kernel oltre ad altro software. Prima di tutto viene mandata in esecuzione la parte del nucleo che gestisce tutti gli altri processi, detto scheduler, che attiva la inizializzazione del sistema per il controllo delle risorse disponibili e le linee collegate ai terminali. Appare la maschera di login, in caso positivo di accesso viene fornito a ciascun utente un ambiente di lavoro (shell) col quale è possibile ottenere dal SO, con opportuni comandi, le funzioni necessarie all’applicazione richiesta. Lo scheduler lancia anche il gestore dello spooldella stampante e il gestore dell’ accounting(controlla le risorse assegnate agli utenti e tempi di accesso al sistema). La sessione di chiusura è detta shutdown.
LIVELLO UTENTE A livello di UTENTE, il SO mette a disposizione alcuni software (programmi) di utilità che agevolano l’ utente nella sua attività di programmazione, sia attraverso comandi espliciti, sia attraverso routine che vengono richiamate dal sistema. Essi comprendono: Editor di testi Compilatori: trasformano il codice utente in codice macchina Linker: riuniscono tra loro i risultati di compilazioni diverse Interpreti: traducono una per volta le espressioni di comando in linguaggi evoluti Debugger: controllano l’ esecuzione dei programmi Gestori di maschere per il data entry Gestori delle comunicazioni: per la posta elettronica