Come modificare il software per diventare in tempo reale? [chiuso]


9

Per la prima volta vorrei menzionare che sono un principiante nella programmazione di sistemi in tempo reale Ecco perché non sono sicuro che le mie domande siano corrette. Scusami ma ho bisogno di aiuto

Domanda in breve: come implementare software in tempo reale per essere sicuri che rispetti le scadenze rigide? È necessario utilizzare alcune funzionalità di QNX? O è abbastanza per scriverlo per Linux, port su QNX e sarà in tempo reale per impostazione predefinita?

Domanda completa: abbiamo implementato alcuni complessi software multiprocesso multipiattaforma con comunicazione tra processi per Linux, Windows, Android e QNX. Il linguaggio di programmazione è C ++, usiamo Boost e un sacco di altre librerie. Il nostro software fa il suo lavoro bene e rapidamente ma è ancora un prototipo. Ai fini della produzione, dobbiamo farlo in tempo reale. Alcune delle nostre funzionalità devono essere in tempo reale e molto robuste perché sono molto importanti e la sicurezza delle persone che usano il nostro software può dipendere da esse. Funzionano abbastanza rapidamente - fino a centinaia di millisecondi. Ma non sono sicuro che il nostro sistema sia realmente in tempo reale per questo motivo (ho ragione?).

Quindi c'è una domanda principale: come modificare il nostro software per essere in tempo reale? Ho cercato su Google molto, ma non ho ancora idea di come farlo.

Alcune informazioni aggiuntive sulle nostre piattaforme: Linux e Windows attualmente utilizziamo solo a scopo di test. Android: non abbiamo ancora deciso se ne abbiamo bisogno. QNX - è il nostro sistema operativo di destinazione per la produzione. Immagino che la risposta alla mia prossima domanda sia "NO" :) Ma è possibile implementare software in tempo reale multipiattaforma (per sistemi operativi in ​​tempo reale (RTOS) e per sistemi operativi generici (GPOS))?

Forse dobbiamo impegnarci per implementare tutte le funzionalità in tempo reale solo per QNX? Ma ancora non capisco come farlo. Qualcuno potrebbe fare luce su questa domanda?


55
Se il tuo progetto è critico per la sicurezza, hai davvero bisogno di qualcuno che capisca i sistemi in tempo reale sul tuo libro paga.
Blrfl,

18
Il sistema in tempo reale è la precisione del tuo codice in termini di tempo di esecuzione, non se sia veloce o lento.
Pagotti,

