kthread는 어떤 맥락에서 실행되나요?

kthread는 어떤 맥락에서 실행되나요?

시스템 호출은 호출 프로세스 내에서 실행되고, 인터럽트는 모든 프로세스 내에서 실행될 수 있지만(인터럽트가 발생하면 현재 실행 중인 프로세스 내에서 인터럽트 핸들러가 실행됨) kthread는 어디에서 실행됩니까? 일부 함수 호출이 현재 커널 모드에서 실행되고 있다고 가정해 보겠습니다 kthreads_create. 이는 새 커널 스레드를 생성해야 하지만 실행 컨텍스트는 무엇입니까? 제 질문이 가상이라고 생각하셨다면 죄송합니다. 저는 확실히 Linux 커널을 처음 접하는 사람입니다.

답변1

커널 스레드는 자체 프로세스 컨텍스트를 갖습니다. 커널 스레드는 다음과 같이 나열됩니다 ps.

$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May29 ?        00:00:44 /sbin/init
root         2     0  0 May29 ?        00:00:00 [kthreadd]
root         3     2  0 May29 ?        00:00:05 [ksoftirqd/0]
root         5     2  0 May29 ?        00:00:00 [kworker/0:0H]
root         7     2  0 May29 ?        00:00:01 [migration/0]
root         8     2  0 May29 ?        00:02:57 [rcu_preempt]
root         9     2  0 May29 ?        00:00:00 [rcu_bh]
root        10     2  0 May29 ?        00:00:00 [rcu_sched]
root        11     2  0 May29 ?        00:00:00 [watchdog/0]
root        12     2  0 May29 ?        00:00:00 [watchdog/1]
...

[대괄호] 안의 모든 프로세스 이름은 커널 스레드를 나타냅니다.

당신은 또한 볼 수 있습니다https://lwn.net/Articles/65178/. kthread_create데이터 구조를 생성하면 됩니다. 그런 다음 이 데이터 구조는 wake_up_process프로세스를 실행하는 프로세스로 전달됩니다.

것 같다커널 문서사용된 용어프로세스,철사그리고오히려 느슨하고 어느 정도 상호 교환이 가능합니다.

답변2

커널 스레드는 일반 프로세스와 유사하지만 두 가지 차이점이 있습니다. (1) 커널 스레드는 커널 모드에서 실행되며 (2) 자체 주소 공간이 없습니다. 이름에서 알 수 있듯이 커널 스레드는 사용자 공간으로 전환되지 않지만 커널 모드에서 계속 실행됩니다. 각 커널 스레드에는 자체 스택이 있지만 주소 공간은 나머지 커널과 공유됩니다. 이런 점에서 이들은 사용자 공간 스레드와 비슷하지만, 물론 차이점이 있지만 사용자 공간 스레드는 자신이 시작한 사용자 수준 프로세스의 주소 공간에 존재합니다.

관련 정보