GNU/Linux >> Belajar Linux >  >> Linux

Di Linux, kapan uptime mulai dihitung?

Di sistem saya ini mendapatkan 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 manual 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 sekumpulan file semu. Itu bukan file asli, mereka hanya terlihat seperti file, tetapi mengandung 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 dari file fs/proc/uptime.c pada baris 49, Anda melihat pemanggilan fungsi:

proc_create("uptime", 0, NULL, &uptime_proc_fops);

Ini membuat entri sistem file proc yang disebut uptime (procfs biasanya dipasang di bawah /proc ), dan mengaitkan fungsi ke dalamnya, yang menentukan operasi file yang valid pada file palsu tersebut dan fungsi yang terkait dengannya. Dalam hal waktu aktif, hanya read() dan open() operasi. Namun, jika Anda menelusuri kembali fungsinya, Anda akan berakhir di sini, tempat waktu aktif dihitung.

Secara internal, ada timer-interupt yang memperbarui waktu aktif sistem secara berkala (selain nilai lainnya). Interval, di mana timer-interupsi berdetak, ditentukan oleh preprocessor-macro HZ , yang nilai persisnya ditentukan dalam file konfigurasi kernel dan diterapkan pada waktu kompilasi.

Waktu idle dan jumlah siklus CPU, digabungkan dengan frekuensi HZ (siklus per detik) dapat dihitung dalam jumlah (detik) sejak booting terakhir.

Untuk menjawab pertanyaan Anda:Kapan "waktu aktif" mulai dihitung?

Karena uptime adalah nilai internal kernel, yang berdetak setiap siklus, ia mulai menghitung ketika kernel telah diinisialisasi. Yaitu, ketika siklus pertama telah berakhir. Bahkan sebelum apa pun dipasang, langsung setelah bootloader memberikan kontrol ke imej kernel.


Sejauh yang saya tahu, uptime menggunakan /proc/uptime untuk menghitung uptime sistem. Anda dapat melihatnya lebih jelas di source code uptime.c

  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }

Pada sistem UNIX standar (berdasarkan sumber asli *), uptime membaca /var/adm/utmpx dan memeriksa entri reboot terakhir kali.

Dengan kata lain:ini mengambil tanggal yang juga Anda dapatkan dengan who -b lalu menghitung waktu sejak saat itu.

*) uptime adalah tautan ke w program dan diperkenalkan oleh BSD sekitar tahun 1980.


Linux
  1. Linux – Otomatis Ya Untuk Diminta Saat Menginstal Paket Di Alpine Linux?

  2. Linux – Arch Linux :Pacman Tidak Berfungsi Saat Chroot?

  3. Linux – Bagaimana Cara Menjalankan Bootloader Dari Linux?

  1. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?

  2. Perangkat Android Emulator mogok saat memulai di Android Studio (Linux)

  3. Apakah mungkin untuk mensimulasikan tanpa akses eksternal dari mesin Linux saat mengembangkan?

  1. Cara Mempercepat Proses Kompilasi Saat Menginstal Paket Dari AUR

  2. Linux – Bagaimana Memulai Partisi Windows Dari Baris Perintah Grub?

  3. Instal Linux dari Linux