Il 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 computer. È il programma responsabile della gestione dei componenti hardware che costituiscono un computer e dei programmi che su di esso girano. Il compito principale del sistema operativo è quello di permettere all'uomo di interagire direttamente con la macchina.
Ciascun programma ha compiti specifici da svolgere, per esempio quando un utente interagisce col computer le richiese vengono interpretate dai vari programmi e poi raggiungono l’hardware. Il sistema operativo è in grado di accedere anche a periferiche non previste inizialmente, deve però poter disporre dei relativi device driver, in conclusione il sistema operativo è in grado di poter essere personalizzato e ampliato a seconda della macchina su cui viene installato. I dispositivi con tecnologia Plug and Play riescono a farsi riconoscere dal sistema e richiedere l’installazione dei driver corretti.
Un sistema è detto monoprogrammato quando in un dato istante contiene nella memoria centrale solo codice utente proveniente da un unico programma. Il codice viene eseguito dalla CPU che preleva le istruzioni dalla memoria e le esegue una per volta. Quando il programma utente termina la memoria diventa disponibile ed accoglie un nuovo programma da eseguire. Nei sistemi monoprogrammato la CPU potrebbe essere sfruttata meglio, se nel tempo in cui non viene usata dal programma utente fosse usata da altri programmi.
Il sistema multiprogrammato è in grado di gestire più programmi utente nello stesso periodo. Il sistema è più complesso e deve per esempio decidere quale istruzione far eseguire dopo quella attuale, evitare che i dati di un programma vengano inquinati dalle istruzioni di un altro, risolvere gli eventuali conflitti per l’assegnazione di una determinata risorsa (per esempio una stampante).
Il Time Sharing (a partizione di tempo) è un modo di gestione che assegna a una risorsa un tempo limite per il suo uso, questo periodo di tempo viene detto Time Slice. Quando il time slice termina il sistema operativo “parcheggia” il programma e manda in esecuzione il successivo. Nel sistema operativo vi possono essere dei meccanismi di priorità che permetteno ad alcuni programmi di essere eseguiti prima e magari con un time slice più lungo. Va comunque notato che non tutte le periferiche sono gestite dal time sharing, per esempio per una stampante non c’è un time slice in quanto ogni utente usa il dispositivo finché gli serve e poi lo rilascia. Il time sharing presuppone sempre l’esistenza di un time slice.
I sistemi operativi hanno tre configurazioni fondamentali:
Il sistema operativo assegna le risorse in modo che tutti i richiedenti vengano prima o poi soddisfatti e divide la memoria centrale tra gli utenti facendo in modo che non possano accedere a zone fuori della loro competenza in modo da non poter modificare il codice del sistema operativo o quello degli altri utenti.
Il Processo è un in insieme di azioni da eseguire in sequenza e di dati elaborati dalle stesse azioni. La differenza tra programma e processo è che il processo si evolve nel tempo ed è sequenziale mentre il programma rimane uguale e contiene cicli e salti.
Il processore è l’oggetto che causa l’evoluzione di un processo. Gli stati possibili di un processo sono 5:
I passaggi di stato di un processo sono i seguenti:
Un classico esempio di interruzione sono le richieste di I/O che non hanno un tempo prevedibile. Quando le interruzioni derivano da fattori esterni al sistema si dicono asincrone, esempi di tali interruzioni sono: errori, la fine stampa, l’invio di dati o comandi tramite tastiera. Per esempio in caso di errore si deve generare un messaggio e decidere se il processo deve continuare o essere terminato. Le interruzioni sincrone dipendono da fattori interni alla macchina, anche dal programma stesso, per esempio dal time sharing che dopo un certo periodo dall’ultima comunicazione con la risorsa crea l’interruzione.
L’unità centrale (CPU) è un esecutore sequenziale di operazioni. Con il time sharing la CPU può essere vista come un insieme virtuale di processi funzionanti a turno, il processore è uno solo ma corrisponde a più processi virtuali. Il Nucleo (Kernel) è la parte del sistema operativo più vicina alla macchina, le sue funzioni sono di:
Il gestore della memoria simula l’esistenza di una pluralità di unità di memoria centrale, ciascuna associata a uno dei processori virtuali generati dal nucleo(kernel).
Con il metodo a partizioni fisse la memoria centrale viene divisa appunto in un numero di locazioni di uguale dimensione. Questo metodo presenta due limiti fondamentali:
Con il metodo a ripartizioni variabili i programmi vengono caricati in sequenza dovunque ci sia spazio, ciò però comporta il problema che dopo lo scaricamento si verranno a creare spazi di lunghezza variabile in posizioni casuali e quindi questo comporta un maggior carico di lavoro per il sistema operativo, ovviamente però vi è un miglior sfruttamento della memoria centrale.
Se il programma è molto grande si usa la tecnica Overlay (sovrapposizione) dove solo una parte per volta del programma viene caricata nella memoria centrale e la parte restante viene lasciata sulla memoria di massa. La zona del disco che viene riservata alla parte restante si chiama Swap.
La gestione della memoria virtuale si ha con due diverse tecniche:
File System: è un modulo del sistema operativo che si occupa dell’organizzazione fisica e logica dei file su una memoria di massa.
Il file system provvede alla virtualizzazione delle memorie di massa e genera una macchina costituita da dispositivi indipendenti l’uno dall’altro. Tutto ciò che viene registrato su memoria di massa ha il nome di file. Le principali funzioni sono:
I dischi vengono divisi in anelli concentrici (tracce) e in fette radiali (settori), i file vengono divisi in blocchetti di di dimensioni uguali tra loro e ugualmente i dischi vengono divisi in aree della stessa dimensione. Quindi dovendo scrivere un file su disco non è necessario che ci sia uno spazio contiguo grande per tutto il file, ma basta che ci sia un numero di aree libere uguale al numero di blocchi del file. Nei sistemi operativi Linux, Dos e Windows il sistema gerarchico di directory è strutturato ad albero, il suo livello più elevato è la root, collocata in posizione fissa e nota al sistema. Usare il pathname assoluto significa indicare il percorso completo con tutti i nodi partendo dalla root, mentre il pathname relativo indica il percorso a partire dalla directory corrente.