Di sistem saya ia mendapat uptime dari /proc/uptime
:
$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY) = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY) = 4
10:52:38 up 3 days, 23:38, 4 users, load average: 0.00, 0.02, 0.05
Dari halaman proc :
/proc/uptime
This file contains two numbers: the uptime of the system
(seconds), and the amount of time spent in idle process
(seconds).
Sistem file proc berisi satu set file pseudo. Itu bukan file nyata, mereka hanya terlihat seperti file, tetapi mereka berisi nilai-nilai yang disediakan langsung oleh kernel. Setiap kali Anda membaca file, seperti /proc/uptime
, isinya dibuat ulang dengan cepat. Sistem file proc adalah antarmuka ke kernel.
Dalam kode sumber kernel linux file fs/proc/uptime.c
di baris 49 , Anda melihat panggilan fungsi:
proc_create("uptime", 0, NULL, &uptime_proc_fops);
Ini menciptakan entri sistem file proc yang disebut uptime
(procfs biasanya di-mount di bawah /proc
), dan mengaitkan suatu fungsi padanya, yang mendefinisikan operasi file yang valid pada file pseudo itu dan fungsi yang terkait dengannya. Dalam hal uptime, itu hanya read()
dan open()
operasi. Namun, jika Anda melacak kembali fungsi Anda akan berakhir di sini , di mana uptime dihitung.
Secara internal, ada timer-interupt yang memperbarui uptime sistem secara berkala (selain nilai-nilai lainnya). Interval, di mana timer-interupt ticks, ditentukan oleh preprocessor-macro HZ
, yang nilai pastinya didefinisikan dalam file konfigurasi kernel dan diterapkan pada waktu kompilasi.
Waktu idle dan jumlah siklus CPU, dikombinasikan dengan frekuensi HZ
(siklus per detik) dapat dihitung dalam jumlah (detik) sejak boot terakhir.
Untuk menjawab pertanyaan Anda: Kapan "waktu aktif" mulai dihitung?
Karena uptime adalah nilai internal kernel, yang menandai setiap siklus, ia mulai menghitung ketika kernel telah diinisialisasi. Yaitu, ketika siklus pertama telah berakhir. Bahkan sebelum apa pun di-mount, langsung setelah bootloader memberi kendali pada gambar kernel.