프로세스
: 컴퓨터에서 실행되고 있는 프로그램를 말한다.
- 프로세스는 Code, Data, Stack, Heap의 구조로 독립된 메모리 영역으로 할당받는다.
- Code 영역은 프로그래머가 작성한 코드를 CPU에서 해석 가능한 기계어 형태로 저장되어 있는 영역이다.
- Data 영역은 전역(Global) 변수나 정적(Static) 변수가 저장되어 있는 영역이다.
- Stack 영역은 지역 변수, 매개변수, 반환 값 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장한다.
- Heap 영역은 동적 메모리 영역이다.
프로세스가 할당받는 메모리 영역은 위 그림과 같은 구조를 가진다.
- 프로세스에서 최소한 한 개의 스레드를 가진다.
- 각 프로세스는 별도의 주소 공간에서 실행된다. 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 프로세스는 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다.
스레드
: 프로세스 내에서 실행되는 실행 단위
위 그림과 같이 스레드는 프로세스 내에서 stack만 할당받는다.
- 각각의 스레드는 별도의 레지스터와 스택을 가지고 있다.
- 같은 프로세스 안에 있는 여러 스레드는 같은 주소 공간이나 자원들을 공유한다.
- 프로세스 내에 하나의 프로세스를 가지면 실행단위는 단일 스레드가 되는 것이고 프로세스 내에 여러 개의 스레드가 실행단위를 나누어 가지면 멀티스레드가 된다.
멀티 프로세스
: 두 개 이상의 프로세스가 협력적으로 하나 이상의 작업을 처리하는 것을 의미한다.
- 프로세스의 문제가 생겨도 다른 프로세스에 영향을 주지 않는다.
- 프로세스 간 독립된 메모리 영역으로 공유하는 메모리가 없다.
- Context Switching 과정에서 캐시 메모리 초기화 등 무서운 작업이 진행되고 시간이 소모되는 오버헤드가 발생하게 된다.
멀티 스레드
: 한 프로세스 내에서 여러 스레드가 실행단위를 나누어 실행되는 것을 의미한다.
- 한 프로세스 내에서 여러 스레드가 사용되면 공유자원이 있어서 시스템 자원 소모가 줄어든다.
- 자원을 공유하기에 동기화 문제가 발생할 수 있다.
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
Context Switching
- CPU에서 여러 프로세스를 돌아가면서 처리하는 이 과정을 Context Switching이라 한다.
위 그림처럼 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다.
- 여기서 PCB(Process Controller Block)는 프로세스의 정보를 담는 구조체이다.
출처 :
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html