R eagire ad uno stimolo entro un lasso di tempo predefinito è un requisito fondamentale per un sistema real time. Real time non è sinonimo di velocità di elaborazione ma di determinismo nella risposta fornita dal sistema. La durata dell'intervallo che intercorre dalla rilevazione dello stimolo alla produzione della risposta deve essere prevedibile a priori, quindi impostabile e invariante rispetto al carico computazionale.
Linux e Real Time: un problema dalle diverse soluzioni
Il kernel di linux non è in grado di garantire prestazioni real time a causa del fatto che non è prelazionabile (preemptable). Le difficoltà, in particolare, sono rilevabili, quando il sistema viene sottoposto a stress. Il sistema operativo Linux può essere reso real time attraverso diverse soluzioni. In un caso, si modifica il kernel in modo tale da renderlo prelazionabile, oppure in modo tale da impostare l'esecuzione dello scheduler più frequentemente rispetto al caso standard. Una soluzione più elegante consiste nell'inserire un nuovo kernel, di tipo real time, in grado di prendere il controllo della macchina e far girare Linux come una propria applicazione con priorità più bassa.
La preemption patch del kernel
Attraverso questa modifica, lo scheduler può decidere di togliere ad un processo il controllo della CPU anche quando si trova ad eseguire codice appartenente al kernel. La prelazione non è consentita in qualsiasi parte del kernel ma unicamente in corrispondenza di quelle sezioni in cui l'interruzione può avvenire senza problemi.
La preemption patch è stata integrata nel kernel a partire dalla versione 2.5.4-pre6.
La low-latency patch del kernel
La modifica al kernel spezza i cicli presenti nel codice inserendo chiamate allo scheduler. In questo modo si vanno ad aumentare il numero di punti di prelazione disponibili nel kernel. Come facilmente intuibile, questa patch è meno elegante della precedente, in quanto richiede cambiamenti piuttosto pesanti e diffusi. La low-latency patch dà ottimi risultati (migliori di quelli ottenibili con la preemption patch) rispetto ai tempi di latenza del kernel.
RTAI

Linux viene eseguito come task a priorità più bassa di un kernel real time. Il kernel Linux originario perde il privilegio di poter disabilitare le interruzioni, che vengono, ora, controllate dal kernel real time. Si introduce un nuovo layer tra il kernel Linux e il sistema hardware: RTHAL (Real-Time Hardware Abstraction Layer).
RTHAL racchiude tutti i dati e le funzioni temporalmente critiche del kernel in un’unica struttura:
- Permette di catturare facilmente le funzionalità del kernel (interrupts, system calls, timers) per poterle gestire in accordo a politiche real-time
- Sostituisce le operazioni su strutture originali con operazioni su puntatori RTHAL
- I puntatori RTHAL sono modificabili dinamicamente. Se RTAI non è attivo puntano alle strutture originali di Linux, se RTAI è attivo puntano alle strutture del kernel real-time.
RTHAL non fornisce servizi real-time: ha la sola funzione di intercettare le chiamate al kernel Linux.
Si possono distinguere due modalità di funzionamento:
- RTAI non attivo, Funzionamento normale di Linux
- RTAI attivo, Solo funzionalità real-time possono accedere direttamente all’hardware. Linux è gestito come un processo a bassa priorità.
Essendo RTAI disponibile come modulo kernel di Linux, è caricabile liberamente a sistema avviato. Permette, quindi, di estendere dinamicamente le funzionalità del kernel senza dover essere caricato al boot di sistema.
RTAI permette una gestione dei processi con prelazione, in funzione delle loro priorità. Lo scheduler è configurabile a seconda della specifica combinazione di hardware e requisiti software da soddisfare attraverso l'API messa a disposizione dello sviluppatore.
|