22
La mia sensazione è che non modifichi un software esistente per diventare in tempo reale, progetti e scrivi da zero un nuovo software, tenendo conto dei vincoli espliciti in tempo reale. E la tua domanda è troppo ampia: cosa sta facendo esattamente il tuo software? Su quale tipo preciso di sistema in tempo reale, per quale tipo concreto di sistema incorporato (quale scopo: l'infotainment in volo su velivoli commerciali non è lo stesso del controllo del reattore nucleare)? Devi modificare la tua domanda per renderla molto più concreta, precisa e motivarla.
Basile Starynkevitch,

24
Rileggi il commento di Blrfl. E poi rileggilo ancora, e ancora, e ancora finché non assumi una persona con la giusta esperienza. Oppure assicurati che la tua assicurazione di responsabilità civile sia pagata. Perché se stai creando un software critico per la sicurezza con requisiti in tempo reale e non hai quell'esperienza, sei negligente.
kdgregory,

4
Hai chiesto: " è possibile implementare software multipiattaforma in tempo reale (per sistemi operativi in ​​tempo reale (RTOS) e sistemi operativi generici (GPOS))? " La mia ipotesi è No, altrimenti i RTOS non lo farebbero esistere. "Cross Platform" è abbastanza simile a "Holy Grail".

Risposte:


38

Veloce non significa in tempo reale e in tempo reale non significa veloce.

In tempo reale significa che la data di consegna del risultato è importante quanto il suo valore. In altre parole, se il risultato ha un valore corretto ma viene consegnato troppo presto o troppo tardi, allora il risultato complessivo è sbagliato.

Ad esempio, pensa a un lettore video. Se i fotogrammi video non vengono visualizzati alla giusta velocità, gli utenti non saranno soddisfatti. Peggio ancora se l'immagine e il suono non sono sincronizzati.

Questo esempio mostra che alcune applicazioni in tempo reale possono essere implementate sugli attuali sistemi operativi generici.

Ma esiste una distinzione tra hard real-time e soft real-time rispetto alle conseguenze di una scadenza mancante: nei sistemi soft-real-time, questo è solo un fastidio o un servizio degradato (pensa a immagini congelate per diversi secondi in l'esempio del lettore video), mentre si tratta di un guasto (potenzialmente catastrofico) in un sistema in tempo reale, come in una centrale nucleare.


Mr. mouviciel, Grazie per aver risposto alla mia domanda Abbiamo bisogno di alcune funzionalità per essere difficili in tempo reale, altre possono essere soft in tempo reale Non capisco come scrivere software per garantire le scadenze? Potresti far luce su questa domanda, per favore?
user172825

7
@ user172825 - Le risposte a questa domanda riguardano gli scaffali delle biblioteche. I punti di partenza possono essere googling "programmazione in tempo reale", articoli di Wikipedia correlati o tutorial di RTOS come QNX o RTEMS.
mouviciel,

È stata la domanda più complicata per me. Ho trovato molti libri di grandi dimensioni su questo argomento. Ma speravo che fosse possibile spiegarlo in un paio di frasi. :)
user172825

5
" Ci sono solo due cose difficili in Informatica: invalidare la cache e denominare le cose. " - Phil Karlton OK, e in tempo reale. Lì, una frase spiega perché non può essere spiegata in due frasi. Ora torniamo alla tua programmazione regolarmente programmata.

1
Trovo che chiamare "tempo deterministico" in tempo reale "difficile" di solito aiuti a far capire la gente.
whatsisname

15

Come già detto da @mouviciel , in tempo reale e veloce sono in realtà due proprietà indipendenti, anche se molte scadenze in tempo reale implicano che è necessaria una risposta relativamente veloce.

Quando si scrive un software in tempo reale, la proprietà più importante accanto a una risposta corretta è che è possibile prevedere con precisione la velocità con cui verrà fornita la risposta. Per le funzionalità in tempo reale, è necessario anche essere in grado di garantire che la scadenza venga rispettata in tutte le condizioni possibili, a meno di un'interruzione di corrente completa.

È possibile trovare fonti tipiche di imprevedibilità

  • Allocazione dinamica della memoria e garbage collection
  • (Priorità più alta) si interrompe
  • Lo scheduler nel sistema operativo
  • Creazione e distruzione dinamiche di oggetti
  • Grandi quantità di codice eseguito in modo condizionale

Non sto dicendo che devi evitare quelle aree (come molto probabilmente non puoi), ma devi essere consapevole di come possono influenzare la facilità con cui puoi prevedere che rispetterai le scadenze in tempo reale per le funzionalità pertinenti.


4
Nel codice eseguito in modo condizionale, fai attenzione agli algoritmi ammortizzati, in cui il più delle volte l'operazione è economica ma può occasionalmente trasformarsi in un'operazione molto più costosa, ad esempio quando un vettore si aggiunge quando è necessario riallocare.
maniaco del cricchetto,

2
In alcuni casi, potrebbe essere necessario eseguire l' analisi WCET , prevedere il tempo di esecuzione al millisecondo
Basile Starynkevitch

3
@ user172825: La profilazione può essere d'aiuto, ma in gran parte dipende dall'esperienza e dalla conoscenza della lingua e delle librerie davvero bene.
Bart van Ingen Schenau,

3
La profilazione potrebbe non essere abbastanza buona se si hanno difficili requisiti in tempo reale. Se il tempo di esecuzione non è del tutto deterministico, la profilazione può darti l'impressione che sarà sempre completata entro la scadenza, quando in realtà rispetta la scadenza solo 99 volte su 100. Se hai un duro requisito in tempo reale, deve incontrarlo 100 volte su 100.
James_pic,

2
@ user172825 In tempo reale è per il software ciò che la chirurgia del cervello è per la medicina - hai bisogno di molta esperienza e abilità per farlo correttamente e devi essere davvero, davvero sicuro di quello che stai facendo. Questi progetti vengono realizzati meglio sotto la supervisione di un professionista qualificato dell'area. Non sono qualcosa che puoi lanciare a uno sviluppatore normale e dire "far funzionare questa cosa come un sistema in tempo reale".
T. Sar

8

Suppongo che la spiegazione in due frasi del tempo reale sia che un sistema in tempo reale è progettato per comprendere e controllare il tempo di risposta nel caso peggiore dagli input che cambiano agli output che cambiano.

Ciò richiede un'analisi che copra l'intero sistema. Diciamo che hai un sistema banale che consiste in una tastiera USB e un servofreno. Quale reattività puoi ottenere con questo sistema? Potrebbe essere necessario considerare:

  • inserire la frequenza di polling e quanto tempo impiega
  • latenza di interruzione dell'input
  • tempo di commutazione del contesto del sistema operativo dopo che si è verificato un evento di input
  • definizione delle priorità del sistema operativo delle attività
  • evitando l'uso di allocazione dinamica o memoria virtuale nel programma, per evitare ritardi di risposta imprevedibili o eventi OOM
  • evitando l'uso della raccolta dei rifiuti
  • evitando l'uso di algoritmi O (n) o peggiori con N alta o imprevedibile (il caricamento di una playlist molto grande nel sistema di intrattenimento della tua auto rallenta la sua risposta in frenata?)
  • considerare la latenza del disco o della rete (ad es. l'uso del bus CAN nelle automobili)
  • latenza di controllo dell'output

In questo tipo di ambiente di solito c'è anche una speciale considerazione per l'affidabilità, come gli standard MISRA C.


È anche vero che essere in tempo reale include la considerazione del fatto che un'operazione sia deterministica, possibilmente ricorsiva o addirittura calcolabile in alcuni casi?

Sì, tutti questi sarebbero "illimitati". Gli algoritmi ricorsivi possono essere consentiti a condizione che il loro utilizzo dello stack abbia un limite superiore imposto su di esso.
pjc50,

5
avoiding use of garbage collection- Questo dovrebbe essere avoiding use of non-deterministic memory management. La garbage collection può essere eseguita in tempo reale e la gestione manuale della memoria non è necessariamente deterministica (vedere l' mallocimplementazione tipica per C).
8
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.