![Linux 커널이 사용자 공간 프로세스/스레드와 커널 작업/작업 간에 CPU를 예약하는 방법](https://linux55.com/image/161952/Linux%20%EC%BB%A4%EB%84%90%EC%9D%B4%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EA%B3%B5%EA%B0%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%2F%EC%8A%A4%EB%A0%88%EB%93%9C%EC%99%80%20%EC%BB%A4%EB%84%90%20%EC%9E%91%EC%97%85%2F%EC%9E%91%EC%97%85%20%EA%B0%84%EC%97%90%20CPU%EB%A5%BC%20%EC%98%88%EC%95%BD%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
저는 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]
이러한 프로세스는 여러분에게 더 친숙한 프로세스와 동일한 방식으로 구성됩니다.
이러한 유형의 작업에 대한 일반적인 패턴은 다음과 같습니다.작업 대기열;이에 대한 커널 문서는 매우 훌륭하므로 해당 주제에 관심이 있다면 읽어 보시기 바랍니다.