Sistemi Operativi: Struttura
Struttura del sistema operativo MS Dos
- Affinché possa funzionare correttamente ed essere facilmente modificabile un S.O. non viene in genere progettato come un sistema monolitico ma suddiviso in piccoli componenti.
- Struttura semplice:
– Molti sistemi sono nati come sistemi piccoli e solo in un secondo tempo si sono accresciuti superando il loro scopo originale.
– Ad es. MS-DOS, aveva come scopo il fornire la massima funzionalità nel minimo spazio.
- Non è modulare
- Nonostante la presenza di una struttura elementare le sue interfacce ed i livelli di funzionalità non sono ben separati
Struttura di sistema di UNIX
A causa dei limiti delle architetture per cui era stato progettato, anche la strutturazione di UNIX non risultò completa.
- Il S.O. UNIX consiste di due parti separate:
– Programmi di sistema
– Kernel
- Consiste di tutto ciò che nel diagramma a stati di un sistema è compreso tra l’hardware e l’interfaccia delle chiamate del sistema.
- Fornisce il file system, lo scheduling della CPU, la gestione della memoria e altre (forse troppe) funzioni.
- Difficile da migliorare: le modifiche in una parte possono avere effetto negativo in un’altra.
Struttura di sistema Sistema Operativo attuale
Classificazione dei S.O.
In base alle modalità di gestione dei programmi:
• Monoprogrammazione (un solo programma alla volta in memoria)
• Multiprogrammazione (più programmi presenti in memoria, apparentemente eseguiti contemporaneamente, in realtà in
time-sharing, 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:
• S.O. Monoutente (un solo utente può usare la macchina)
• S.O. Multiutente (più utenti contemporaneamente possono interagire con la stessa macchina)
Monoprogrammazione e multiprogrammazione sono concetti indipendenti da quelli di S.O. monoutente e multiutente.
I sistemi operativi più recenti operano tutti in multiprogrammazione.
Windows nasce come sistema monoutente, anche se le versioni più evolute (NT, 2000, XP) hanno alcune funzioni che possono essere utilizzate in modo concorrente da più utenti.
UNIX (nelle sue varie versioni) è invece un sistema multiutente che opera in multiprogrammazione.
I S.O. sono generalmente costituiti da un insieme di moduli, ciascuno dedicato a svolgere una determinata funzione; I vari moduli del S.O. interagiscono tra di loro secondo regole precise al fine di realizzare le funzionalità di base dalla macchina.
Il gestore dei Processi
E’ il modulo che si occupa di controllare la sincronizzazione, interruzione e riattivazione dei programmi in esecuzione cui viene assegnato un processore;
La gestione dei processi viene compiuta in vari modi, in funzione del tipo di utilizzo cui il sistema è rivolto.
Il programma che si occupa della distribuzione del tempo di CPU tra i vari processi attivi, decidendone l’avvicendamento, è comunemente chiamato Scheduler.
Nel caso di elaboratori multi-processore si occupa anche di gestire la cooperazione tra le varie CPU presenti nel sistema.
- Politiche di schedulazione
Le politiche di schedulazione utilizzate dallo scheduler sono raggruppabili in due grandi categorie:
- Preemptive: la CPU in uso da parte di un processo può essere tolta e passata a un altro in un qualsiasi momento;
- Non Preemptive: una volta che un processo ha ottenuto l’uso della CPU non può essere interrotto fino a che lui stesso non la rilascia.
- Sistemi monotasking
I SO che gestiscono l’esecuzione di un solo programma per volta sono catalogati come mono-tasking;
Non è possibile sospendere l’esecuzione di un programma per assegnare la CPU a un altro.
Sono storicamente i primi SO (es MSDos).
- Sistemi multitasking
I SO che permettono l’esecuzione contemporanea di più programmi sono definiti multi-tasking (Windows-NT, 9x, Windows 2000/XP/2003, Linux);
Un programma può essere interrotto e la CPU passata a un altro programma.
- Sistemi Time-sharing
Un’evoluzione dei sistemi multi-tasking sono i sistemi time sharing.
Ogni programma in esecuzione viene eseguito ciclicamente per piccoli quanti di tempo.
Se la velocità del processore è sufficientemente elevata si ha l’impressione di un’evoluzione parallela dei processi.
Il Gestore della Memoria
L’organizzazione e la gestione della memoria centrale è uno degli aspetti più critici nel disegno di un SO;
Il gestore della memoria è quel modulo del SO incaricato di assegnare la memoria ai vari task (per eseguire un task è necessario che il suo codice sia caricato in memoria);
La complessità del gestore della memoria dipende dal tipo di SO;
Nei sistemi multi-tasking più programmi contemporaneamente possono essere caricati in memoria.
- La Memoria virtuale
Spesso la memoria non è sufficiente per contenere completamente tutto il codice dei vari task;
Si può simulare una memoria più grande tenendo nella memoria di sistema (RAM) solo le parti di codice e dei dati che servono in quel momento;
Si usa il concetto di memoria virtuale.
I dati dei programmi non in esecuzione possono essere tolti dalla memoria centrale e parcheggiati su disco nella cosiddetta area di swap;
Il rapporto tra le dimensioni dell’area di swap e della RAM è di 3 : 1 (max);
I moderni processori posseggono meccanismi hardware per facilitare la gestione della memoria virtuale.
Il Gestore del File system
Il gestore del file system è quel modulo del sistema operativo incaricato di gestire le informazioni memorizzate sui dispositivi di memoria di massa.
Il gestore del file system deve garantire la correttezza e la coerenza delle informazioni.
Nei sistemi multi-utente, il Gestore dei File System, mettere a disposizione dei meccanismi di protezione in modo tale da consentire agli utenti di proteggere i propri dati dall’accesso da parte di altri utenti non autorizzati.
Le funzioni tipiche che deve svolgere sono:
- Fornire un meccanismo per l’identificazione dei Files;
- Fornire opportuni metodi per accedere ai dati;
- Rendere trasparente la struttura fisica del supporto di memorizzazione;
- Implementare meccanismi di protezione dei dati
Quasi tutti i sistemi operativi utilizzano un’organizzazione gerarchica del File System;
L’elemento utilizzato per raggruppare più file insieme è la directory;
L’insieme gerarchico delle directory e dei file può essere rappresentato attraverso un grafo delle directory.
Gestore dei Dispositivi I/O
Il gestore dei dispositivi di I/O è quel modulo del S.O. incaricato di assegnare i dispositivi ai task che ne fanno richiesta e di controllare i dispositivi stessi;
Da esso dipende la qualità e il tipo di periferiche riconosciute dal sistema.
I Device driver
Il controllo dei dispositivi di I/O avviene attraverso speciali programmi detti Device Driver;
I device driver sono spesso realizzati dai produttori dei dispositivi stessi che ne conoscono le caratteristiche fisiche in maniera approfondita.
Questi programmi implementano normalmente le seguenti funzioni:
- Rendono trasparenti le caratteristiche fisiche tipiche di ogni dispositivo;
- Gestiscono la comunicazione dei segnali verso i dispositivi;
- Gestiscono i conflitti, nel caso in cui due o più task vogliono accedere contemporaneamente allo stesso dispositivo.
L’Interfaccia utente
Tutti i Sistemi Operativi implementano dei meccanismi per rendere agevole l’utilizzo del sistema da parte degli utenti.
L’insieme di questi meccanismi di accesso al computer prende il nome di Interfaccia Utente.
Interfaccia testuale: Interprete dei comandi ( shell ).
Esempio: MS-Dos, Unix.
Interfaccia grafica (a finestre): L’output dei vari programmi viene visualizzato in maniera grafica all’interno di finestre; L’utilizzo di disegni rende più intuitivo l’uso del calcolatore.
Esempio Windows, MacOS
Organizzazione del kernel
Esistono 4 categorie di Kernel
- Kernel Monolitici: Un aggregato unico (e ricco) di procedure di gestione mutuamente coordinate e astrazioni dell’HW
- Micro Kernel: Semplici astrazioni dell’HW gestite e coordinate da un kernel minimale, basate un paradigma client/server, e primitive di message passing
- Kernel Ibridi: Simili a Micro Kernel, ma hanno componenti eseguite in kernel space per questioni di maggiore efficienza
- ExoKernel: Non forniscono livelli di astrazione dell’HW, ma forniscono librerie che mettono a contatto diretto le applicazioni con l’HW.
Kernel Monolitici
Un insieme completo e unico di procedure mutuamente correlate e coordinate
System calls: Implementano servizi forniti dal kernel, tipicamente realizzati in moduli eseguiti in kernel mode
NB Esiste modularità, anche se l’integrazione del codice, e il fatto che tutti i moduli sono eseguiti nello stesso spazio, è tale da rendere tutto l’insieme un corpo unico in esecuzione.
Vantaggi:
- Efficienza
- L’alto grado di coordinamento e integrazione delle routine permette di raggiungere ottimi livelli di efficienza
- Modularità: I più recenti kernel monolitici (Es. LINUX) permettono di effettuare il caricamento (load) di moduli eseguibili a runtime
- Possibile estendere le potenzialità del kernel, solo su richiesta
Esempi di Kernel monolitici: LINUX, FreeBSD UNIX
Microkernel o sistemi client/server
Quali funzionalità deve offrire un microkernel?
- funzionalità minime di gestione dei processi e della memoria
- meccanismi di comunicazione per permettere ai processi clienti di chiedere servizi ai processi serventi
La comunicazione è basata su message passing; il microkernel si occupa di smistare i messaggi fra i vari processi
Vantaggi
- il kernel risultante è molto semplice e facile da realizzare
- il kernel è più espandibile e modificabile:
- per aggiungere un servizio: si aggiunge un processo a livello utente, senza dover ricompilare il kernel
- per modificare un servizio: si riscrive solo il codice del servizio stesso
- il s.o. è più facilmente portabile ad altre architetture
- una volta portato il kernel, molti dei servizi (ad es. il file system) possono essere semplicemente ricompilati
- il s.o. è più robusto: se per esempio il processo che si occupa di un servizio cade, il resto del sistema può continuare a funzionare
- sicurezza: è possibile assegnare al microkernel e ai processi di sistema livelli di sicurezza diversi
- adattabilità del modello ai sistemi distribuiti: la comunicazione può avvenire tra processi nello stesso sistema o tra macchine differenti
Svantaggi
- maggiore inefficienza dovuta all'overhead determinato dalla comunicazione mediata tramite kernel del sistema operativo (parzialmente superata con i sistemi operativi più recenti).