어떤 작업을 하기 위해 해야 할 일들을 순서대로 나열한 것으로, 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 정적인 상태의 파일이다. 컴퓨터에서 프로그램은 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행 절차를 표현해 놓은 명령어들의 집합이다. 그에 필요한 데이터를 묶어 놓은 파일로 보조 기억 장치에 저장되어 있다.
프로그램이 실행되어서 돌아가고 있는 상태, 컴퓨터에서 연속적으로 실행되고 있는 동적인 상태의 컴퓨터 프로그램이다. 작업관리창에 표시되어 있는 것들이 프로세스라고 볼 수 있다.
프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해 준 실행 중인 프로그램이다.
프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 프로세스가 되는 것이다.
스레드는 프로세스가 할당받은 자원을 이용하는 실행 단위이자, 프로세스의 특정한 수행 경로이자 프로세스 내에서 실행되는 여러 흐름의 단위이다.
스레드는 프로세스 내에서 프로세스의 자원을 이용해 실제로 작업을 수행하는 일꾼이다. 스레드가 소속된 프로세스가 운영체제로부터 자원을 할당받으면 그 자원을 스레드가 사용한다. 프로세스는 최소 한 개 이상의 스레드를 가지며, 이 스레드를 메인 스레드라고 한다.
Process Control Block
특정한 프로세스에 대해 관리가 필요한 정보들을 모아 저장하는 운영체제 커널의 자료구조이다.
운영체제에서 프로세스는 PCB로 나타내어지며, 프로세스는 생성될 때마다 고유의 PCB가 생성되고 프로세스가 완료되면 PCB는 종료된다.
스레드는 PCB가 아닌 TCB를 가지고 있는다. 경량 프로세스인 스레드를 관리하는 자료구조이다. 스레드가 하나씩 추가될 때마다 PCB내 TCB를 하나씩 수용하는 것으로 커널은 스레드를 실현시킨다.
예를 들어 3개의 스레드를 실행 중인 프로세스는 아래와 같다.
프레세스는 시스템 호출인 fork()를 통하여 생성이 됩니다. 또한 리눅스는 최초의 프로세스인 init을 갖고 있다. 스레드는 프로세스와 비슷한 양상으로 시스템 호출인 pthread_create()를 사용하여 새로운 스레드를 생성한다.
자식 프로세스가 exit 시스템 콜을 호출하면서 종료되면 이 프로세스에 관련된 모든 메모리와 리소스가 해제되어 다른 프로세스에서 사용할 수 있도록 반환하는 일이 일어난다.
부모 프로세스가 자식 프로세스보돠 먼저 종료되었을 때 남은 프로세스를 고아 프로세스라고 한다. init 프로세스가 자식 프로세스의 새로운 부모 프로세스가 된다. 종료되는 프로세스가 발생할 때, 커널은 이 프로세스가 누구의 부모 프로세스인지 확인한 후 커널이 자식 프로세스의 부모 프로세스 ID를 1 (init Process)로 바꿔 준다.
데몬 프로세스란 유닉스 운영체제에서 부팅 시 자동으로 켜져 백그라운드에서 계속 실행되는 프로세스를 의미한다. 백그라운드에서 계속 실행되는 프로세스라는 말에서 알 수 있는 것처럼 데몬은 프로세스의 범주 안에 속한다.
데몬은 백그라운드 프로세스에 속하기 때문에 백그라운드 프로세스와 마찬가지로 TTY(터미널 장치)를 가지고 있지 않으며, 추가로 PPID(parent id)가 1이고, SID(session id) 역시 자신의 아이디와 같다는 특징이 있다.
유닉스(리눅스를 포함한) 운영체제에서 이름이 'd'로 끝나는 프로세스들이 대표적인 데몬 프로세스라고 볼 수 있으며, 웹서버 또한 서버에서 터미널을 통해 실행될 수는 있지만, tty 또는 pts 등을 사용하여 사용자와 대화할 필요가 없기 때문에 대표적인 데몬 프로세스로 볼 수 있다.
데몬이 백그라운드에서 계속 실행되고 있다는 것은 요청이 오면 즉시 대응할 수 있도록 대기 중이라고도 볼 수 있다.
리눅스에서 프로세스 트리의 루트 노드는init 프로세스이다. init 프로세스는 시스템 부팅 시에 가장 먼저 실행되는 프로세스로 나머지 모든 프로세스는 init의 자손이거나 자식 프로세스다.