init   init Process   init 프로세스

(2024-01-15)

exec, exec(), exec System Call, exec 시스템 호출, fork, fork(), fork System Call, fork 시스템 호출, clone 시스템 호출


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라는 시스템 호출을 통해,
     - 결국, 수많은 프로세스들이 수행되게 됨

  ㅇ fork : (프로세스 생성 실행, 프로세스 복제)
     - 새로운 자식 프로세스를 `생성`할 때 사용하는 시스템 호출
        . 현재 프로세스(부모 프로세스)의 사본(자식 프로세스)을 생성하고,
           .. 자식 프로세스는 새로운 PID 부여 받음
        . 그후 부모 및 자식 프로세스 모두에서, 현재 프로그램 카운터가,
          fork() 문 바로 다음의 코드들을 실행하도록 가리키게 됨  
     * 자식 프로세스 생성 (복제) 이유 : 멀티태스킹 동작을 하기 위함 
     * 복제되는 정적인 정보들 : 힙 메모리, 정적 메모리, IPC 자원, 열린 파일, 시그널 마스크 등

  ㅇ exec : (프로세스 대체 실행) 
     - 프로세스 내에서 새로운 프로그램을 실행시킴
     - 즉, 현재의 프로세스를 새로운 프로그램으로 `대체`시켜 수행시키는 시스템 호출
        . (대체되는 것들 : 코드,데이터,,스택 등)
        . 현재 프로그램 카운터가, 새 프로그램의 main()부터 실행이 시작되도록 가리킴
        . 호출 이후에도 PID 값이 변하지 않음

  ㅇ clone : (스레드 생성)
     - 자식 프로세스를 생성하나, 부모 프로세스와 모든 자원을 공유함
     - 별도의 PID를 갖음 (ps 로 조회 시, 각각 조회됨)
     - 호출된 프로세스의 종료는, 부모 프로세스에 영향을 주지 않음
     - clone이 호출될 때, 부모 자식 태스크 간 자료구조를 얼마나 공유할지를 결정하는
       플래그 집합이 전달됨

Unix/Linux 프로세스
   1. 프로세스   2. PID, PPID   3. 시스템 호출   4. init,exec,fork   5. 시그널   6. 좀비  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"