32. Il Sistema Operativo : definizione e struttura Il SO è un insieme di programmi le cui funzioni principali sono costituire un’interfaccia tra la macchina e l’utente e gestire in modo ottimale le risorse del sistema. Il SO ha una schematizzazione a strati o a cipolla, dove ogni strato può essere visto come un modulo software eseguito sfruttando quanto è messo a disposizione dello strato sottostante. Si dice anche che ogni strato è una macchina virtuale per gli strati superiori, cioè che a qualsiasi livello si collochi, gli strati sottostanti vengono visti come oggetto unico, come se fosse una macchina fisica che fornisce le primitive attraverso le quali è possibile interagire con esso, che opera su particolari tipi di oggetti e accetta specifici comandi. La struttura di un S.O. è gerarchica : questo significa che 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. 33. Elaborazione batch Con questo termine si fa riferimento ai primi sistemi operativi (batch monoprogrammati) che avevano lo scopo di svincolare il sistema dalle attese improduttive, eliminando gli intervalli tra la fine dell’esecuzione di un programma e l’inizio del successivo. Il sistema operativo doveva essere dotato di un programma speciale, sempre residente in memoria centrale, che raccoglieva i lavori (job) presentati dagli utenti e li eseguiva in successione. Nell’elaborazione batch l’utente non interagiva con il calcolatore durante l’esecuzione dei programmi. Al contrario, occorreva preparare prima di tutto il lavoro da svolgere, e al termine si otteneva il risultato. Il lavoro batch può quindi essere considerato l’opposto di interattività. Il termine elaborazione batch o a lotti è ancora in uso oggi e significa che i dati necessari all’elaborazione sono accumulati in una memoria ausiliaria durante un certo periodo di tempo : a una scadenza prefissata vengono elaborati tutti insieme ( in un unico lotto) dai programmi applicativi. (Es. procedura stampa cedolini paga). 34. Time sharing Il time sharing, o condivisione di tempo, è un modello di sistema operativo che si basa su una politica di gestione della CPU che prevede l’assegnazione del processore a turno ai vari programmi utente per un limitato periodo di tempo, chiamato time-slice o quanto. Se le commutazioni tra utenti sono abbastanza frequenti, ognuno ha la sensazione di lavorare su una macchina dedicata. La velocità della CPU costituisce un parametro critico di un sistema dove essa viene gestita in time-sharing. Per evitare i sovraccarichi occorre eseguire in ogni time slice un numero sufficiente di operazioni di CPU, che deve essere comunque molto più grande del numero di istruzioni eseguite per effettuare i riassegnamenti. Il time slice deve essere piccolo per garantire che in un tempo impercettibile da una persona, per esempio un secondo, si trovi un numero elevato di time slice, per poter offrire il servizio a tutti gli utenti almeno una volta. Riducendo il numero di time slice, il numero delle commutazioni tra utenti cresce troppo e di conseguenza il tempo dedicato alle routine di sistema diviene eccessivo ( system overhead o più precisamente system overload). In questa modalità di lavoro assumono grande importanza 2 parametri : la velocità della CPU e la dimensione della MC. Nei sistemi operativi monoutente, la tecnica di time-sharing è meglio nota con il termine multitasking 35. La multiprogrammazione, la monoprogrammazione e la multiutenza, la monoutenza Multiprogrammazione significa che più processi sono caricati in MC ed avanzano in parallelo;l’obiettivo è di non lasciare inattiva la CPU.. Quando un processo richiede ad esempio un operazione di I/O, viene messo in attesa per eseguire un altro processo, migliorando il rendimento del processore. La tecnica della multiprogrammazione ha permesso lo sviluppo dei sistemi operativi multiutente e del time-sharing; non implica la multiutenza (basta pensare al multitasking). Monoprogrammazione significa che in MC è caricato un solo processo; implica la monoutenza. La monoutenza, cioè quando vi è un solo utente, non implica però la monoprogrammazione, mentre la multiutenza implica la multiprogrammazione. 36. Il gestore dei processori La componente principale dell’elaboratore è la CPU. Tutti i programmi hanno bisogno della CPU per essere eseguiti, ma questa è unica e quindi viene “contesa” dai vari processi in esecuzione. Riveste allora particolare importanza quella parte del S.O. che si occupa dell’assegnazione della CPU ai singoli lavori che ne chiedono l’uso ovvero il gestore dei processori. Le funzioni che deve svolgere sono : 1. mantenere aggiornato lo stato del processore (Libero/occupato) 2. decidere a quale processo assegnare il processore quando se ne presenti la necessità 3. assegnare il processore al processo (quello scelto) 4. riprendere il controllo del processore quando il processo è terminato o sospeso. I moduli più importanti sono: - lo scheduler dei lavori (job scheduler o long term scheduling); - lo schedulatore dei processi (process scheduler o short term scheduling); - il controllore del traffico (traffic controller o dispatcher). I due moduli di scheduling utilizzano particolari politiche di scelta basati su criteri quali massimizzare l’utilizzo della CPU; massimizzare il numero dei programmi eseguiti nell’unità di tempo; -minimizzare il tempo di turn-around e di risposta; garantire a tutti gli utenti un servizio omogeneo in termini di tempo d’attesa. 37. Job scheduler e process scheduler Il job scheduler sceglie, fra quelli proposti, i lavori da eseguire e li carica da MdM in MC creando i relativi processi. Si occupa quindi della transazione da stato hold a stato ready di un processo. I descrittori di tutti i lavori sono organizzati in una lista che il job scheduler scandisce al fine di determinare quale lavoro portare in MC per l’esecuzione. Tra tutti i lavori che hanno queste caratteristiche bisognerà effettuare una scelta e a questo scopo sono state definite diverse politiche : FIFO : i lavori sono ordinati in una lista in ordine di arrivo. Il primo lavoro inserito nella lista sarà il primo a passare dallo stato Hold allo stato Ready. E’ una politica molto semplice da gestire ma non permette una reale ottimizzazione delle risorse PRIORITA’ STATICA : a ogni lavoro è assegnato un valore ( priorità) che indica il livello di importanza del lavoro. La priorità è memorizzata nel JCB di ciascun lavoro e può essere assegnata dal responsabile del centro. Il job scheduler sceglierà allora il lavoro che ha la priorità maggiore: tra quelli con pari priorità potrà essere la politica Fifo PRIORITA’ DINAMICA : affinchè non ci siano lavori che permangono troppo tempo in coda perché ce ne sono altri con priorità maggiore, il S.O. aumenta il valore della priorità in funzione del tempo di permanenza del lavoro in coda. Per poter attuare questa politica è necessario inserire nel JCB un’informazione che indichi il momento di inserimento del descrittore nella lista, cioè il tempo in cui è stata richiesta l’esecuzione del programma. Il process scheduler invece opera sulla lista dei processi in stato ready e sceglie, in base ad una particolare politica di scheduling, quale processo portare in stato run. Esso è in grado di compiere questa funzione secondo una delle seguenti politiche : round robin : il processore viene assegnato a turno, per un intervallo di tempo stabiito, ai processi nell’ordine in cui questi ne hanno fatto richiesta. La coda è gestita con il metodo FIFO e quindi tutti gli inserimenti provenienti dalla coda ready o dalla cosa di wait avvengono al fondo. Round robin a percentuale di tempo : con la tecnica precedente i processi che richiedono molte operazioni di I/O sono penalizzati rispetto a quelli che ne richiedono meno perché il rientro dallo stato di wait significa l’inserimento del processo al fondo della coda. La tecnica a percentuale di tempo è una variante del round robin : il processo non verrà inserito necessariamente al fondo, ma la posizione di rientro nella coda dipende dalla percentuale di tempo di CPU utilizzata. Questo significa che se un processo lascia il processore perché richiede un I/O, e quindi non ha ancora esaurito il proprio time-slice, il suo rientro nella coda non sarà più al fondo ma tanto più avanti quanto minore è la percentuale di tempo di CPU utilizzata prima dell’interruzione. Round robin limitato : è ancora una variante del round robin. E’ prefissato un numero di time slice che un processo può utilizzare : terminati questi time slice che sono gestiti con la tecnica del round robin tradizionale, il processo è inserito in una nuova coda che sarà presa in considerazione solo quando la coda del round robin è esaurita 38. Il concetto di processo e di stati Il concetto di Processo è fondamentale in sistemi caratterizzati da più attività che possono essere svolte logicamente in parallelo. Esso descrive, in termine di operazione eseguite dalla CPU, il comportamento di un programma in esecuzione. Un programma è un’entità statica (passiva) che descrive le azioni da compiere, mentre un processo è un’ entità dinamica (attiva) che rappresenta l’esecuzione di tali azioni. Ogni volta che si lancia un istanza di programma si avvia un processo che è dunque un entità astratta e dinamica. Ogni processo ha un insieme di dati ad esso riferiti: è un’area dati contenente informazioni relative all’identità del processo ed alla sua eventuale priorità e altro. Viene chiamato Descrittore del Processo Gli stati del processo sono: - run, il processo è in esecuzione ovvero gli è stata assegnata la CPU; - wait, il processo non può avanzare in quanto non ha tutte le risorse a disposizione (ad esempio è in attesa di I/O); - ready, il processo ha a disposizione tute le risorse necessarie ma non il processore (CPU); -terminate, il processo è terminato; - hold, il. il programma si trova ancora su MdM . 39. Il concetto di risorsa e la classificazione Perché un processo posso evolvere nel tempo, occorre che possa disporre di tutti gli “oggetti” necessari per l’esecuzione di quanto descritto nel programma ovvero delle risorse che possono essere definite, quindi, come gli elementi hardware e/o software che condizionano l’avanzamento di un processo. Le risorse possono essere classificate in vari modi : Hardware o Software Permanenti(può essere utilizzata ripetutamente) o Consumabili (viene creata da un processo e utilizzata da un altro) Seriali (un solo processo alla volta) o Parallele (più processi in parallelo) SUL LIBRO SI PARLA DI MOLTEPLICITA’ Interrompibili ( è seriale ma è possibile che passi ciclicamente da un processo ad un altro) 40. Le transizioni fra stati Lo schema di transizione fra stati può essere rappresentato graficamente nel modo seguente : RUN HOLD TERMINA TE READY WAIT Il significato delle varie transizioni è il seguente : da Hold a Ready : il processo viene caricato da Memoria di Massa in Memoria centrale. (job scheduler in collaborazione con il gestore della memoria) da Ready a Run : al processo viene assegnata la CPU e viene quindi mandato in esecuzione (process scheduler) da Run a Terminate : il processo termina e rilascia tutte le risorse da Run a Wait : il processo ha richiesto un’operazione di I/O o ha bisogno di risorse diverse dalla CPU da Run a Ready : il processo ha terminato il time slice a sua disposizione da Wait a Ready : l’operazione di I/O o la risorsa richiesta e attesa dal processo è stata concessa e il processo ritorna in stato ready 44. Il gestore della memoria E’ il modulo del sistema operativo che si occupa di gestire in modo ottimale la risorsa memoria centrale. Un programma, prima di essere eseguito, deve essere caricato nella memoria centrale : gli deve essere cioè assegnata una certa quantità di byte in memoria centrale in grado di contenere la sua zona dati ( le variabili) e la sua zona istruzioni ( scritte in LM). Il gestore della memoria (memory management) è formato dai moduli del S.O. che si occupano di: tenere aggiornato lo stato di ogni locazione di memoria ( libera o occupata) assegnare la memoria centrale ai processi che ne fanno richiesta gestire il recupero della memoria centrale quando un processo termina. Il Gestore della Memoria affronta un duplice problema legato alla mappa della memoria a) rilocare il codice b) allocare ai processi la quantità di memoria necessaria 45. La rilocazione La rilocazione è la funzione che trasforma da spazio fisico a spazio logico. In multiprogrammazione la memoria disponibile viene ogni momento suddivisa tra i vari processi. Il programmatore, al momento della stesura del software non può sapere in quale zona della memoria sarà allocato per l’esecuzione quindi non può scrivere il programma in termini di indirizzi assoluti di memoria ma solo di indirizzi relativi che fanno riferimento ad un indirizzo base ipotetico. E’ basilare quindi che il SO sia in grado di rilocare cioè tradurre gli indirizzi relativi in indirizzi assoluti. Esistono tre metodi di rilocazione: assoluta, statica e dinamica che si differenziano per il momento in cui esse avvengono. La rilocazione assoluta avviene nella fase di compilazione o linker ed è quindi utilizzabile solo in monoprogrammazione. La rilocazione statica avviene al momento del caricamento del processo in memoria centrale. La rilocazione dinamica avviene nel momento dell’esecuzione di ogni singola istruzione : è il metodo più sofisticato , consente di poter spostare un processo in memoria centrale durante la sua esecuzione e richiede un hardware adeguato. 46. L’allocazione a partizioni statiche Le partizioni vengono prestabilite e non vengono più cambiate né in numero né in dimensioni. La scelta iniziale è fatta da una stima del carico tipico raccogliendo informazioni. Il sistema può periodicamente ri-caricare il sistema con nuove partizioni. Quando un processo passa in stato ready verrà scelta la partizione libera adatta per quel processo. In ogni partizione può essere allocato un solo processo. Esistono 2 tipi di algoritmi di scelta : FIRST FIT nel quale viene scelta la prima partizione libera di dimensione sufficiente viene occupata dal processo; BEST FIT nel quale viene scelta la migliore ( nel senso quella che lascia meno spazio non occupato) partizione libera. La rilocazione utilizzata con questo metodo di allocazione è quella statica. Il metodo provoca il fenomeno della frammentazione interna e inoltre esistono alcuni problemi quali il fatto che un processo potrebbe non andare in esecuzione perché nessuna partizione libera è sufficiente a contenerlo nonostante la somma delle aree libere sarebbe sufficiente e l’impossibilità per un processo di andare in esecuzione se nessuna partizione è grande a sufficienza. 47. L’allocazione a partizione dinamica Inizialmente c’è una zona di memoria libera. Ogni volta che un processo chiede il caricamento in memoria si cerca una zona libera che possa contenerlo e si ritaglia la partizione ad hoc. In generale si avranno più zone libere (holes). All’arrivo di un processo si cercherà una zona sufficiente a contenerlo. Al termine del processo la zona occupata dovrà essere considerata libera immergendola con eventuali zone libere adiacenti. Le strategie di scelta sono : FIRST FIT : la prima area libera di dimensione sufficiente viene occupata dal processo; BEST FIT : la migliore ( nel senso quella che lascia meno spazio non occupato) area libera; WORST FIT : la peggiore ( nel senso quella che lascia più spazio libero) area libera. La rilocazione utilizzata con questo metodo di allocazione è quella statica. Il metodo provoca il fenomeno della frammentazione esterna e i problemi individuati nella tecnica di allocazione a partizione statiche non vengono risolti. 48. La paginazione La paginazione è una tecnica per sfruttare la memoria anche per zone non contigue. Essa richiede un hardware dedicato che consente la rilocazione dinamica. La memoria fisica è divisa in frame (pagine) tutti della stessa dimensione (2K o multipli). Il processo viene suddiviso in pagine logiche della stessa dimensione delle pagine fisiche. Un processo richiede un certo numero di pagine tutte piene tranne l’ultima (frammentazione interna). Vi è una lista di page frames disponibili da cui si prelevano i frame necessari. Il loro numero è via via inserito nelle page table del processo che garantisce la corrispondenza fra pagine fisiche e pagine logiche. Gli indirizzi logici sono divisi in page number (parte alta) e page offset (parte bassa). I vantaggi sono che è possibile allocare processi in aree di memoria non contigue sfruttando tutta la memoria disponibile, è stata eliminata la frammentazione esterna ed è stata diminuita la frammentazione interna. 49. La segmentazione La tecnica della segmentazione presuppone una suddivisione logica, effettuata a priori, del programma che andrà in esecuzione. Tale suddivisione prevede l’individuazione di unità di dimensioni diverse chiamate segmenti, sulla base di criteri logici stabiliti anche da parte del programmatore. Un programma può essere suddiviso in un segmento contenente il codice relativo alle procedure di uso più frequente. Per riferirci ad un oggetto all’interno del programma occorre conoscere il numero di segmento in cui è contenuto e l’indirizzo all’interno del segmento detto offset. A ogni segmento logico corrisponde un segmento fisico allocato in celle contigue di MC. La segmentazione appare una generalizzazione della tecnica di allocazione a partizioni variabili in cui si consente al programmatore di suddividere il programma in segmenti ognuno dei quali è allocato in una partizione. 50. La memoria virtuale segmentata e paginata E’ la tecnica più flessibile e sofisticata. Consiste nel suddividere logicamente il programma in segmenti e i segmenti in pagine logiche. 51. La memoria virtuale Si parla di memoria virtuale quando un programma si comporta come se avesse a disposizione una memoria molto più grande della MC effettivamente disponibile. Il meccanismo di memoria virtuale provoca un rallentamento nell’esecuzione del programma a causa dei continui trasferimenti di dati tra memoria centrale e memoria di massa. E’nata per far fronte al problema di processi troppo grandi per la memoria disponibile , attraverso il caricamento in memoria centrale solo di una parte del processo e rimandando il caricamento di altre parti ad una richiesta del processo stesso. 52. Gli algoritmi di scelta di una partizione Gli algoritmi di scelta per una partizione sono: - first fit, la prima partizione libera di dimensione sufficiente viene occupata dal processo; - best fit (la migliore partizione libera), lascia meno spazio non occupato; - worst fit, lapeggiore area libera nel senso quella che lascia più spazio libero. Le prime due sono usate sia dalla tecnica di allocazione a partizioni statiche che da quella a partizioni dinamiche, mentre la terza ha senso solo per la tecnica a partizioni variabili. 53. Gli algoritmi di scheduling di un processo Gli algoritmi di scheduling di un processo sono: - round robin, il processore viene assegnato, a turno, ad ogni processo per un certo periodo di tempo e, se alla fine del periodo l’esecuzione non è terminata, il processo viene riportato nella coda dei ready; - tecnica a rientro per percentuale di tempo usato, il processore viene assegnato a turno ad ogni processo ma, se il quanto di tempo viene usato solo in parte, quando il processo rientra nella coda dei ready la sua posizione verrà determinata in rapporto alla percentuale di tempo usata; - round robin a più livelli, inizialmente tutti i processi vengono posti nella coda1 e a ciascuno di essi a turno viene assegnato un quanto di tempo del processore, se alla fine del tempo concesso il processo non è terminato viene posto nella coda successiva che è a più basso livello di priorità (le code vengono scandite in ordine di priorità). 54. Gli algoritmi di scheduling di un lavoro Gli algoritmi di scheduling di un lavoro sono: - FIFO, i lavori vengono eseguiti nell’ordine in cui giungono; - priorità statica, si assegna ad ogni lavoro un parametro che condiziona le decisioni dello schedulatore; - priorità dinamica, il SO incrementa la priorità del lavoro al crescere dei tempi d’attesa. 55. Il problema del frame – allocation Il problema del frame allocation consiste nel numero di pagine da caricare all’inizio per un processo, esso infatti non è definito. Esistono teorie diverse al riguardo e si può dimostrare che nessuna scelta garantisce l’ottimizzazione. Infatti caricando tutte le pagine si arriva presto ad una saturazione della MC e caricando solo la prima pagina si avrà un forte numero di page fault. 56. Il problema della page replacement Il problema della page replacement è quello di sapere quale frame sostituire quando, a causa di un page fault, il sistema deve caricare una nuova pagina in MC e non ci sono più frame disponibili... Alcuni algoritmi possibili sono: - FIFO, ad ogni pagina si associa il tempo del suo caricamento in memoria (quando occorre sostituire una pagina essa viene sostituita con la pagina in memoria da più tempo, l’algoritmo quindi fornisce sempre una sequenza di esecuzione corretta ma potrebbe essere inefficiente); LFU (least frequently used), scelgo la pagina usata meno frequentemente; - LRU (least recently used), sostituisco la pagina che non è stata usata da più lungo tempo. 57. Il gestore delle periferie Un importantissima attività del SO riguarda la gestione dei dispositivi periferici o genericamente periferiche con cui intendiamo unità al servizio del computer che non sono dotate di un autonomo sistema di calcolo e governo. Possono essere: - dispositivi di input, ovvero quei dispositivi che trasformano e qualificano l’informazione esterna in dati in formato digitale utilizzabili dalla CPU; dispositivi di output ovvero quei dispositivi che trasformano e decodificano i dati digitali in dati in forma utilizzabili dall’utente. 58. Lo spool Lo spool è nato per risolvere il problema dell’occupazione del buffer in MC che può assumere dimensioni considerevoli non determinabili a priori in quanto dipendono dalle richieste dei singoli processi. L’organizzazione a spooling sostituisce il buffer di MC con più file in MDM detti file di immagine. In questo modo la crescita non prevedibile dalle dimensioni del buffer non è più un problema perché la MDM si considera di capacità più che sufficiente anche se a discapito della velocità delle operazioni di scrittura su disco dei dati da stampare. Questa era di MDM è detta area di spooling. 59. Il file system Il file system è la componente del sistema operativo che permette all’utente di riferirsi ed utilizzare i files senza preoccuparsi di come effettivamente siano memorizzati sul supporto di MDM. Esso deve consentire una: - una facile identificazione dei file; - una visione astratta delle operazioni logiche di uso più comune; - la condivisione e l’acesso ai files; - un sistema di protezione dei files. L’obbiettivo del file system è trasformare le operazioni logiche sui file in operazioni fisiche sul supporto su cui sono memorizzati. 60. Il calcolo degli indirizzi Per trasformare da spazio logico a spazio fisico il calcolo dipende dal tipo di allocazione : Nella allocazione a partizioni statiche o dinamiche il calcolo è dato semplicemente dalla somma dell’indirizzo relativo con l’indirizzo base di caricamento Nella paginazione occorre avere l’indirizzo suddivido in due parti : il numero di pagina e l’offset all’interno della pagina Nella tecnica della memoria segmentata e paginata occorre avere l’indirizzo suddiviso in 3 parti : il numero di segmento, il numero di pagina all’interno del segmento e l’offset all’interno della pagina 61. La frammentazione FRAMMENTAZIONE INTERNA : un processo richiede m parole di memoria e viene caricato in una partizione di dimensione n ( con n>m). Si dice allora che n-m è la frammentazione interna. FRAMMENTAZIONE ESTERNA : se invece una partizione è vuota ed è troppo piccola per i processi in coda si parla di frammentazione esterna. 62. ALLOCAZIONE A PARTIZIONI RILOCABILI Questa tecnica , detta anche della COMPATTAZIONE, elimina la frammentazione esterna rendendo consecutivi tutti i buchi e spostando le aree occupate ; questo sistema per essere possibile ha bisogno della rilocazione dinamica. Gli algoritmi di compattazione sono in genere “costosi” e “raffinati”. 63. L’evoluzione dei SO Dalla nascita dei primi calcolatori ( inizio anni Quaranta) fino all’inizio degli anni Cinquanta gli utenti dovevano gestire l’hardware della macchina perché non c’era il sistema operativo. Questi utenti, oltre a dover scrivere i loro programmi in linguaggio macchina dovevano conoscere perfettamente le caratteristiche dell’hardware impiegato. Si comprese ben presto che occorrevano strumenti opportuni per ridurre il tasso di errore e per accrescere la produttività dell’elaboratore. A determinare la nascita dei primi rudimentali sistemi operativi, avvenuta agli inizi degli anni Cinquanta, è stata la necessità di ridurre i tempi in cui venivano svolti gli interventi manuali : era ormai evidente il divario esistente tra il tempo necessario agli operatori in rapporto al tempo di elaborazione vero e proprio. Nascono i primi sistemi operativi (batch monoprogrammati) che tendono a svincolare il sistema dalle attese improduttive, eliminando gli intervalli tra la fine dell’esecuzione di un programma e l’inizio del successivo. Il sistema operativo deve essere dotato di un programma speciale, sempre residente in memoria centrale, che raccoglie i lavori (job) presentati dagli utenti e li esegue in successione. Nonostante si siano ridotti i tempi di inattività della CPU, essa era ancora poco utilizzata perché rimaneva inattiva durante le operazioni di I/O. Negli anni Sessanta si sviluppano notevolmente le funzioni del sistema operativo che diventa il vero gestore delle risorse software e hardware della macchina. Per sfruttare al massimo la capacità produttiva della CPU è introdotta la multiprogrammazione : mentre un job sta eseguendo un’operazione di I/O, la CPU esegue le istruzioni di un altro programma già caricato in memoria centrale. Con l’introduzione dei videoterminali e quindi di sistemi interattivi che danno la possibilità di colloquiare con il programma durante la sua esecuzione, si sviluppano le procedure che facilitano l’accesso di molti utenti a una stessa unità centrale ( sistemi in time-sharing). Tra gli anni Sessanta e Settanta si sviluppano anche sistemi operativi in real time, capaci di rispondere istantaneamente agli stimoli esterni ( sono ancor oggi usati per il controllo di processi industriali particolarmente delicati dove un ritardo nella risposta può provocare ingenti danni). Dagli Anni Settanta in poi i sistemi operativi si sono evoluti diventando in grado di supportare tecniche sempre più sofisticate per la gestione dei database e dei collegamenti in rete dei calcol