17P by neo 6달전 | favorite | 댓글 3개
  • PID 0에 대해 웹에서 검색하면 대부분 잘못된 정보가 나옴.
  • Google, Bing, DuckDuckGo, Kagi에서 PID 0을 검색했을 때, 정확한 답변을 찾기 어려웠음.
  • Wikipedia의 잘못된 정보가 16년 동안 퍼져나가면서 많은 사이트들이 이를 인용함.

PID 0의 역사

  • PID 0은 스케줄링과 전원 관리에 관여하며, 페이징과는 관련이 없음.
  • PID 0은 CPU 코어가 할 일이 없을 때 실행되는 스케줄러 역할을 함.
  • 초기 Unix에서는 PID 0이 메모리 관리와 관련된 작업을 했으나, 현대 Unix에서는 그렇지 않음.

PID 0의 실제 역할

  • PID 0은 커널을 시작하고, 이후에는 CPU 코어를 관리하는 역할을 함.
  • Linux 커널에서 PID 0은 do_idle 함수로 구현되어 있음.
  • FreeBSD와 같은 다른 커널에서도 비슷한 역할을 수행함.

PID 0의 혼란

  • Linux 커널과 사용자 공간에서 PID의 의미가 다름.
  • 커널에서는 task_struct가 하나의 스레드를 나타내며, PID는 스레드 ID를 의미함.
  • 사용자 공간에서는 PID가 프로세스를 나타내며, 이는 스레드 그룹 ID와 동일함.

다중 코어 시스템에서의 PID 0

  • 다중 코어 시스템에서는 각 CPU 코어마다 하나의 idle 스레드가 있음.
  • 이 idle 스레드들은 모두 스레드 그룹 0에 속함.
  • 사용자 공간에서는 이를 PID 0으로 인식함.

결론

  • PID 0은 존재하며, 커널을 시작하는 스레드임.
  • PID 0은 초기 커널 초기화 작업을 수행하고, 이후에는 idle 스레드로 전환됨.
  • PID 0은 메모리 관리와는 관련이 없음.
  • 다중 코어 시스템에서는 각 코어마다 idle 스레드가 있으며, 이들은 모두 스레드 그룹 0에 속함.

GN⁺의 의견

  • 정확한 정보의 중요성: 잘못된 정보가 오랜 시간 동안 퍼져나가면서 많은 사람들이 이를 사실로 받아들이게 됨. 정확한 정보 제공의 중요성을 다시 한번 상기시켜줌.
  • 커널의 복잡성: 커널의 초기화 과정과 스케줄링 메커니즘은 매우 복잡하며, 이를 이해하는 것은 소프트웨어 엔지니어에게 큰 도움이 됨.
  • PID의 혼란: 커널과 사용자 공간에서 PID의 의미가 다르기 때문에, 이를 명확히 이해하는 것이 중요함.
  • 다중 코어 시스템: 현대의 다중 코어 시스템에서 PID 0의 역할을 이해하는 것은 시스템 성능 최적화에 도움이 됨.
  • Wikipedia의 영향력: Wikipedia의 정보가 얼마나 많은 웹사이트에 영향을 미치는지 보여줌. 정확한 정보 업데이트의 중요성을 강조함.
Hacker News 의견
  • 고고학적 관점에서 흥미로움: "pid 0은 [Linux] 커널의 일부"라는 말은 커널 디버깅 시 유용함. 사용자 공간 프로세스 관점에서는 "pid 0은 나 자신을 의미"함.
  • 온라인에서의 과신: 온라인에서 많은 사람들이 자신이 아는 것에 대해 과신함. 확신에 찬 어조는 전문가들만 사용해야 함.
  • Windows의 PID 0: NT 기반 Windows에서 PID 0은 "System Idle Process"로 Linux와 유사함. DOS 기반 Windows에서는 PID 0이 없고, idle loop는 VMM32 안에 있음.
  • 학문적 Unix에서의 PID 0: 대부분의 학문적 Unix에서 PID 0은 메모리 서브시스템(paging)과 관련됨. Linux만이 PID 0 개념의 소유자가 아님.
  • 일반 지식의 오류: "일반 지식"이 잘못된 경우가 많음. 커널 소스 코드를 확인하는 것이 올바른 방법임.
  • PID 0의 세 번째 용도: Linux에서 getppid가 0을 반환하는 경우는 부모가 다른 PID 네임스페이스에 있을 때임.
  • 추가 자료 추천: 초기 커널 부팅에 관심이 있다면, 이 훌륭한 자료를 읽어보길 권장함. Linux Insides
  • ps -aux 명령어에 대한 질문: "ps -aux" 명령어를 입력하면 다른 사용자들의 정보도 표시됨. 기본적으로 비공개 정보여야 하지 않음?
  • kill 0의 흥미로운 사용법: kill 0을 사용하여 제한 시간 동안 명령어를 실행하고 종료하는 스크립트 공유.
  • v4 코드의 PID 0 재사용: v4 코드가 pid 0을 재사용하는 것이 흥미로움. 80년대 중반에 커널에서 이 문제를 해결해야 했던 기억이 있음.

그 agent 가 kill -9 0 했던 그 옛날 사건이 생각나는...