답변:
짧은 답변 :
Init는 첫 번째 프로세스 일뿐입니다. 프로세스 또는 스레드를 관리하지 않습니다. 커널 syscalls fork () 및 exec를 사용하여 일부를 작성합니다.
나는 당신이 프로세스가 무엇인지에 대한 진흙 투성이의 생각을 가지고 있다고 생각합니다. 단지 약간의 실행 코드를 의미하는 것은 아닙니다. 예, 커널은 init (그리고 그 이전의 부트 로더) 전에 실행됩니다. 그러나 '프로세스'에는 다음과 같은 특정 정의가 있습니다.
따라서 커널이 초기화되면 init를 실행 한 다음 다른 구성 프로세스가 말한 것을 생성합니다.
# 2가 진행되는 한 모든 커널은 커널에 있습니다. 커널을 넓은 코드 영역으로 생각하십시오. 다시 말하지만 프로세스는 아니지만 큰 코드 얼룩입니다. 커널의 일부는 메모리 관리, 일부는 드라이버 등의 일정 부분을 예약하고 일부는 일정 프로세스를 처리합니다.
커널은 실제로 프로세스처럼 행동하지 않습니다. 예약되지 않았으며 프로세스 (프로세스 컨텍스트 또는 사용자 컨텍스트라고 함) 대신 실행되거나 인터럽트 또는 예외 (인터럽트 컨텍스트)의 결과로 실행됩니다.
즉, Linux 커널은 커널 스레드를 생성하여 일부 작업을 수행하거나 너무 긴 인터럽트 컨텍스트에서 무언가를 실행하지 않도록합니다 (즉, ksoftirqd 스레드가 수행하는 것, 과도한 지연 시간을 피하여 오디오 끊김 등). .
ps
명령 출력에서 커널 스레드를 볼 수 있습니다 . 그것들은 쉽게 식별됩니다 : 그들의 이름은 괄호 안에 있습니다. 그들 중 일부는 CPU 당 하나의 인스턴스를 실행하며, CPU는 슬래시 뒤에 숫자로 식별되므로 [ksoftirqd / 0]은 CPU 0에서 ksoftirqd의 인스턴스입니다.
상황 전환
❖ 프로세스는 커널이라는 공유 OS 덩어리에 의해 관리됩니다
▪ The kernel is not a separate process, but rather runs as part of a user process
❖ 컨텍스트 전환은 한 프로세스에서 다른 프로세스로 제어 흐름을 전달하며 커널 코드를 사용하여 수행됩니다.
출처 : https://courses.cs.washington.edu/courses/cse351/19su/lectures/18/CSE351-L18-processes_19su.pdf , 페이지 36