Operasi RTC
Kekurangan RaspberryPi adalah RTC yang didukung baterai (Real Time Clock). Perangkat itu dapat bekerja secara independen dari komputer utama dan melacak waktu yang berlalu meskipun saat dimatikan (inilah sebabnya ia memiliki baterai sendiri). Ini dapat bekerja dengan cara yang sangat sederhana - ia memiliki osilator frekuensi yang diketahui terhubung dan pada setiap pulsa osilator, ia akan menambah timer / penghitung internal. Karena frekuensi diketahui, mudah untuk menghitung waktu yang berlalu berdasarkan penghitung. Perangkat juga akan memiliki baterai sehingga dapat terus bekerja bahkan ketika daya eksternal mati.
Beberapa perangkat RTC mungkin lebih canggih. Mereka dapat, misalnya, membuat interupsi dalam frekuensi yang dapat diprogram atau dalam mode alarm (diatur ke waktu tertentu di masa depan atau ke waktu tertentu setiap hari, dll). Ini tidak relevan untuk menjaga waktu sistem dan bersifat opsional.
Bagaimana RTC digunakan
Komputer dapat menanyakan RTC jam berapa sekarang (atau lebih tepatnya - berapa nilai penghitungnya) pada waktu boot dan menetapkan tanggal / waktu internal berdasarkan nilai ini. Mulai sekarang, bagaimanapun, komputer tidak akan meminta RTC untuk waktu setiap detik / milidetik / mikrodetik. Sebagai gantinya, ia akan menjalankan jamnya sendiri (disebut waktu sistem), biasanya menggunakan timer / penghitungnya sendiri. Sama seperti di RTC, timer / penghitung clock dengan frekuensi yang dikenal sehingga mudah untuk menghitung waktu berlalu.
Anda dapat memaksa sistem Anda untuk menyinkronkan jamnya dengan perangkat RTC (di kedua arah) tetapi itu tidak akan terjadi sampai diminta. Beberapa sistem dikonfigurasikan untuk menyimpan waktu sistem dalam RTC ketika mematikan atau setelah sinkronisasi NTP, misalnya.
Kekurangan RTC
RaspberryPi, seperti banyak komputer papan tunggal murah, tidak memiliki perangkat RTC eksternal. Ini berarti tidak dapat meminta waktu saat ini saat boot. Tetapi seperti yang telah disebutkan - ini bukan masalah jika kita bisa mendapatkan tanggal / waktu dari sumber lain (seperti NTP). Satu-satunya kelemahan adalah bahwa tidak seperti RTC, Anda tidak dapat meminta NTP pada boot awal (karena Anda pertama kali membutuhkan koneksi jaringan).
Jadi untuk langsung menjawab pertanyaan Anda - tidak peduli apakah RaspberryPi (atau komputer lain) memiliki RTC atau tidak, itu akan melacak waktu menggunakan timer / alat penghitung internal yang tersedia di hampir setiap sistem komputer dan diharuskan menjalankan hampir semua jenis komputer sistem operasi.
Waktu di Linux
Aplikasi userspace di Linux dapat menentukan apa yang disebut calendar time
(yang merupakan waktu di dunia nyata) menggunakan gettimeofday()
fungsi yang kemudian memanggil panggilan clock_gettime()
sistem. Apa yang terjadi sekarang sedikit rumit karena banyak fitur canggih yang dimiliki kernel Linux (seperti namespaces dll). Tetapi dasarnya adalah bahwa kernel mempertahankan waktunya berdasarkan jiffies
. Ini sebenarnya hanya variabel di dalam kernel (biasanya lebar 64bit) yang menghitung jumlah kutu sejak sistem dimulai.
Kutu dihasilkan oleh pengatur waktu perangkat keras dengan interrupts
. jiffies
nilai bertambah pada setiap interupsi tersebut. Pengatur waktu perangkat keras dikonfigurasikan untuk menghasilkan interupsi seperti itu secara berkala. Interval dikonfigurasikan pada saat boot sesuai dengan nilai HZ
parameter konfigurasi kernel.
Pada waktu tertentu, kernel tahu berapa banyak tick yang dihasilkan dari boot ( jiffies
variabel), ia tahu berapa banyak tick yang dihasilkan setiap detik ( HZ
opsi konfigurasi) sehingga dapat dengan mudah menghitung berapa banyak waktu yang dilewati dari boot terakhir.
Jadi untuk meringkas - kernel bertanya RTC
tentang calendar time
(juga disebut wall clock
) pada saat boot sehingga ia tahu apa waktu sebenarnya ketika sistem dimulai. Itu kemudian menambahkan jiffies/HZ
nilai untuk ini setiap kali aplikasi userspace bertanya berapa kali menggunakan clock_gettime
panggilan sistem.
Perangkat penghitung waktu / perangkat keras
Timer / penghitung perangkat keras adalah perangkat yang sangat sederhana. Ia memiliki register penghitung yang menghitung detak jamnya. Kutu jam biasanya dibuat oleh beberapa eksternal oscillator
(sirkuit elektronik yang menghasilkan sinyal berulang) dan memiliki frekuensi yang diketahui (biasanya berkisar dari beberapa kHz hingga ratusan MHz). Ini berarti bahwa kita dapat dengan mudah menghitung berapa banyak waktu berlalu dengan membagi nilai penghitung dengan frekuensi osilator.
Perangkat pengatur waktu dapat diprogram untuk melakukan berbagai hal - dapat menghitung ke atas dan ke bawah, membandingkan penghitung register dengan beberapa nilai. Misalnya dapat membuat sinyal eksternal dan mulai menghitung dari awal ketika register register bernilai tertentu. Dengan cara ini Anda dapat mengkonfigurasi perangkat timer untuk membuat sinyal eksternal pada interval konstan yang jauh lebih rendah daripada frekuensi osilator. Sinyal ini kemudian dapat digunakan sebagai acara interupsi untuk CPU.
Perhatikan bahwa osilator dapat digunakan secara langsung sebagai ganti perangkat penghitung waktu. Yang membedakan alat penghitung waktu / penghitung dari osilator adalah ia dapat diprogram. Jadi Anda dapat menganggap timer / alat penghitung sebagai osilator yang jauh lebih canggih.