커널은 프로세스인가?

커널은 프로세스인가?
  1. initLinux에서는 항상 첫 번째 프로세스가 (pid==1) 이라고 말합니다 . 그런데 왜 시스템을 설정하고 프로세스를 생성하는 커널(스타트업)이 아닌가 init? 커널은 프로세스인가?
  2. 우리는 모든 사용자 공간 스레드가 init 프로세스에 뿌리를 두고 있다는 것을 알고 있습니다. 그렇다면 메모리 관리와 같은 스케줄러 및 기타 커널 관련 작업은 어떻습니까?

기본적으로 나를 혼란스럽게 만드는 것은 커널의 구조입니다. 프로세스라면 단일 프로세스인가요, 아니면 여러 프로세스로 구성되어 있나요?

답변1

짧은 답변:

  1. 아니요, 과정이 아닙니다.
  2. 사용자 스레드는 init에 뿌리를 두지 않습니다.

Init은 첫 번째 프로세스일 뿐입니다. 프로세스나 스레드를 관리하지 않습니다. 커널 시스템 호출인 fork()와 exec를 사용하여 일부를 생성합니다.

나는 당신이 프로세스가 무엇인지에 대해 혼란스러운 생각을 가지고 있다고 생각합니다. 단지 약간의 코드 실행만을 의미하는 것은 아닙니다. 예, 커널은 init 이전에 실행됩니다(그리고 부트로더도 그 이전에 실행됩니다). 그러나 '프로세스'에는 다음과 같은 구체적인 정의가 있습니다.

  • 사용자 공간에서 실행
  • 프로세스 ID로 실행
  • 많은 상호작용이 커널을 거쳐야 합니다.
  • 모든 리소스는 커널에서 나와야 합니다.
  • 커널에 의해 예약되어야 함

따라서 커널이 초기화되면 init를 실행하여 구성에 명시된 다른 프로세스를 생성합니다.

#2에 관한 한 모든 커널 관련 내용은 커널에 있습니다. 커널을 큰 코드 영역으로 생각하십시오. 다시 말하지만 프로세스가 아니라 큰 코드 덩어리입니다. 커널의 일부는 메모리 관리를 다루고, 일부는 자체 예약 부분(드라이버 등)을 담당하며, 일부는 예약 프로세스를 담당합니다.

답변2

커널은 실제로 전혀 프로세스처럼 동작하지 않습니다. 이는 예약되지 않고 프로세스(소위 프로세스 컨텍스트 또는 사용자 컨텍스트라고 함)를 대신하여 실행되거나 인터럽트 또는 예외(소위 인터럽트 컨텍스트라고 함)의 결과로 실행됩니다.

즉, Linux 커널은 일부 작업을 수행하거나 인터럽트 컨텍스트에서 무언가를 너무 오랫동안 실행하는 것을 방지하기 위해 커널 스레드를 생성합니다(ksoftirqd 스레드가 수행하는 작업으로 오디오 끊김 등으로 이어질 수 있는 과도한 대기 시간을 방지합니다). .

명령 출력에서 ​​커널 스레드를 볼 수 있습니다 ps. 쉽게 식별할 수 있습니다. 이름은 괄호 안에 표시됩니다. 그 중 일부는 CPU당 하나의 인스턴스를 실행하며 CPU는 슬래시 뒤의 숫자로 식별되므로 [ksoftirqd/0]은 CPU 0의 ksoftirqd 인스턴스입니다.

답변3

마이크로 커널에는 커널의 다양한 부분이 실제로 프로세스이고 기본 센티널이 대부분 IPC를 관리하는 개념이 있습니다.

Linux는 좋건 나쁘건 마이크로 커널 시스템이 아닙니다.

답변4

ninjalj는 다음과 같이 썼습니다. "커널은 전혀 프로세스처럼 작동하지 않습니다. 예약되지 않습니다."

음, 예약되어 있고 거의 항상 실행 가능한 상태에 있는 유휴 프로세스(기본적으로 pid 0, 어디에도 표시되지 않음)가 있습니다.

관련 정보