본문 바로가기
리눅스

init

by 다움위키 2023. 12. 9.

유닉스-기반 컴퓨터 운영 시스템에서, init (초기화(initialization)의 약자)는 컴퓨터 시스템의 부팅 동안 시작되는 첫 번째 프로세스입니다. Init는 시스템이 종료될 때까지 계속 실행하는 데몬 프로세스입니다. 그것은 모든 다른 프로세스의 직접 또는 간접 조상이고 모든 고아된 프로세스를 자동으로 채택합니다. Init는 부팅 과정 동안 커널에 의해 시작됩니다; 커널 패닉은 커널이 그것을 시작하는 것이 가능하지 않으면 발생할 것입니다. Init는 전형적으로 프로세스 식별자 1로 할당됩니다.

시스템 III시스템 V와 같은 유닉스 시스템에서, init의 설계는 Research Unix와 그것의 BSD 파생에 의해 제공된 기능성으로부터 퍼져 나왔습니다. 최근까지, 대부분의 리눅스 배포판은 시스템 V와 어느 정도 호환되는 전통적인 init를 사용했지만, 슬랙웨어와 같은 일부 배포판은 BSD-스타일 시작 스크립트를 사용하고, 젠투와 같은 다른 배포판은 자체의 사용자-정의 버전을 가집니다.

그 이후로, 여러 추가적인 init 구현이 생성되어 왔으며, 전통적인 버전에서 설계 제한 사항을 해결하기 위해 시도합니다. 이것들은 launchd, Service Management Facility, systemd, RunitOpenRC를 포함합니다.

Research Unix-style/BSD-style

Research Unix init는 /etc/rc에 있는 초기화 쉘 스크립트를 실행하고, 그런-다음 /etc/ttys의 제어 아래에 있는 터미널에서 getty를 시작했습니다. 런레벨이 없습니다: /etc/rc 파일은 init에 의해 실행되는 프로그램을 결정합니다. 이 시스템의 장점은 간단하고 수동으로 편집하기 쉽다는 것입니다. 어쨌든, 시스템에 추가된 새로운 소프트웨어는 부팅할 수 없는 시스템을 생성할 위험이 있는 기존 파일을 변경해야 할 수 있습니다.

BSD init는 4.3BSD 이전에 Research UNIX의 init와 같았습니다; 4.3BSD에서, 그것은 /etc/ttys의 제어 아래에 그래픽 터미널에서 X와 같은 윈도우 시스템을 실행에 대한 지원을 추가했습니다. /etc/rc를 편집해야 하는 요구 사항을 제거하기 위해, BSD 변종은 부팅 과정의 끝 부분에 있는 하위-쉘에서 실행되는 사이트별 /etc/rc.local 파일을 오랫동안 지원해 왔습니다.

완전 모듈식 시스템은 NetBSD 1.5와 함께 도입되었고 FreeBSD 5.0과 후속 버전으로 이식되었습니다. 이 시스템은 /etc/rc.d 디렉토리에서 스크립트를 실행합니다. 각 스크립트의 파일 이름에서 파생되는 System V의 스크립트 순서와 달리, 이 시스템은 각 스크립트 내에 배치된 명시적 종속성 태그를 사용합니다. 스크립트가 실행되는 순서는 이들 태그에 명시된 요구 사항에 따라 rcorder 유틸리티에 의해 결정됩니다.

SysV-style

이전 버전과 비교될 때, AT&T의 유닉스 시스템 III는 새로운 스타일의 시스템 시작 구성을 도입했으며, 이는 유닉스 시스템 V에서 (수정과 함께) 살아남았고 따라서 "SysV-스타일 init"라고 불렀습니다.

언제든지, 실행 중인 System V는 런레벨이라고 하는 미리-결정된 수의 상태 중 하나에 있습니다. 적어도 하나의 실행 수준은 시스템의 정상 작동 상태입니다; 전형적으로, 다른 런레벨은 단일-사용자 모드 (결함이 있는 시스템 복구에 사용됨), 시스템 종료 및 기타 다양한 상태를 나타냅니다. 한 린레벨에서 다른 린레벨로 전환하면 전형적으로 파일 시스템을 마운트하고, 데몬을 시작 또는 중지하고, X 윈도우 시스템을 시작 또는 중지하고, 시스템을 종료하는 등의 런레벨당 스크립트의 모음을 실행합니다.

Runlevels

Further information: Runlevel

System V에서 런레벨은 각각에서 실행되는 프로세스와 데몬을 특징으로 하는 시스템의 특정 상태를 설명합니다. 일반적으로, 7개의 런레벨이 있으며, 그중 3개의 런레벨은 시스템 작동에 필수적이므로 "표준"으로 여겨집니다:

\(\quad\)0. 컴퓨터 종료

\(\quad\)1. 단일 사용자 모드 (역시 S 또는 s로 알려짐)

\(\quad\)6. 컴퓨터 재시작

이들 표준 시스템을 제외하고, 유닉스와 유닉스-계열 시스템은 런레벨을 다소 다르게 취급합니다. 공통 분모, /etc/inittab 파일은 구성된 각 실행 수준이 주어진 시스템에서 수행하는 작업을 정의합니다.

Default runlevels

운영 시스템 기본 런레벨
AIX 2
antiX 5
Gentoo Linux 3
HP-UX 3 (콘솔/서버/다중사용자) 또는 4 (그래픽)
Linux From Scratch 3
Slackware Linux 3
Solaris / illumos 3
UNIX System V Releases 3.x, 4.x 2
UnixWare 7.x 3

오른쪽 테이블에서 린레벨 5로 기본 설정되는 리눅스 배포판에서, 런레벨 5는 보통 GDM 또는 KDM과 같은 디스플레이 관리자와 함께, X 윈도우 시스템을 실행하는 다중 사용자 그래픽 환경을 호출합니다. 어쨌든, Solarisillumos 운영 시스템은 전형적으로 시스템을 종료하고 자동으로 전원을 끄기 위해 실행 수준 5를 예약합니다.

대부분의 시스템에서, 모든 사용자는 runlevel 또는 who -r 명령과 함께 현재 실행 수준을 확인할 수 있습니다. 루트 사용자는 전형적으로 telinit 또는 init 명령을 실행함으로써 현재 런레벨을런레벨을 변경합니다. /etc/inittab 파일은 :initdefault: 엔트리로 기본 런레벨을 설정합니다.

유닉스 시스템에서, 런레벨 변경은 누락된 서비스만 시작함으로써 이루어집니다 (각 레벨은 시작/중지된 서비스만 정의하기 때문입니다). 예를 들어, 런레벨 3에서 4로 시스템을 변경하면 로컬 X 서버만 시작할 수 있습니다. 런레벨 3으로 돌아가면, 그것은 다시 중지됩니다.

Other implementations

전통적으로, init의 주요 단점 중 하나는 작업을 순차적으로 시작하여, 다음 작업으로 이동하기 전에 각각이 로드를 완료할 때까지 기다리는 것입니다. 시작 프로세스가 입력/출력 (I/O)을 차단하면 부팅하는 동안 긴 지연이 발생할 수 있습니다. I/O 속도 향상, 예를 들어, SSD를 사용함으로써 지연을 줄일 수 있지만 근본 원인을 해결하지는 못합니다.

다음을 포함하여 이 문제와 기타 설계 문제를 해결하기 위해 기존의 init 데몬을 대체하기 위한 다양한 노력이 있었습니다:

  • BootScripts in GoboLinux
  • busybox-init, suited to embedded operating systems, employed by OpenWrt before it was replaced with procd
  • Epoch, a single-threaded Linux init system focused on simplicity and service management
  • Initng, a full replacement of init designed to start processes asynchronously
  • launchd, a replacement for init in Darwin/macOS/iOS/tvOS starting with Mac OS X v10.4 (it launches SystemStarter to run old-style 'rc.local' and SystemStarter processes)
  • OpenRC, a process spawner that utilizes system-provided init, while providing process isolation, parallelized startup, and service dependency; used by Alpine Linux, Gentoo and its derivatives, and available as an option in Devuan and Artix Linux
  • runit, a cross-platform full replacement for init with parallel starting of services, used by default in Void Linux
  • Sun Service Management Facility (SMF), a complete replacement/redesign of init from the ground up in illumos/Solaris starting with Solaris 10, but launched as the only service by the original System V-style init
  • Shepherd, the GNU service and daemon manager which provides asynchronous, dependency-based initialisation; written in Guile Scheme and meant to be interactively hackable during normal system operation
  • s6, a software suite that includes an init system.
  • systemd, a software suite, full replacement for init in Linux that includes an init daemon, with concurrent starting of services, service manager, and other features.
  • SystemStarter, a process spawner started by the BSD-style init in Mac OS X prior to Mac OS X v10.4
  • Upstart, a full replacement of init designed to start processes asynchronously. Initiated by Ubuntu and used by them until 2014. It was also used in Fedora 9, Red Hat Enterprise Linux 6 and Google's Chrome OS.

2019년 2월 기준으로, systemd는 대부분의 주요 리눅스 배포판에 채택되었습니다.

External links