È necessario un orologio in tempo reale (RTC) per i sistemi in tempo reale? [chiuso]


11

Supponendo che stiamo lavorando su un sistema Linux in tempo reale e un hardware costituito da timer ad alta risoluzione, avere un RTC influisce sulla tempestività reale del sistema?

Qui dice che riduce l'utilizzo della CPU e della memoria, ma c'è un modo per confrontare la differenza in qualche modo?


12
Il confronto nel link è semplicemente stupido.
pipe

9
Sì, @pipe, e soprattutto, anche i numeri sono totalmente sbagliati. Comprerò volentieri il chip RTC DS12C887 con "1 sec di errore in 100 anni". In effetti, comprerò tanti quanti i miei risparmi mi permettono di acquistare. Questa è una precisione di 300 ppm. Oltre 100 anni. Questa è una vera bontà di frequenza proprio lì.
Marcus Müller,

8
I sistemi in tempo reale e l'orologio in tempo reale sono cose diverse e non c'è paragone. RTC è per il mantenimento del tempo e il sistema in tempo reale viene utilizzato per servire scopi in tempo reale (non come in UTC, ma come in rapidità)
MaNyYaCk


3
@JimmyB Orologi come questo sono per il tempismo , non per il tempo ! Anche se hai un'epoca di riferimento, generalmente la impostiamo su TAI (o GPS) e applichiamo la correzione UTC pertinente quando abbiamo bisogno di UTC. Nel caso del GPS questo parametro di correzione deriva da effemeridi. UTC è una sorta di "fuso orario" in quel senso - allo stesso modo non resetti l'orologio quando entra in vigore l'ora legale e aspetti che si stabilizzi nuovamente - non c'è nulla da resettare, perché l'orologio ti dà impulsi, non un timestamp.
Razze di leggerezza in orbita

Risposte:


39

L'articolo che hai collegato è semplicemente completo e totalmente privo di senso. Il "tempo reale" in "orologio in tempo reale" (come è usato per riferirsi al tipo di dispositivo hardward descritto nell'articolo) e il "tempo reale" in "sistemi in tempo reale" sono termini completamente diversi. Il primo significa memorizzare il tempo corrente del calendario (di solito una sua approssimazione molto scarsa, al contrario di un'alta precisione come l'articolo collegato rivendicato) e farlo avanzare senza alimentazione esterna, usando una batteria a bottone / moneta a lunga durata. Quest'ultimo significa rispondere agli eventi con forti limiti di latenza dal momento dell'evento al momento della risposta.

Alcune altre parti dell'articolo, per stabilire che dovrebbe essere considerato inaffidabile:

Quasi trascurabile. Dell'ordine di 1 secondo in 100 anni

1 secondo in 100 anni è di circa 317 ppt (sì, sono parti per trilione ). Non è possibile ottenere quel tipo di stabilità dell'orologio con nessuna tecnologia di orologio disponibile in commercio. Anche portarlo a 1 secondo all'anno richiederebbe almeno un OCXO che richiede un forno ad alta potenza, sempre acceso, che regola la temperatura. L'idea che potresti ottenerlo con un dispositivo alimentato da una batteria a lunga durata è ridicola.

sistemi in tempo reale come orologio digitale, sistema di presenza, fotocamera digitale

Nessuno di questi è ciò che uno chiamerebbe sistemi in tempo reale.


1
In realtà quei sistemi molto probabilmente hanno componenti in tempo reale, anche se "soft real-time" perché le conseguenze della mancanza / superamento di un tick di elaborazione sono piccole. Tuttavia, non nel senso sbagliato del pensiero dell'autore del collegamento.
Graham,

2
@Graham: In un certo senso lo fanno, ma i margini sono così enormi che generalmente li pensi come non in tempo reale. Alla fine qualsiasi sistema interattivo è in tempo reale se estendi la definizione abbastanza lontano perché quando non reagisce per minuti o ore, qualcuno supporrà che sia andato in crash. :-) Quindi penso che sia utile classificare qualcosa come "in tempo reale" quando ci sono piccoli margini e gravi conseguenze per la loro mancanza.
R .. GitHub smette di aiutare ICE il

3
@R .. Non tutti i sistemi sono in tempo reale, anche con margini enormi. Se un sistema è in grado di rimanere sospeso indefinitamente, non può essere un sistema in tempo reale. I sistemi devono avere garanzie assolute che un periodo di tempo richiederà solo un periodo di tempo finito e un blocco (deadlock / livelock) è, per definizione, infinito.
foresta,

2
Tuttavia, una meta-discussione su cosa sia esattamente un sistema in tempo reale non appartiene alla sezione dei commenti.
pipe il

