소스를 살펴보면 strace
클론 플래그 CLONE_IDLETASK
를 사용하는 것으로 나타났습니다 .
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
더 자세히 살펴본 후에는 플래그가 포함되어 있지 않지만 man clone
부팅 프로세스 중에 커널이 실제로 사용하여 시스템의 각 CPU에 대해 유휴 프로세스 (모두 PID 0이 있어야 함)를 생성 한다는 것을 알았습니다 . 즉, CPU가 8 개인 머신은 이러한 프로세스가 "실행 중"(따옴표로 표시) 7 이상 (아래 질문 참조)이됩니다.
이제이 "유휴"프로세스가 실제로 수행하는 작업에 대한 몇 가지 질문이 있습니다. 내 가정은 시간 프레임이 끝날 때까지 NOP 작업을 지속적으로 실행하고 커널이 실제 프로세스를 실행하거나 유휴 프로세스를 다시 한 번 할당하도록 지정합니다 (CPU가 사용되지 않는 경우). 그러나 그것은 완전한 추측입니다. 그래서:
예를 들어 8 개의 CPU가있는 머신에서 7 개의 유휴 프로세스가 생성됩니까? (그리고 사용자 공간 작업을 수행하지 않고 하나의 CPU가 커널 자체에 의해 유지됩니까?)
유휴 프로세스는 실제로 무한한 NOP 작업 스트림입니까? (또는 같은 루프).
CPU 사용량 (예 : CPU
uptime
)은 유휴 프로세스가 CPU에 얼마나 오래 있었는지, 특정 기간 동안 얼마나 오래 있었는지에 의해 간단하게 계산됩니까?
추신 :이 질문의 많은 부분은 CPU가 어떻게 작동하는지 완전히 이해하지 못했기 때문일 수 있습니다. 즉, 어셈블리, 타임 프레임 및 인터럽트를 이해하지만, 예를 들어 CPU가 실행중인 내용에 따라 어느 정도의 에너지를 사용하는지 알 수 없습니다. 누군가 나에게도 그것을 밝힐 수 있다면 나는 감사 할 것이다.