커널 스레드는 프로세스인가요, 아니면 데몬인가요?

커널 스레드는 프로세스인가요, 아니면 데몬인가요?

Mauerer의 Linux 커널 아키텍처 관점에서 보면,

커널 스레드커널 자체에서 직접 시작되는 프로세스입니다. 커널 기능을 별도의 프로세스에 위임하고 시스템의 다른 프로세스와 "병렬로" 실행합니다(사실 커널 자체 실행과 병렬로). 커널 스레드는 종종 (커널)이라고 불립니다.악마. 예를 들어 다음 작업을 수행하는 데 사용됩니다.

  • 수정된 메모리 페이지를 해당 페이지가 있는 블록 장치와 주기적으로 동기화합니다(예: mmap 매핑 파일 사용).
  • 메모리 페이지가 거의 사용되지 않으면 스왑 영역에 기록됩니다.
  • 지연된 조치를 관리합니다.
  • 파일 시스템의 트랜잭션 로그를 구현합니다.

기본적으로 커널 스레드에는 두 가지 유형이 있습니다.

  • 유형 1 - 스레드가 시작되고 커널이 특정 작업을 요청할 때까지 기다립니다.
  • 유형 2 - 일단 시작되면 스레드가 주기적으로 실행되어 특정 리소스의 활용도를 확인하고 활용도가 설정된 제한을 초과하거나 아래로 떨어지면 조치를 취합니다. 커널은 이러한 유형의 스레드를 사용하여 지속적인 모니터링 작업을 수행합니다.
  1. Mauerer의 책에서는 커널 스레드가 프로세스라고 말하고 있으므로 커널 모드가 아닌 사용자 모드에서 실행되어야 한다고 가정합니다. (아니면 제가 틀렸나요? 프로세스가 사용자 모드나 커널 모드에서 서로 다른 시간에 실행될 수 있습니까, 아니면 한 모드에서만 실행될 수 있습니까?)

    그러나 Bovet의 Understanding Linux Kernel에서는 커널 스레드가 커널 모드에서만 실행된다고 말합니다(아래 인용문 참조). 두 책에 나오는 "커널 스레드" 개념은 같은 개념인가요?

    기존 Unix 시스템은 디스크 캐시 플러시, 사용하지 않는 페이지 교체, 네트워크 연결 유지 관리 등을 포함하여 간헐적으로 실행되는 프로세스에 몇 가지 중요한 작업을 위임합니다. 실제로 이러한 작업을 엄격한 선형 방식으로 수행하는 것은 비효율적입니다. 백그라운드에서 예약되면 해당 기능과 최종 사용자 프로세스가 모두 더 잘 응답합니다. 일부 시스템 프로세스는 커널 모드에서만 실행되기 때문에 최신 운영 체제는 해당 기능을 커널 모드에 위임합니다.커널 스레드, 불필요한 사용자 모드 컨텍스트로 인해 방해를 받지 않습니다. Linux에서 커널 스레드는 다음과 같은 점에서 일반 프로세스와 다릅니다.

    • 커널 스레드는 커널 모드에서만 실행되는 반면 일반 프로세스는 커널 모드와 사용자 모드에서 교대로 실행됩니다.
    • 커널 스레드는 커널 모드에서만 실행되기 때문에 PAGE_OFFSET보다 큰 선형 주소만 사용합니다. 반면 일반 프로세스는 사용자 모드 또는 커널 모드에서 전체 4GB의 선형 주소를 사용합니다.
  2. Mauerer의 책에서는 커널 스레드가 커널에 의해 직접 시작된다고 말하고 있으며, 데몬도 커널 스레드와 동의어라고 말하는 것 같습니다. 그래서 데몬은 커널에 의해 직접 시작되어야 한다고 생각합니다.

    하지만https://unix.stackexchange.com/a/193918/674screen해당 데몬이 screen사용자 인터페이스에 의해 시작된다고 말합니다 (아래 인용문 참조). 나는 screen사용자 인터페이스가 커널이 아니라 프로세스라고 생각한다. daemonMauerer의 책에 있는 개념과 연결된 답변에 있는 개념이 동일한 개념입니까?

    처음 실행하면 screen실제로는 기본적으로 데몬(세션 관리자)이 생성되는 사용자 인터페이스(ui)가 실행됩니다.

  3. 전반적으로 "커널 스레드", "프로세스" 및 "데몬"의 개념과 이들의 관계 및 차이점을 어떻게 이해합니까?

답변1

첫째 : 신용으로 이동 https://stackoverflow.com/questions/15983872/difference-Between-user-level-and-kernel-supported-threads

사용자 스레드와 커널 스레드는 완전히 동일합니다. (/proc/를 보면 커널 스레드도 있다는 것을 알 수 있습니다.)

사용자 스레드는 사용자 공간 코드를 실행하는 스레드입니다. 그러나 언제든지 커널 공간을 호출할 수 있습니다. 더 높은 보안 수준에서 커널 코드를 실행하더라도 여전히 "사용자" 스레드로 간주됩니다.

커널 스레드는 커널 코드만 실행하고 사용자 공간 프로세스와 연결되지 않는 스레드입니다. 커널 전용 데몬이라는 점을 제외하면 "UNIX 데몬"과 유사합니다. 따라서 커널은 다중 스레드 프로그램이라고 말할 수 있습니다. 예를 들어, 교환을 위한 커널 스레드가 있습니다. 이로 인해 모든 교환 문제가 단일 스트림으로 "직렬화"됩니다.

사용자 스레드에 무언가가 필요한 경우 스레드를 휴면 상태로 표시하는 커널을 호출합니다. 나중에 스왑 스레드는 데이터를 찾아 사용자 스레드를 실행 가능으로 표시합니다. 나중에 "사용자 스레드"는 아무 일도 일어나지 않은 것처럼 커널에서 사용자 공간으로 돌아갑니다.

실제로 clone() 작업이 커널 공간에서 발생하기 때문에 모든 스레드는 커널 공간에서 시작됩니다. (사용자 공간의 새 프로세스로 "복귀"하려면 먼저 많은 커널 통계를 수행해야 합니다.)

관련 정보