Process는 실행중인 프로그램을 의미한다. 그렇기에, Process를 알기 위해서는 프로그램이 무엇인지 이해를 해야한다. 프로그램의 사전적 의미는 실행가능한 명령어의 집합을 의미하는 정적인 개념이다. 즉, 프로그램은 executable binary file 라고 생가할 수 있습니다.
Process는 메모리에 적재되고, CPU의 자원을 할당받아 실행되고있는 프로그램으로, 동적인 의미를 담고있다. OS는 각각의 process를 PCB(Process Control Block)이라는 자료구조로 다룬다.
새로운 Process는 어떻게 실행이 될까?를 이해하기 위해서는 System call에 대한 이해가 필요하다. System Call에 관한 글이 아니므로, 간단히 집고 넘어가자. System Call(== syscall)은 Application이 OS의 Kernel이 수행하는 작업을 활용하기 위한 Interface라고 할 수 있다. 이런 Syscall 중에는 fork() 라는 명령과, exec()라는 명령이 존재하는데, 이를 이용하여 새로운 Process를 만든다.
#include <unistd.h>
fork()는 현재 실행중인 process가 메모리를 할당하고 code 부터 program counter까지 완전하게 동일한 process를 복사하고, 실행한다. parent proess에서는 process의 PID, child process에서는 0을 return한다.
그에 반해, exec()는 새로운 process를 실행하는 것은 아니지만, 실행중이던 process의 내용이 exec()로 실행되는 process로 덮여쓰인다.
새로운 Process는 fork()를 하고 PID가 0인지를 확인하여 0이면 exec()를 실행하는 방식을 통해 새로운 proces를 생성을 한다.
이러한 fork() -> exec()로 생성하는 방식 때문에 (기존 process)-(새로운 process)의 관계는 부모-자식 관계가 된다. 전체 process는 tree 형태를 띄게 되고, 이것을 Process Tree라고 한다.
Process : Ram에 적재되고, CPU의 자원을 할당받아 실행되고 있는 프로그램.
Thread는 process 내에서 실행되는 흐름의 단위를 말한다. 하나의 process에는 여러개의 Thread가 존재할 수 있고, 하나의 process에 속해있는 여러개의 Thread는 PCB의 code나 bss, data와 같은 자원을 공유하며, 공유 메모리를 통해 통신할 수 있다. OS는 각각의 thread를 TCB(Thread Control Block)이라는 자료구조로 관리를 한다.
스레드.. 어디서 들어본 적이 있는 것 같다..
크게 다른 내용은 아니다. CPU에서 말하는 thread는 CPU가 처리할 수 있는 작업의 단위이다. 인텔 사의 하이퍼스레드 등의 방식을 통해 1개의 코어가 여러개의 코어로 인식하게 하여 여러개의 OS의 thread를 할당받아 실행할 수 있도록 한다.
Process
- Ram에 적재되고, CPU의 자원을 할당받아 1개 이상의 thread로 실행되고 있는 프로그램
- OS로부터 자원을 할당받는 작업의 단위
Thread
- Process가 할당받은 단위를 이용하는 실행의 단위
하나의 프로그램을 여러 프로세스로 병렬적으로 수행하는 것을 말한다.
하나의 프로그램을 여러개의 스레드로 처리하는 것을 말한다.