내 시스템에서는 가동 시간이 /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
로부터 PROC 맨 :
/proc/uptime
This file contains two numbers: the uptime of the system
(seconds), and the amount of time spent in idle process
(seconds).
proc 파일 시스템은 의사 파일 세트를 포함합니다. 그것들은 실제 파일이 아니며 단지 파일처럼 보이지만 커널이 직접 제공하는 값을 포함합니다. 와 같은 파일을 읽을 때마다 파일 /proc/uptime
내용이 즉시 재생성됩니다. proc 파일 시스템은 커널에 대한 인터페이스입니다.
파일의 리눅스 커널 소스 코드 fs/proc/uptime.c
의 라인 49 , 당신은 함수 호출을 참조하십시오
proc_create("uptime", 0, NULL, &uptime_proc_fops);
이것은 생성 proc 파일 시스템 엔트리 라고 불리는 uptime
(보통 procfs의 아래에 장착된다 /proc
), 및 유효한 파일이 의사 파일에 대한 조작 및 그와 연관된 기능을 정의하고 그것을 함수를 연관시킨다. 가동 시간의 경우 그것은 단지 read()
와 open()
작업을. 그러나 함수를 다시 추적 하면 가동 시간이 계산되는 여기 가 종료됩니다 .
내부적으로 시스템 가동 시간을 주기적으로 업데이트하는 타이머 인터럽트가 있습니다 (다른 값 제외). 타이머 인터럽트 틱이 발생하는 간격 HZ
은 정확한 값이 커널 구성 파일에 정의되어 컴파일 타임에 적용되는 전 처리기 -macro에 의해 정의됩니다 .
유휴 시간 및 CPU주기 수와 빈도 HZ
(초당주기)는 마지막 부팅 이후 수 (초)로 계산할 수 있습니다.
질문을 해결하려면 : "가동 시간"은 언제부터 시작됩니까?
가동 시간은 커널 내부 값이므로 매주기마다 작동하므로 커널이 초기화 될 때 계산을 시작합니다. 즉, 첫 번째 사이클이 종료 된 시점입니다. 부트 로더가 커널 이미지에 제어권을 부여한 직후에 어떤 것이 든 마운트되기 전에도.