1
@Uwe: In effetti l'ho incasinato, ma ora che lo guardo di nuovo penso di essere fuori da 2 fattori di 10 - non dovrebbe essere 0.316ppb? Immagina come 1s / (100 * secs_per_year) dove secs_per_year = 31556952.
R .. GitHub FERMA AIUTANDO ICE

39

I sistemi in tempo reale sono qualcosa che risponde a un evento / stimolo interno o esterno in un tempo specificato e che il tempo è di solito in milli o micro secondi. Ha bisogno di timer di piccola precisione piuttosto che RTC.

E la risposta alla tua domanda è No, non influenzerà la reale tempestività del sistema.


1
Questo è breve e al punto risponde alla domanda IMO.
Rev1.0

Alcune entità federali come le banche usano RTC 1ns nei loro server, basati su orologi atomici. Anche un accenno di manomissione dei loro collegamenti a microonde cambierà il tempo di transito verso il ricevitore. Il RTC veloce è ottimo anche per i semafori multifase.
Sparky256

4
Alcuni sistemi in tempo reale non hanno bisogno di un timer in quanto sono interamente guidati da eventi e non è necessario che nessuno degli eventi sia basato sul tempo. Il sistema deve solo rispondere a ciascun evento entro il periodo di tempo assegnato per quell'evento, anche quando si verificano più eventi molto vicini tra loro. In alcuni casi, potrebbe essere necessario un kernel preventivo. È possibile utilizzare timer esterni per convalidare il funzionamento del sistema entro i limiti di tempo.
rcgldr,

2
Se desideri un esempio reale, il sistema operativo OS-9 di MicroWare per i processori Motorola 6809 / Hitachi 6309 è un sistema operativo in tempo reale. La serie Tandy Color Computer utilizzava 6809 e utilizzava OS-9 (la mia prima esposizione a un sistema operativo simile a * nix) e gli orologi in tempo reale non erano mai attrezzature standard su quel sistema e non erano necessari per il funzionamento di OS-9.
zmerch,

3

Se il sistema non è in linea dopo il ripristino e dispone di RTC, sarà in grado di inserire le date appropriate nei registri. I registri potrebbero essere enormi nel caso in cui sia necessario esaminarli e avere un timestamp errato renderà pazzi te, i tuoi sviluppatori e clienti di software e, in generale, un'indagine quasi impossibile.

Facile o difficile, basso o alto nell'articolo a cui ti riferisci è una specie di opinione personale. È difficile e costoso se non l'hai mai fatto prima e non hai requisiti di sistema chiari e una dichiarazione di lavoro; ed è facile ed economico quando sai cosa ti serve e qual è il miglior dispositivo da utilizzare.


La domanda è come quantificare il tempo CPU ridotto e l'utilizzo della memoria di un RTC rispetto a nessun RTC in un sistema in tempo reale. La tua risposta non risponde.
pipe il

1
@pipe Dipende dall'architettura e dai requisiti della CPU. Semplicemente non è possibile rispondere con scarse informazioni fornite. La mia risposta dice perché RTC deve essere presente al posto del generico bla-bla su come potrebbe essere senza esso. Il programmatore e l'architetto di sistema possono progettare un buon sistema e un codice e un cattivo sistema e un codice in termini di tempo impiegato per i tempi.
Anonimo

3

Questo sembra essere un problema di terminologia che circonda l'uso del termine "tempo reale".

Orologio in tempo reale

Un orologio in tempo reale è un dispositivo per il cronometraggio stabile / accurato (entro una certa tolleranza), in modo che il sistema host possa utilizzarlo per associare eventi / azioni all'ora e alla data dell'evento.

Puoi pensare a un orologio in tempo reale analogo alle viscere di un orologio digitale interfacciato al computer. Ha un riferimento temporale alimentato in modo indipendente progettato per essere stabile e ragionevolmente preciso. Come un orologio digitale, non perderà traccia dell'ora corrente solo perché il computer host è stato spento. Gli orologi in tempo reale sono stati montati sui computer principalmente per comodità, in modo che l'utente non debba reinserire l'ora e la data correnti ogni volta che si avvia il sistema o effettuare frequenti regolazioni per compensare la deriva.

L'alternativa a un orologio in tempo reale sarebbe quella di utilizzare software e timer interni guidati dall'orologio di sistema. Tale approccio è praticabile (il PC IBM originale funzionava in questo modo), ma non è particolarmente stabile; perderà inoltre traccia della data / ora in qualsiasi momento in cui il sistema operativo viene arrestato, bloccato o bloccato.

Sistema in tempo reale

