티스토리 뷰

Study/Linux

[Linux] init process

생각많은 소심남 2016. 4. 21. 23:30


 Linux가 수행되면 제일 먼저 실행되는 process가 바로 init 이다. 한번 linux에서 다음 명령어를 실행해보자



 보통 ps aux를 하게 되면 pid가 낮은 순서대로 출력되게 되는데, 이 pid가 빠를수록 먼저 생성된 process이다. 그래서 제일 상단에 pid 1번으로 /sbin/init이 수행된 것을 볼 수 있는데 이게 바로 init process이다. 다시 말해 이 process는 시스템상에서 가장 먼저 생성된 user level process(개념에 따라서는 task라고도 할 수 있다)이며, system이 종료될 때까지 남아있다. 

 init process는 보통 boot process 중 마지막 단계에 해당하며, OS 동작시 필요한 환경값들을 설정해주고 이에 필요한 process들을 실행시켜주는 역할을 한다. 이런 역할이 정의된 계기는 Linux의 모태인 UNIX의 SysVInit 형태를 가져왔기 때문인데, 사실 이렇게 정의된 SysVInit scheme 자체는 만들어진지 오래되서 현재와 맞지 않는 부분이 몇개 있었다. 대표적인 것이

 - SysVInit 자체는 target machine이 일반적인 PC가 아닌 mainframe system, 그것도 여러명이 동시에 사용하는 것을 목적으로 삼고 있었다.

 - 또한 오늘날에 많이 쓰고 있는 multi core가 아닌 single core를 대상으로 하고 있었다.

 - Startup이나 shutdown시 소요시간이 중요한 항목이 아니었다. 일반적으로 사람들이 고려한 것은 정상적으로 동작되냐 여부였지, 얼마나 빠르게 수행되는지 여부를 고려하지 않았다.

 이때문에 몇가지 한계를 가지고 있었다. 우선 startup 이 단계를 거쳐서 수행되게끔 했다는 것이다. 그래서 다음단계로 넘어가기 위해서는 꼭 이전단계가 수행 완료되어야 했다. 그래서 이런 경우 multi core 가 가지는 parallel적인 이점을 전혀 활용할 수 없다.(물론 이게 시스템의 성능에 큰 영향을 끼치는 부분은 아니다) 그리고 shutdown/reboot 자체가 거의 발생하지 않는 이벤트라 가정하고, 이에 대한 소요시간에 대해서는 중요하게 고려하지 않았다.

 아무튼 이런 한계 때문에 SysVInit을 대체할 만한게 나왔는데, 그게 Upstart와 systemd이다. 물론 그렇다고 SysVInit이 완전히 없어진 것이 아니고, 여전히 Init이 수행되는 형태나 쓰이는 Utility는 SysVInit을 따라가고 있다. 사실 새로운게 생겼다고 해서 바로 대체를 해버리면 과거의 scheme과 충돌이 날 가능성이 있기 때문에 SysVInit을 그대로 가지고 있는 것이기도 하고, 이게 다른걸로 대체되기는 조금더 시간이 필요할 듯 싶다.

참고로  실습시 사용하는 Ubuntu 에서는 Upstart를 사용한다. 앞에서 ps를 했을때 init process로 보이기는 하지만 실제로 upstart에 대한 manual를 보면 그게 init으로 대체되어 있는 것을 알 수 있다. init에 대해서 조금더 살펴보고 싶은 사람은 'man upstart' 명령어를 수행해보길 바란다.

댓글