저는 Linux 프로세스 관리 및 스케줄링을 이해하려고 노력하고 있습니다. 스케줄러는 우선순위/시간 분할에 따라 다양한 프로세스를 예약한다는 것을 알고 있습니다. 그러나 처리해야 하는 일부 커널 작업(프로세스를 커널 모드로 가져오는 프로세스의 시스템 호출은 언급하지 않았습니다)도 있습니다(예: 스케줄러/타이머 또는 영원히 실행되는 일부 커널 코드). 스케줄러가 다른 프로세스에 대해 CPU를 예약하는지, 그 사이에 커널 작업이 어떻게 제공되는지 이해하지 못합니다.
답변1
"in-process"(시스템 호출 또는 인터럽트 서비스)를 실행하지 않는 커널 작업은 자체적으로 별도의 프로세스로 처리되며 다음 ps
출력에서 확인할 수 있습니다.
root 2 0.0 0.0 0 0 ? S Sep16 0:02 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Sep16 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< Sep16 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S Sep16 9:11 [ksoftirqd/0]
root 10 0.2 0.0 0 0 ? I Sep16 173:25 [rcu_sched]
root 11 0.0 0.0 0 0 ? I Sep16 0:00 [rcu_bh]
root 12 0.0 0.0 0 0 ? S Sep16 0:20 [migration/0]
root 14 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/0]
root 15 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/1]
이러한 프로세스는 여러분에게 더 친숙한 프로세스와 동일한 방식으로 구성됩니다.
이러한 유형의 작업에 대한 일반적인 패턴은 다음과 같습니다.작업 대기열;이에 대한 커널 문서는 매우 훌륭하므로 해당 주제에 관심이 있다면 읽어 보시기 바랍니다.