In che modo Pi tiene traccia dell'intervallo di tempo?


8

A quanto ho capito, RTC è necessario per tenere traccia del tempo. Tuttavia, Raspberry Pi non lo possiede e utilizza server NTP per sincronizzare l'ora.

Va tutto bene, ma come fa Pi a sapere che è trascorso un millisecondo o un secondo. In che modo Pi è consapevole del passare del tempo?


RTC è davvero lì (con una batteria) per quando il Pi (o qualsiasi processore) è spento.
Polpo,

Il Pi ha un orologio interno che viene impostato da NTP ogni volta che è su Internet, come hai detto. È un software che ne tiene traccia e il successivo passare del tempo, non un RTC assoluto. I comandi standard di Linux possono recuperare tali informazioni ogni volta che è necessario. Quindi, per rispondere alla tua domanda, tutto ciò che "sa" è il momento in cui è stato impostato più di recente, quindi quante zecche da allora. Ecco un interessante articolo sull'argomento. : blog.remibergsma.com/2013/05/12/…
SDsolar,

Risposte:


16

Operazione RTC

Ciò che manca a RaspberryPi è un RTC (Real Time Clock) alimentato a batteria. È un dispositivo che può funzionare indipendentemente dal computer principale e tenere traccia di un tempo che passa anche quando è spento (ecco perché ha la sua batteria). Può funzionare in modo molto semplice: ha un oscillatore di frequenza noto collegato e su ogni impulso dell'oscillatore, incrementerà il suo timer / contatore interno. Poiché la frequenza è nota, è facile calcolare il tempo trascorso in base al contatore. Il dispositivo avrà anche una batteria in modo che possa continuare a funzionare anche quando l'alimentazione esterna è disattivata.

Alcuni dispositivi RTC potrebbero essere più sofisticati. Possono, ad esempio, creare un interrupt in frequenza programmabile o in modalità sveglia (impostato su una determinata ora in futuro o su una certa ora ogni giorno ecc.). Non è rilevante per mantenere l'ora di sistema ed è facoltativo.

Come viene utilizzato RTC

Un computer può chiedere a RTC che ora è (o più precisamente - qual è il suo valore del contatore) all'avvio e impostare la sua data / ora interna in base a questo valore. D'ora in poi, tuttavia, un computer non chiederà a RTC l'ora ogni secondo / milisecondo / microsecondo. Invece, eseguirà il proprio clock (chiamato ora di sistema), di solito usando i propri timer / contatori. Proprio come in RTC, il timer / contatore è sincronizzato con una frequenza nota, quindi è facile calcolare il tempo trascorso.

È possibile forzare il sistema a sincronizzare l'orologio con il dispositivo RTC (in entrambe le direzioni) ma non accadrà fino a quando non verrà richiesto. Alcuni sistemi sono configurati per memorizzare l'ora del sistema in RTC, ad esempio quando si spegne o dopo la sincronizzazione NTP.

Mancanza di RTC

RaspberryPi, come molti computer economici a scheda singola, non ha un dispositivo RTC esterno. Ciò significa che non può chiedere l'ora corrente all'avvio. Ma come già accennato, questo non è un problema se possiamo ottenere la data / ora da un'altra fonte (come NTP). L'unico svantaggio è che a differenza di RTC, non è possibile chiedere NTP all'avvio anticipato (poiché è necessario prima la connessione di rete).

Quindi, per rispondere direttamente alla tua domanda, indipendentemente dal fatto che RaspberryPi (o qualsiasi altro computer) abbia RTC o meno, terrà traccia del tempo utilizzando il dispositivo timer / contatore interno che è disponibile in quasi tutti i sistemi di computer e deve funzionare quasi ogni tipo del sistema operativo.

Tempo in Linux

Le applicazioni dello spazio utente in Linux possono determinare il cosiddetto calendar time(che è un tempo nel mondo reale) usando la gettimeofday()funzione che quindi chiama la clock_gettime()chiamata di sistema. Quello che succede ora è un po 'complicato a causa di molte funzionalità avanzate che il kernel di Linux ha (come spazi dei nomi, ecc.). Ma la base è che il kernel mantiene il suo tempo basato su jiffies. In realtà è solo una variabile all'interno del kernel (generalmente larga 64 bit) che conta il numero di tick dall'avvio del sistema.

