一般来说,我试图理解uptime
(以及许多 order 命令)显示的数字:
$ uptime
13:40:52 up 18 days, 2:10, 8 users, load average: 0.20, 0.30, 0.64
在这里,我的系统前一分钟间隔的平均负载是0.2。在一个非常高的水平上,这个数字告诉我,在采样期间平均而言,0.2过程被认为是生产加载对于系统[2]。
我知道一个进程可以处于许多不同的状态。但我对三个主要状态只有坚定的理解:
- 该进程正在 CPU 上进行工作。
- 过程可以正在立即工作,但没有空闲的 CPU。
- 该进程正在等待系统内部或外部发生某些事情。
我认为最后一个状态是需要更仔细地观察的,因为我非常确定前两个状态中的进程总是被计入系统的进程中。加载。我可以想象系统可能会做一些事情来进入最后的状态:
- 呼唤
sleep()
。 - 调用
read()
不在缓存中的打开文件。 - 调用
read()
一个没有人向其中写入任何内容的管道。 - 调用
accept()
网络套接字。 - 调用
send()
缓冲区已满的网络套接字。 - 尝试访问已交换到磁盘的私有内存。
- 尝试访问不在缓存中且必须从磁盘或网络文件系统加载的内存映射文件。
- 不幸的是跳转到一段尚未加载到内存中的代码。
我读这个答案以及互联网上的一些其他资源,我已经看到了这些条款不间断状态和不间断的睡眠几次,处于这种状态的进程也被计数。所以我假设这将包括一些上述状态中的哪一个?绝对不是全部。
所以我的主要问题是,什么时候确切地是一个计入系统的进程加载?
脚注
[1]: 例如1000样品,200计算单个进程 [2] 的次数,而其他进程800次数没有被计算在内。或者200进程只被计数一次,而其他进程则不被计数999次。我明白了。
[2]:我正在使用过程和线在这里可以互换,因为据我了解,从调度程序的角度来看,它们看起来并没有那么不同。为了解释我的问题,请假设我正在谈论一个每个进程只有一个线程的系统。如果在查看具有多个线程的进程时存在有趣的差异,请注意它们!