Quando il termine "tempo reale" viene applicato a un sistema informatico o a un'applicazione, descrive un sistema che risponde agli eventi del mondo reale in un tempo molto breve e deterministico, spesso solo pochi millisecondi, a volte meno, con un ordine definito di ingressi simultanei. I sistemi in tempo reale sono usati per cose come il controllo delle macchine: robotica, simulazioni e giochi. Sebbene un'applicazione in tempo reale possa utilizzare le informazioni sull'ora e sulla data attuali, un'applicazione non è "in tempo reale" solo perché utilizza l'ora e la data correnti.

Orologi in tempo reale vs timer ad alta risoluzione

Come indicato sopra, lo scopo di un orologio in tempo reale è di tenere traccia in modo affidabile della data e dell'ora correnti, generalmente solo al secondo; una buona avrà una deriva minima (secondi guadagnati o persi ogni giorno). Gli orologi in tempo reale generalmente non hanno alta risoluzione; i loro clock di base spesso funzionano abbastanza lentamente rispetto ai moderni clock della CPU; questo per ridurre al minimo il consumo di energia (consumo della sua fonte di alimentazione indipendente) in modo che l'orologio continui a mantenere il tempo in modo affidabile se il computer host viene spento per un lungo periodo.

Un timer ad alta risoluzione non riguarda l'ora o la data attuali; il suo scopo è misurare gli intervalli di tempo con una certa precisione, forse microsecondi o anche meno. A tale scopo, deve essere basato su un clock stabile e ad alta frequenza, in genere l'orologio del sistema informatico. Anche i timer ad alta risoluzione non sono in genere interessati alla deriva per lunghe durate, poiché lo scopo abituale è la misurazione del tempo su brevi durate. I timer ad alta risoluzione non hanno lo stesso problema di consumo energetico degli orologi in tempo reale perché non hanno un lavoro da svolgere mentre il computer host è spento.


Come un piccolo inconveniente, il "[...] più breve possibile" non è considerato in tempo reale. Il tempo reale è la risposta in tempo deterministico o con un ordine definito se si verificano più eventi contemporaneamente.
awjlogan,

2

Nella maggior parte dei sistemi, l'unico vero vantaggio di una periferica RTC rispetto ad altre forme di mantenimento del tempo è che le misurazioni del tempo dell'RTC non saranno influenzate quando il resto del sistema andrà in sospensione o - in alcuni casi - sarà completamente spento. Molte periferiche RTC sono infatti progettate in modi che le renderebbero poco pratiche per la maggior parte degli scopi diversi dalla registrazione dell'ora del giorno approssimativa. Molte periferiche RTC (probabilmente una maggioranza ma forse non una maggioranza), ad esempio, sono limitate al tempo di segnalazione in incrementi di un secondo e molte volte richiedono almeno l'attesa di occupato per la sincronizzazione quando si imposta un allarme o - in alcuni casi, anche semplicemente provando a leggere l'ora. Di conseguenza, il modo normale di utilizzare un RTC è semplicemente copiare il suo valore su un orologio più utile all'avvio, impostarlo ogni volta che viene impostato il "tempo della parete",

e ogni quattro letture consecutive sarebbero garantite per contenerne due corrispondenti (e quindi corrette) a meno che non trascorra più di 1/32768 di secondo tra il primo e l'ultimo. L'impostazione dell'allarme può generare eventi di sveglia falsi, ma la sequenza:

  • disabilita l'interrupt dal latch di sveglia
  • impostare il tempo di sveglia per un massimo di 0x7FFFFFFF tick (circa 9 ore) prima del presente
  • resettare il circuito di sveglia
  • leggi l'orologio
  • se il tempo appena letto indica che è stato raggiunto l'orario di sveglia, agire in modo appropriato
  • abilita l'interrupt dal latch di sveglia

dovrebbe gestire tutti i casi limite in modo sufficientemente facile da essere adatto per un uso generico di tempo. Sfortunatamente, per qualsiasi motivo, le periferiche RTC non sono mai state progettate in questo modo, ma sono invece più complicate e meno utili.


I RTC "reali" forniscono anche funzionalità di calendario (giorno del mese, giorno della settimana, anni bisestili, ...), che può essere complicato da implementare nel software.
JimmyB,

@JimmyB: Il software che deve fare qualcosa di non banale con date e orari generalmente includerà comunque tale logica e essere in grado di mantenere le cose in formato lineare tranne quando eseguire l'I / O dell'utente sarebbe molto più pulito del dover convertirsi dall'inutile BCD YMDhms a tempo lineare ogni volta che legge l'RTC e si converte in inutile fromat durante la scrittura.
supercat

