커널 코드는 전용 프로세스에 의해 실행됩니까?

커널 코드는 전용 프로세스에 의해 실행됩니까?

우리는 프로그램이 프로세스라는 것을 알고 있습니다(예: gedit, ssh...등).

커널과 드라이버는 어떻습니까?

별도의 프로세스인가요?

전임자:

커널 코드를 실행하는 프로세스입니다.

프로세스 B는 드라이버 foo를 실행합니다.

답변1

Unix 스타일 컨텍스트에서 일부 사람들은 커널을 "프로세스 0"(프로세스 1 이전 init)으로 생각합니다. 그러나 이것은 정확하지 않습니다. 특히 커널이 프로세스와 다르게 예약되기 때문입니다.

일반적으로 Unix 스타일 커널은 특정 이벤트에 대한 응답으로만 실행됩니다. 이러한 이벤트는 두세 가지 범주로 분류됩니다.

  1. 시스템 호출: 프로세스가 시스템 호출을 호출하면 이는 호출 프로세스의 컨텍스트 내에서 발생하며 다른 프로세스는 포함되지 않습니다.

  2. 하드웨어 인터럽트: 하드웨어가 메인 CPU의 주의를 필요로 할 때 하드웨어 인터럽트를 발행하고 이를 처리하기 위해 커널을 호출합니다. 운영 체제마다 이를 다르게 처리하지만 대부분의 경우 초기 인터럽트 처리에는 새로운 프로세스가 포함되지 않습니다.

  3. 오류(하드웨어 인터럽트의 한 형태로 생각할 수 있음): 문제가 발생하여 CPU에 "책임 있는 성인"의 주의가 필요한 경우 오류를 발생시키고 이를 처리하기 위해 커널을 호출합니다. 이는 실패 프로세스의 맥락에서 발생합니다. 예를 들어, 프로세스가 매핑되지 않은 메모리에 액세스할 때 발생합니다. 프로세스가 그렇게 하도록 허용되면 커널은 누락된 메모리를 매핑하고 이를 프로세스에 반환하며, 그렇지 않은 경우 커널은 프로세스를 종료합니다.

일부 커널은 일부 작업을 수행하기 위해 프로세스를 사용합니다.Linux는 프로세스를 사용하여 장기 실행 작업을 수행합니다..여기에는 장치 드라이버가 포함됩니다., 장기 실행 작업의 경우 모든 장치 드라이버가 사용되는 것은 아닙니다. 대부분의 시스템에서 장치 드라이버는 커널과 별도로 실행되지 않습니다. 일단 로드되면 커널의 일부가 됩니다.

당신은 또한 볼 수 있습니다Linux 커널은 어떤 프로세스가 시스템 호출을 했는지 어떻게 알 수 있나요?

위의 모든 내용은 일반적인 Unix 스타일의 대형 커널을 가정합니다.마이크로커널다른 접근 방식을 취하면 일반적으로 커널 책임의 많은 부분이 프로세스에 의해 처리된다고 생각됩니다. 바라보다허드예를 들어.

관련 정보