Avanti Indietro Indice

3. Perché RTLinux

Le motivazioni alla base dello sviluppo di RTLinux possono essere comprese esaminando il modo in cui lavora il kernel standard di Linux. Esso separa l'hardware dai task a livello di utente. Il kernel impiega degli algoritmi di scheduling e assegna ad ogni task una certa priorità in modo tale da fornire in media buone prestazioni o alte velocità di trasmissione dati. A questo scopo, il kernel può sospendere un qualsiasi task a livello utente ogni qualvolta tale task abbia esaurito l'intervallo di tempo assegnatogli. Gli algoritmi di scheduling, assieme ai device driver, alle chiamate di sistema non-interrompibili, alla disabilitazione degli interrupt e alle operazioni di memoria virtuale rendono il kernel meno prevedibile. Si può affermare che essi sono i fattori che impediscono ad un task di operare in realtime.

Potreste avere già familiarità con le prestazioni non-realtime, diciamo, per aver ascoltato musica riprodotta usando 'mpg123' o un qualsiasi altro programma del genere. Dopo aver eseguito tale processo per l'intervallo di tempo pre-determinato, il kernel standard di Linux potrebbe decidere di interromperlo per concedere completamente la CPU ad un altro processo (per es. uno che attiva il server X o Nescape). Come conseguenza, la continuità della musica potrebbe andare perduta. In definitiva, nel tentativo di assicurare a tutti i processi un equo bilanciamento del tempo di CPU, il kernel può impedire che certi eventi vengano gestiti.

Un kernel realtime dovrebbe riuscire a garantire il rispetto dei requisiti temporali del processo sottostante. Il kernel RTLinux raggiunge prestazioni realtime eliminando i fattori di imprevedibilità sopra elencati. Possiamo immaginare il kernel RTLinux come posto fra il kernel standard di Linux e l'hardware. Il kernel di Linux è così portato a scambiare lo strato realtime per l'hardware vero e proprio. Ora l'utente può impostare le priorità di ciascun task, oppure introdurne di nuove. L'utente può ottenere una tempistica corretta per i processi giocando con gli algoritmi di scheduling, le priorità, la frequenza di esecuzione, ecc. Il kernel RTLinux assegna la priorità più bassa al kernel standard di Linux. Col metodo esposto i task di utente saranno così eseguiti in realtime.

Le prestazioni realtime sono ottenute intercettando tutti gli interrupt hardware. Solo per quegli interrupt legati a RTLinux viene subito eseguita la routine di servizio appropriata. Tutti gli altri sono trattenuti e, una volta che il kernel RTLinux sia diventato inattivo, sono passati sotto forma di interrupt software al kernel di Linux. L'eseguibile di RTLinux non è di per sè interrompibile.

I task realtime godono di privilegi (hanno accesso diretto all'hardware) e non fanno uso di memoria virtuale. Essi sono scritti come fossero moduli speciali di Linux che possono essere dinamicamente caricati in memoria. Il codice di inizializzazione dei task realtime imposta un apposita struttura dati e informa il kernel RTLinux dei propri requisiti di durata, vita massima e tempi di rilascio.

RTLinux riesce a co-esistere col kernel Linux perché non gli apporta alcun cambiamento. Attraverso una serie di accorgimenti, esso riesce a convertire il kernel Linux esistente in un ambiente hard realtime senza ostacolare i futuri cambiamenti cui Linux sarà soggetto.


Avanti Indietro Indice