1. [Unix/Linux] init 프로세스
ㅇ UNIX가 처음 시동될 때,
- 일련의 부팅 과정이 끝나고,
- 커널이 메모리에 로드되고, 제어권이 커널에 주어지고, 커널이 여러 제반환경을 구축한 후에는,
- 오직 한 개의 프로세스 만이 있게 되는데, 이것을 init 라고 함
2. [Unix/Linux] init 프로세스 특징
ㅇ init 프로그램 화일의 위치 : /sbin/init
ㅇ 커널이 시동된 후에, init의 모든 동작은,
- 대개 시스템 의존적인 초기화 화일들을 읽고 (/etc/rc*),
- 다중 사용자 모드와 같은 원하는 상태로 시스템을 가져감
- 이러한 동작들은, /etc/inittab 화일에 명시된 대로 실행됨
ㅇ 모든 프로세스의 부모 프로세스 임
- init는, 커널에 의해 직접 실행되는 프로세스이며, 모든 프로세스는 init로부터 출발함
- 즉, init는, 모든 프로세스의 부모 프로세스이고, 동시에 사용자 로그인 쉘의 부모 프로세스
3. [Unix/Linux] PID (Process IDentifier)
ㅇ init의 프로세스 식별자 즉, PID(Process IDentifier)는 1 임
ㅇ 한편, PID는 init가 1 인 것을 제외하고,
- 나머지 프로세스는, 2 부터 32768 사이의 양의 정수 값 임
4. [Unix/Linux] 프로세스 제어용 시스템 호출 : exec, fork
ㅇ 부팅 과정이 끝난 후 존재하는 단 한개의 init 프로세스는,
- 이로부터 fork 및 exec라는 시스템 호출을 통해,
- 결국, 수많은 프로세스들이 수행되게 됨
ㅇ exec : (프로세스 대체 실행)
- 현재의 프로세스를 새로운 프로그램으로 `대체`시켜 수행시키는 시스템 호출
. 먼저, 새로 실행하려는 프로그램 파일에 대한 접근 권한 여부 조사
. 이후, 로더 루틴 호출
ㅇ fork : (프로세스 생성 실행, 프로세스 복제)
- 새로운 자식 프로세스를 `생성`할 때 사용하는 시스템 호출
. 현재 프로세스(부모 프로세스)의 사본(자식 프로세스)을 생성하고,
. 그후 부모 및 자식 프로세스는 모두 fork() 문 바로 다음의 코드들을 실행
ㅇ clone : (스레드 생성)
- 자식 프로세스를 생성하나, 부모 프로세스와 모든 자원을 공유함
- 별도의 PID를 갖음 (ps 로 조회 시, 각각 조회됨)
- 호출된 프로세스의 종료는, 부모 프로세스에 영향을 주지 않음
- clone이 호출될 때, 부모 자식 태스크 간 자료구조를 얼마나 공유할지를 결정하는
플래그 집합이 전달됨