책(리눅스 커널 프로그래밍)을 읽다가 다음과 같은 흥미롭고 혼란스러운 구절 mm_segment_t addr_limit
(회원 중 한 명 )을 발견했습니다.struct_task
mm_segment_t addr_limit;
이전 커널과 달리 2.4부터는 작업(스레드)도 커널 내부에 위치할 수 있습니다. 이러한 작업은 사용자 공간의 작업보다 더 큰 주소 공간에 액세스할 수 있습니다.주소 제한태스크 커널을 사용하여 접근할 수 있는 주소 공간을 설명합니다.
질문:
첫 번째 지점에는 "(작업) 스레드가 있습니다.좋아요"커널에"가 있습니다. 이것은 스레드가 반드시 커널에 있다는 뜻이 아닙니까?
두 번째 문장에서는 "이것들사용자 공간의 작업보다 더 큰 주소 공간에 접근할 수 있습니다. "무슨 말인지 이해가 안 돼.이것들방법? 그가 스레드에 대해 이야기하고 있다면 어떻게 스레드가 작업보다 더 큰 주소 공간을 가질 수 있습니까?
답변1
"커널 내"라는 문구는 다음을 의미할 수 있습니다.커널 스레드이는 커널 자체에서 비동기적으로 수행할 수 있는 작업을 수행하는 데 사용됩니다. 프로세스 트리에서 이러한 스레드의 예를 볼 수 있습니다.
# ps aux | grep '\[.*\]$' | head
root 2 0.0 0.0 0 0 ? S May05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S May05 0:03 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S May05 0:00 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S May05 0:00 [kworker/u:0]
root 6 0.0 0.0 0 0 ? S May05 0:00 [migration/0]
root 7 0.0 0.0 0 0 ? S May05 0:00 [watchdog/0]
root 8 0.0 0.0 0 0 ? S May05 0:00 [migration/1]
root 9 0.0 0.0 0 0 ? S May05 0:00 [kworker/1:0]
root 10 0.0 0.0 0 0 ? S May05 0:02 [ksoftirqd/1]
root 11 0.0 0.0 0 0 ? S May05 0:00 [watchdog/1]
이러한 스레드는 kthread_create()를 호출하는 커널 코드에 의해 생성됩니다. 이러한 스레드는 커널 모드에서 실행되며 커널이 수행할 것으로 예상되는 다양한 작업을 수행합니다.
반면에 "사용자 공간의 작업"은 일반적으로 fork+exec 또는 pthread_create를 통해 생성된 스레드 또는 프로세스로 생각되는 것을 나타냅니다. 사용자 모드에서 실행되며 커널 서비스가 필요할 때 시스템 호출을 수행합니다. 여기서 말하는 표현은 약간 이상합니다. 물론 커널은 이러한 작업에 대해 알고 있고 CPU에서 작업을 예약할 수 있도록 해당 작업에 대한 정보(예: struct_task)를 유지하기 때문입니다.
(2)의 경우 "이것"은 구체적으로 "커널 스레드"를 나타냅니다. 나는 커널 스레드가 커널과 동일한 주소 공간을 공유한다고 생각합니다.