在Linux上,“正常运行时间”何时开始计时?

我的电脑说:

$uptime
 10:20:35 up  1:46,  3 users,  load average: 0,03, 0,10, 0,13

如果我最后检查,我看到:

reboot   system boot  3.19.0-51-generi Tue Apr 12 08:34 - 10:20  (01:45)    

然后我检查:

$ls -l /var/log/boot.log 
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log

然后我在/ var / log / syslog中看到今天的第一行是:

Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start

所以所有这些似乎都集中在我的机器启动时间的8:34.

但是,我想知道:正常运行时间使用的确切时间是多少?正常运行时间是启动和检查某个文件的过程还是硬件上的某些内容?

我正在运行Ubuntu 14.04.

解决方法:

在我的系统上,它从/ 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 manpage

06001

proc文件系统包含一组伪文件.这些不是真正的文件,它们看起来像文件,但它们包含由内核直接提供的值.每次读取文件(例如/ proc / uptime)时,其内容都会即时重新生成. proc文件系统是内核的接口.

line 49的文件fs / proc / uptime.c的linux内核源代码中,您会看到一个函数调用:

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

这将创建一个称为正常运行时间的proc filesystem entry(procfs通常安装在/ proc下),并将一个函数与它相关联,该函数定义该伪文件上的有效文件操作以及与它们相关的函数.在正常运行时间,它只是read()和open()操作.但是,如果您追溯功能,则最终将计算here,即计算正常运行时间.

在内部,有一个定时器中断,定期更新系统正常运行时间(除了其他值).计时器中断滴答的时间间隔由预处理器 – 宏HZ定义,其精确值在内核config file中定义并在编译时应用.

空闲时间和CPU周期数与频率HZ(每秒周期数)相结合可以计算自上次启动以来的数量(秒).

解决您的问题:“正常运行时间”何时开始计时?

由于正常运行时间是一个内核内部值,它在每个周期都会加速,因此它会在内核初始化时开始计数.也就是说,当第一个周期结束时.甚至在安装任何东西之前,直接在引导加载程序控制内核映像之后.

上一篇:Linux中查看cpu、磁盘、内存、网络的命令


下一篇:Duilib非官方更新贴~