@JimmyB: Come semplice esempio, se si dovesse alimentare il sistema in quello che sembrava essere il 01-03-2016 00:30, ed è stato acceso l'ultima volta il 01-01-2015 alle 00:30:00, cosa tempo sarebbe? Il software dovrebbe sapere che febbraio ha avuto 29 giorni nel 2016 per determinare che l'ora era 29-02-2015 23:30:00, quindi cosa compra esattamente l'hardware del calendario?
supercat

Il chip RTC indicato nell'OP gestisce da solo gli anni bisestili.
JimmyB,

"Software che deve fare qualcosa di non banale con date e orari" Certo. Ma un RTC è solo un orologio . Ti dice che ore sono quando lo chiedi, non calcola la tua età in secondi per te. Quindi, se si desidera timestamp delle voci del registro, RTC è tutto ciò che serve e non sarà necessario affrontare alcun tipo di data / ora matematica. Se vuoi fare calcoli arbitrari a volte non ti è molto utile.
JimmyB,

0

Penso che la ragione principale per un orologio in tempo reale sia l'ora esatta fino ad un certo intervallo. L'orologio normale è di solito rifinito con condensatori e può avere maggiori discrepanze sulla frequenza in base a una vasta gamma di fattori forse fuori controllo come capacità / resistenza sintonizzate erroneamente del circuito di temporizzazione dell'orologio, incertezza nella tempistica dell'orologio in uso che serve allo scopo del duello per le prestazioni, così come spesso c'è una logica programmabile per dividere i tempi che di nuovo possono introdurre errori.

Di solito l'RTC può avere timer e cani da guardia, ecc. Accoppiati ad esso, dando la garanzia o una buona ipotesi che a intervalli regolari e precisi che possono anche rimanere in fase con varie cose o procedure verranno eseguiti codici. Non puoi ottenerlo facilmente con un normale orologio. Oppure devi essere molto attento nella produzione che l'orologio sia accurato. Puoi vedere cose come l'audio e ciò che potrebbe non essere necessario utilizzare l'RTC invece dell'orologio di sistema ad alta velocità.

Per quanto riguarda esattamente ciò che significa RTC, non posso dirlo con certezza. So che Linux è uno strumento diffuso nel mondo embedded, tuttavia non sono sicuro che funzioni bene per tutte le applicazioni in tempo reale. Il multithreading può rendere i tempi di esecuzione non deterministici, tuttavia quando l'hardware supera notevolmente i requisiti di prestazione molte soluzioni funzioneranno bene anche in applicazioni in tempo reale.

Quindi ci sono applicazioni mission-critical e basse prestazioni. Una cosa desiderabile qui è la soluzione deterministica e spesso di complessità inferiore. Qui l'RTC può essere utilizzato ovviamente. Linux può fornire un accesso speciale agli interrupt associati ad esso. Mi sembra che in tempo reale deterministico tu abbia bisogno non solo di un RTC, ma di interruzioni o os Accesso ad essi.


In che modo esattamente l'accoppiamento di un RTC a un cane da guardia può garantire che l'orologio rimanga "in fase con varie cose"?
Dmitry Grigoryev il

Va bene se usi una sorgente di clock esterna sei dipendente da quella sorgente, così come dai circuiti che la collegano come capacità e resistenza o impedenza. Quindi questo è descritto dall'oscillazione armonica la cui soluzione è un'onda e quindi vedere l'angolo di fase ecc., Così come l'applicazione del microprocessore per rispondere a tutto ciò che hai appena chiesto. Tutta questa roba purtroppo deve essere presa in considerazione in molte applicazioni.
Maresciallo artigianale

0

Avrai bisogno di un orologio in tempo reale se fai affidamento su comunicazioni sicure con altri computer su Internet (non è necessario il 100%, ma se non hai un riferimento orario locale devi fidarti di qualcos'altro e puoi " fidarsi dei certificati se non si conosce la data).

Quindi no, non ne hai bisogno per tutti i sistemi "in tempo reale". Tuttavia, a seconda della propria applicazione, è possibile che si desideri comunque un RTC come il modo più efficiente dal punto di vista energetico per ottenere una buona soluzione di tempo dopo essere in uno stato di basso consumo.


Questo non è del tutto vero. Ad esempio, puoi fidarti di un certificato (specialmente se bloccato) anche se è scaduto o teoricamente è stato emesso in quello che sembra essere il futuro. Tuttavia è generalmente un'idea migliore ottenere la tua correzione NTP prima di provare a essere un client SSL; naturalmente gli schemi di sicurezza per NTP devono essere progettati per funzionare senza la necessità di iniziare con una ragionevole idea del tempo.
Chris Stratton,

3
Esageratamente esagerato e mentre l'esagerazione è una cosa commovente e bella, se forma il messaggio principale, allora è sbagliato. Nessuna delle modalità operative delle cifre richiede fondamentalmente l'ora o la data.
Paul Uszak,
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.