현재 진행중인 프로젝트에서 DaemonBatchJob.java 란 파일을 접하게 되었는데 이름으로 그 기능을 짐작하기가 어렵더라구요. batchjob인데 앞에 daemon은 멀까...? 분명 수업을 듣고 개발을 하다 한번쯤 지나가면서 들었던 기억은 있는데(
이름이 익숙한데 기존에 알던 개념이랑 매치가 안되서,,,?) 이게 무엇인지 모르겠더라구요.그래서 한번 검색하고 나름대로 정리해 보았습니다.
멀티태스킹 운영 체제에서 데몬(daemon, 발음: 데이먼/'deɪmən/ 또는 디먼 /'dimən/[1])은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다.
데몬은 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 1이며, 따라서 프로세스 트리에서 init 바로 아래에 위치한다. 데몬이 되는 방법은 일반적으로 자식 프로세스를 포크(fork)하여 생성하고 자식을 분기한 자신을 죽이면서 init이 고아가 된 자식 프로세스를 자기 밑으로 데려가도록 하는 방식이다. 이러한 방법을 ‘fork off and die’라 부르기도 한다.
Wiki의 내용입니다.
상당히 복잡하게 설명이 되어 있는데... 부모 프로세스가 존재하지 않다는 뜻이 프로그램(OS, 어플리케이션)이 실행 될 때 실행되는 프로세스라는 뜻 같습니다.(그래서 부모를 죽이면 프로그램이 꺼지는...?) 부모가 존재하는 것은 밑에 설명할 슈퍼데몬(inted) 방식인 듯 합니다.
용어의 유래
도깨비나 유령을 뜻하는 데몬(daemon)이란 이름은 MIT의 MAC 프로젝트 프로그래머들이 만든 것이다. 처음 만들어질 때는 맥스웰의 도깨비 사고 실험에서 맥스웰이 언급한, 보이지 않는 곳에서 분자들을 골라주는 일을 하고 있는 유령에서 영감을 얻은 것이었다. 이후 유닉스 시스템은 이 용어를 받아들여 사용했다. 그리스 신화에서도 신들이 관여하지 않는 일을 처리하는 데몬이 등장하는데, 이는 사용자가 직접 신경쓰지 않도록 하면서 백그라운드에서 일을 처리해 주는 데몬의 역할과 맞아 떨어진다. BSD 계열의 운영 체제는 BSD 데몬을 마스코트로 삼았으나, 실제로 BSD의 마스코트는 기독교적 세계에서 그리는 악마의 모습을 귀엽게 만든 것이다. 또한 원래 daemon은 두문자어가 아니지만, disk and execution monitor로 두문자어처럼 뜻을 맞추어 말하기도 한다.
Daemon의 종류
1. Stand-alone 방식 (항상 실행 대기)
이 방식의 데몬들은 자기 스스로 시스템에 상주하며 클라이언트 요청에 응답을 보내주는 방식으로, 주로 아파치 데몬 (httpd)처럼 클라이언트의 요청이 잦은 경우 이런 방식으로 실행된다.
Stand-alone 방식의 데몬들은 inetd 방식보다는 클라이언트 요청에 신속하게 대응하는 장점이 있으나, 이들이 시스템에서 많이 생성되면 자원 낭비가 커지고 퍼포먼스도 영향을 받게 된다.
2. inetd 방식 (클라이언트 요청이 있을 때만 실행)
Stand-alone처럼 자기 스스로 독립적으로 시스템에서 실행되는 것이 아니라, inetd라는 수퍼 데몬이 시스템에서 대기하고 있다가 클라이언트 요청이 들어오면 inetd에 의해 해당 서비스를 제공해줄 데몬을 실행시키는 방식이다. telnet이나 ftp같이 비교적 클라이언트의 요청 빈도가 낮은 서비스들은 이런 inetd 방식이 시스템 리소스 활용 측면에서는 유리하다.
그러나, 아파치 데몬같이 클라이언트의 자잘한 요청이 많은 서비스에 대해서는, inetd 방식이 오히려 시스템 효율을 떨어뜨리게 된다. inetd 데몬은 스탠드 얼론 방식으로 실행되는 수퍼 데몬이며, 서비스 요청 시 inetd 데몬의 Child process로 다른 데몬이 실행되는 것이다.
Result
따라서 DaemonBatchjob이라는 파일은 데몬이긴 데몬인데 batchjob을 실행시키는 데몬이라는 뜻 같습니다.
참고
Process와 Daemon
Process
- 프로그램의 실행 상태
- 실행 및 종료를 자유롭게 수행할 수 있습니다.
.exe
파일 실행 시 컴퓨터의 메모리에 할당됩니다. CPU가 프로그램에 생명을 불어넣어 메모리로 이동시켜 별도의 실행오브젝트로 만든 상태를 지칭합니다.
Daemon
- 항상 수행되고 있는
프로세스
- 사용자가 직접 제어하지 않고 백그라운드에서 수행
- 주로, 시스템 스타트업 시 자동으로 기동되는 프로세스를 지칭
- inetd, syslogd, crond, httpd...
항상 실행되고 있으며 죽지 않는 프로세스 입니다.
주로 OS가 기동 될 때 자동으로 실행되고, 이름 뒤에 데몬을 뜻하는 d가 붙습니다.
ex) inetd, syslogd, crond http...
위와 같은 프로세스들은 네트워크 요청이나 하드웨어 동작, 여타 프로그램에 반응하는 기능을 담당하거나 주기적인 작업을 실행합니다.
경우에 따라 데몬을 kill 시키기도 하고 다시 기동 하기도 하지만, 그 솔루션의 기능을 수행하기 위해서는 필수적으로 항상 실행이 되어 있어야 하기에 데몬이라 부릅니다.
References
https://haruhiism.tistory.com/9
'CS' 카테고리의 다른 글
[Algorithm]이진탐색(Binary Search) (0) | 2022.02.24 |
---|---|
[Algorithm]점근성능 표기법(Asymptotic Notation) (0) | 2022.02.20 |
[Algorithm] what is BigO? (0) | 2022.02.03 |
[MIT] DataStructures & Dynamic Arrays (2) | 2022.02.02 |
[leetCode]LeetCode를 Github에 자동커밋하기 (3) | 2022.01.17 |