32. Il Sistema Operativo : definizione e struttura Il SO è un insieme di

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