SISTEMI IN TEMPO REALE
sono di 2
tipi:
SISTEMI REAL-TIME HARD
hard
= con vincoli che devono essere rispettati (es. ABS automobile);
utilizzano sistemi dedicati, non time-sharing e non multi-tasking (o
almeno questo è preferibile)
se
vogliamo il multi-tasking in questi sistemi dobbiamo utilizzare delle
tecniche particolari:
SISTEMI REAL-TIME SOFT
soft
= i processi real-time possono coesistere con processi non real-time;
utilizzano:
scheduling
a priorità
processi
real-time con priorità statica
poca
latenza nel dispatch dei processi real-time
in
particolare i sistemi real-time soft si distinguono fra dotati di
kernel preemptible e non
KERNEL NON INTERROMPIBILE
nel
momento in cui processo real-time richiede la CPU manda interrupt; il
kernel se ha un processo in esecuzione lo interrompe (linea
ondeggiata = intervento del kernel)
se la
richiesta arriva nel pezzo ondeggiato con questo tipo di kernel siamo
obbligati a introdurre una latenza sul processo real-time; l'unica
cosa che possiamo fare è ridurre il più possibile tale
latenza

qui ho il
problema di ridurre le latenze del sistema (dischi ecc.)
KERNEL INTERROMPIBILE
con
questo tipo di kernel posso interrompere l'I/O, ma sorge un problema:
se io stavo manipolando una struttura dati e il processo real-time
che interviene ha bisogno di quella struttura, potrei avere delle
conseguenze indesiderate provocate da una lettura di dati non
corretti)
con
opportuni accorgimenti e comunque possibile realizzare un kernel di
questo tipo funzionante, ma è molto complesso

qui ho il
problema di mantenere la coerenza delle strutture dati
|