시스템 5 init
는 이야기의 작은 부분만을 알려줄 것입니다.
리눅스 세계에 영향을 미치는 근시가 있습니다. 사람들은 자신들이 "시스템 5 init
" 라는 것을 사용한다고 생각합니다. 이것이 전통적이며 시작하기 가장 좋은 곳입니다. 사실도 마찬가지입니다.
전통은 실제로 그러한 사람들이 처음부터 그렇게 말하는 것이 아닙니다. System 5 init
와 System 5 rc
는 AT & T UNIX System 5에 해당합니다. AT & T UNIX는 Linux-Mandrake의 첫 번째 버전 이후와 마찬가지로 첫 번째 UNIX와 거의 거리가 멀었습니다.
1st Edition UNIX에만 init
있습니다. 가지고 있지 않았습니다 rc
. 제 1 회 판 어셈블리 언어 init
( 그 코드가 되었습니다 복원 워렌 투미 등으로 이용 가능. ) 직접 양산 및 12 개 리스폰 getty
과정에서 3 개 배선에 파일 시스템을 마운트 테이블에 내장하고, 직접의 홈 디렉토리에서 프로그램을 실행 사용자 이름이 mel
. getty
테이블은 프로그램 이미지에 직접도했다.
유닉스 시스템 5 이후 10 년이 지나서 "전통적인"리눅스 초기화 시스템이 등장했다. 1992 년 Miquel van Smoorenburg (리-)는 Linux init
+ rc
및 관련 도구를 작성했는데 init
, 실제로 UNIX System 5의 소프트웨어가 아니더라도 사람들은 이제 "System 5 "라고합니다. init
).
System 5 init
/ rc
는 시작하기 가장 좋은 장소가 아니며, 알고 있어야 할 것의 절반을 포함하지 않는 systemd에 대한 지식을 추가하더라도. init 시스템 디자인 영역 (Linux 및 BSD 용)에서 지난 20 년 동안 만 일한 많은 작업이있었습니다. 모든 종류의 엔지니어링 결정이 논의, 결정, 설계, 구현 및 실행되었습니다. 상업용 Unices도 많은 일을했습니다.
공부하고 배우는 기존 시스템
다음은이 두 가지 이외 의 주요 init 시스템 중 일부 와 그 중 몇 가지 (몇 가지) 두드러진 점에 대한 불완전한 목록입니다 .
- Joachim Nilsson의 finit 는보다 사람이 읽을 수있는 구성 파일을 사용하는 길을갔습니다.
- 펠릭스 폰 레이트 너의 MINIT는 것들 사이 / 정지 종속성을 파일 시스템 - 인 - 더 - 데이터베이스 구성 시스템, 작은 메모리 풋 프린트에 들어갑니다, 그리고 시작
init
이 시작됩니다.
- Gerrit Pape의 runit 은 방금 4 개의 쉘 스크립트 접근 방식으로 설명한 바를 따릅니다 .
- InitNG 는 하위 프로세스에 대한 더 많은 설정을로드 할 수있는 종속성, 명명 된 대상, 여러 구성 파일 및보다 유연한 구성 구문을 갖기를 목표로했습니다.
- upstart 는 시스템을 서비스 및 상호 의존성으로 모델링하는 것이 아니라 이벤트 및 작업으로 트리거되는 시스템을 완전히 재 설계하여 완전히 재 설계했습니다.
- 의 디자인 요기는 (심지어 포함한에서 서비스 관리의 모든 밀어 포함
getty
별도의 서비스 매니저에 산란하고 좀비 수확을), 및 단지 운영 체제 별 "API"장치 / 심볼릭 링크 / 디렉토리 및 시스템 이벤트를 처리.
- sinit 은 매우 간단한 init입니다. 그것은 실행
/bin/rc.init
그의 작업은 당신이 같은 것을 사용할 수 있습니다이를 위해 등, 파일 시스템 마운트, 프로그램을 시작하는 것입니다 minirc을 .
또한, 약 10 년 전, 데몬툴 사용자와 svscan
프로세스 # 1로 사용하는 데 대한 토론이 있었는데 , 이는 Paul Jarc의 svscan을 프로세스 1 연구로 , Gerrit Pape의 아이디어를 , Laurent Bercot의 svscan을 프로세스 1 로하 는 프로젝트로 이어졌습니다 .
어느 프로세스 # 1 프로그램이하는지 알려줍니다.
프로세스 # 1 프로그램의 기능
어떤 프로세스 # 1이 "추정"되어야하는지에 대한 개념은 본질 상 주관적이다. 의미있는 객관적인 디자인 기준은 프로세스 # 1 이 최소로해야 할 일입니다. 커널에는 몇 가지 요구 사항이 있습니다. 그리고 항상 다양한 종류의 운영 체제 별 작업이 필요합니다. 전통적으로 프로세스 # 1이 수행 한 작업에 관해서는, 우리는 최소한도 아니고 실제로도 본 적이 없습니다.
다양한 운영 체제 커널 및 기타 프로그램이 프로세스 # 1에서 요구하는 것 중 하나는 단순히 벗어날 수없는 것입니다.
사람들은 fork()
일을하고 고아 프로세스의 부모 역할 을 하는 것이 프로세스 # 1의 주요 기능 이라고 말할 것입니다 . 아이러니하게도, 이것은 사실이 아닙니다. 고아 프로세스 처리 ( https://unix.stackexchange.com/a/177361/5132에 설명 된 최신 Linux 커널 사용 )는 프로세스 # 1에서 다른 프로세스 (예 : 전담 서비스 관리자 . 이들은 모두 프로세스 # 1에서 실행되는 서비스 관리자입니다.
마찬가지로 https://superuser.com/a/888936/38062 에서 설명한 것처럼 전체 /dev/initctl
아이디어는 프로세스 # 1 근처에있을 필요는 없습니다. 아이러니하게도, 프로세스 # 1에서 벗어날 수 있음을 보여주는 중앙 집중식 시스템입니다.
반대로위한 필수 일이 init
, 그 사람들은 일반적으로 자신의 오프 - 더 - 최고의 - 헤드 디자인에 잊지 같은 핸들링과 같은 것들 SIGINT
, SIGPWR
, SIGWINCH
, 등 커널에서 전송하고 전송 된 다양한 시스템 상태 변경 요청을 제정은 # 1을 처리하기위한 특정 신호가 특정 것을 의미한다는 것을 "알고있는"프로그램으로부터. (예 : https://unix.stackexchange.com/a/196471/5132에 설명 된대로 BSD 툴셋 SIGUSR1
은 특정 의미 를 갖는 "알고 있습니다."
"API"파일 시스템 마운트 또는 파일 시스템 캐시 플러시 와 같이 일회성 초기화 및 마무리 작업도 수행 할 수 없거나 수행하지 못하는 경우가 많습니다 .
"API"파일 시스템을 다루는 기본 사항은 init
rom 1st Edition UNIX 의 작업과 거의 다릅니다 . 하나는 프로그램에 하드 와이어 된 정보 목록이 있고 하나는 목록 mount()
의 모든 항목입니다. 이 메커니즘 init
은 nosh를 통해 BSD (sic!)와 같은 다양한 시스템 system-manager
에서 systemd로 찾을 수 있습니다.
"간단한 쉘을위한 시스템 설정"
살펴본 바와 같이, init=/bin/sh
"API"파일 시스템이 마운트되지 않고, 한 유형 exit
( https://unix.stackexchange.com/a/195978/5132 )에서 캐시 플러시없이 비정상적으로 충돌 하며 일반적으로 그대로 둡니다. (수퍼) 사용자에게 시스템을 최소한으로 사용할 수있게하는 작업을 수동으로 수행합니다.
프로세스 # 1 프로그램에서 실제로 수행 할 수있는 작업이 무엇인지 확인하고 명시된 설계 목표를 달성 할 수있는 좋은 방법을 선택하려면 Gerrit Pape의 runit, Felix von의 작업에서 겹치는 부분을 보는 것이 가장 좋습니다. Leitner 's minit와 system-manager
nosh 패키지 의 프로그램. 전자의 두 가지는 미니멀리스트하려는 두 가지 시도를 보여 주지만 여전히 피할 수없는 것들을 처리합니다.
후자는 system-manager
프로그램에 대한 광범위한 수동 입력에 유용하며 , 이는 "API"파일 시스템이 마운트되는 대상, 초기화 작업이 실행되는 신호 및 처리되는 신호를 정확하게 설명합니다. 시스템에 있음을 디자인하여 시스템 관리자가 단지 다른 세 가지 (서비스 관리자, 동반 로거 및 상태 변경을 실행할 수있는 프로그램) 만 처리 # 1의 피할 수없는을 산란.