데몬이란?
-멀티태스킹 운영 체제에서 데몬은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다.
-윈도우의 서비스 같은 개념
-일반적으로 프로세스의 형식으로 실행되며 데몬이라는 표시를 위해 뒤에는 d가 붙는다.
ex)
syslogd
-서버측면의 네트워크 서비스를 처리하는 프로그램
-대개 관리자 권한으로 실행되어 네트워크 요청이나 하드웨어 동작 등 여러 기능을 담당하며 다양한 목적으로 사용
UNIX계열에서의 데몬
-시스템의 기능을 제공하거나 백그라운드에서 항시 실행되는 프로그램
데몬의 특징
-부모 프로세스가 없다.
PPID(부모 프로세스 ID)는 1
시스템의 첫 프로세스인 init의 바로 하위에 위치하게 된다
(init은 자바의 Object 클래스처럼 모든 프로세스의 직,간접 부모인 데몬이며 이것이 없다면 커널 패닉이 발생하게 된다).
-데몬은 일반적으로 자식 프로세스를 포크(fork)하여 자기 자신을 복사, 생성한 후 자기 자신은 삭제하여 해당 프로세스를 고아 프로세스로 만든 후 이를 init이 자신의 자식 프로세스로 받아들이도록 하는 과정을 통하여 만들어지며 이를 'fork off and die'라 표현
데몬의 동작 방식
- Standalone, 스탠드얼론
- Super daemon(xinetd), 슈퍼 데몬
위에서 언급한 메일 서버, 웹 서버처럼 혼자서 요청을 받아 처리하는 데몬(httpd 등)을 스탠드얼론이라고 한다.
서버 서비스의 대부분이 스탠드얼론 방식으로 수행되는데 이 방식으로 네트워크 서비스를 수행한다면 클라이언트의 요청이 언제 들어올지 모르는 상태에서 항상 서비스가 가능하고 다른 메커니즘 없이 바로 데몬이 클라이언트의 요청을 처리할 수 있다.
물론 항상 동작하며 메모리에 상주해야 하기 때문에 서버의 메모리를 많이 소모하고 클라이언트의 요청이 들어올 때마다 처리를 위해 새로운 메모리를 소모한다는 점 등의 문제점이 있다.
따라서 클라이언트의 요청이 많지 않은 네트워크 서비스의 경우 스탠드얼론 방식은 비효율적이라 할 수 있다.
스탠드얼론은 /etc/init.d/ 나 /etc/rc.d/init.d/ 에 있는 스크립트 파일로 실행된다. 대표적으로 SSH 서비스를 찾아볼 수 있으며 이는 '해당 서비스 절대경로' + start/stop/restart 나 'service 서비스 이름' + start/stop/restart로 데몬을 시작하거나 멈추는 등 관리할 수 있다.
두 번째 방법인 슈퍼 데몬(xinetd)은 데몬 자기 자신이 직접 서비스를 수행하지 않고 클라이언트 등에서 들어온 요청에 따라 해당 데몬을 실행시키는 방식이다.
inetd라는 데몬(현재는 보안상의 이유로 xinetd)이 받은 메시지에 따라 해당되는 데몬을 메모리에 적재함으로써 실행하여 서비스를 처리한다.
필요에 따라 데몬을 메모리에 올리기 때문에 대부분의 경우 xinetd를 사용하는 것이 자원 관리 면에서 이득이 있지만 스탠드얼론에 비해서 상대적으로 처리가 늦기 때문에 클라이언트의 요청에 대해 빠른 네트워크 서비스를 제공하기 위해서는 스탠드얼론 방식이 적합할 것이다.
슈퍼 데몬은 xinetd에 의해 다른 데몬을 실행시키지만 xinetd도 데몬이기 때문에 시스템이 켜질 때 스탠드얼론으로 실행된다. 그 후 요청에 따라 다른 데몬을 불러들여 실행시키게 된다.
출처:
댓글