Le zecche sono generate dal timer hardware tramite interrupts. jiffiesil valore viene incrementato su ciascuno di questi interrupt. Il timer hardware è configurato per produrre tali interruzioni a intervalli regolari. L'intervallo è configurato all'avvio in base al valore del HZparametro di configurazione del kernel.

In un dato momento, il kernel sa quanti tick sono stati generati dall'avvio ( jiffiesvariabile), sa quanti tick sono generati ogni secondo ( HZopzione di configurazione) in modo da poter calcolare facilmente quanto tempo è trascorso dall'ultimo avvio.

Quindi, per riassumere - il kernel chiede RTCcirca calendar time(chiamato anche wall clock) sul caricamento del sistema in modo che sappia quello che era il tempo effettivo in cui il sistema ha iniziato. Quindi aggiunge jiffies/HZvalore a questo ogni volta che un'applicazione di userspace chiede a che ora sta usando la clock_gettimechiamata di sistema.

Timer hardware / dispositivo contatore

Il timer / contatore hardware è un dispositivo molto semplice. Ha un registro contatori che conta i suoi tick di clock. I tick di clock sono generalmente creati da alcuni esterni oscillator(un circuito elettronico che produce segnali ripetitivi) e sono di frequenza nota (di solito vanno da un paio di kHz a centinaia di MHz). Ciò significa che possiamo facilmente calcolare il tempo trascorso dividendo il valore del contatore per la frequenza dell'oscillatore.

Il dispositivo timer può essere programmato per eseguire varie operazioni: può contare su e giù, confrontare il registro dei contatori con un valore. Ad esempio, può creare un segnale esterno e iniziare il conteggio dall'inizio quando il registro dei contatori ha un valore. In questo modo è possibile configurare il dispositivo timer per creare tale segnale esterno a intervalli costanti con una frequenza molto inferiore rispetto all'oscillatore. Questo segnale può quindi essere utilizzato come evento di interruzione per una CPU.

Si noti che l'oscillatore potrebbe essere utilizzato direttamente al posto del dispositivo timer. Ciò che differenzia il dispositivo timer / contatore dall'oscillatore è che può essere programmato. Quindi puoi pensare al dispositivo timer / contatore come a un oscillatore molto più sofisticato.


Sarebbe stato più utile se fossero stati forniti ulteriori dettagli sul timer interno.
Apple è cresciuto

@AppleGrew: Quali dettagli ti interessano?
Krzysztof Adamski,

Puoi nominare i timer che hai citato? In modo che io possa leggere di più su di loro. Quando google "timer CPU interno", non sembra ottenere nulla di rilevante. Non sono sicuro di cosa spero esattamente di imparare da questo, ma mi sento ancora privo di chiarezza.
Apple è cresciuto

@AppleGrew: ho aggiunto alcune informazioni di base alla mia domanda. Spero che sia di aiuto.
Krzysztof Adamski

A proposito, potresti voler correggere l'errore di battitura - "succhiare" nel terzo paragrafo della sezione "Time in Linux".
Apple è cresciuto

1

Il clock della CPU è derivato da un cristallo. In genere ci si può aspettare 10-20 parti per milione per la precisione dell'orologio (circa 5-10 minuti all'anno)


0

Comunque per rispondere alla domanda in modo molto più semplice insieme alle istruzioni per aggiungere un RTC al tuo PI, inserirò un link qui sotto. A seconda che tu voglia semplicemente un metodo affidabile oltre a usare il modo inet / ntp per dire l'ora o hai bisogno di un metodo molto preciso, ti consiglierei di andare con l'RTC "Chronodot". Altrimenti la scheda di breakout RTC funzionerebbe bene ed è molto facile far funzionare tutto ciò che serve per impostare è I2C per far comunicare l'IP con l'RTC. Link Informazioni / materiali

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.