Computer-Sience/OS

[OS] Process(프로세스) / Thread(스레드)

dev_ss 2023. 2. 9. 01:50

프로그래밍을 시작하게 되면서 과거에는 단어의 정확한 이해가 없이 대략적인 의사전달만을

위한 단어들을 말하는 습관을 고치는 계기가 되었다.

 

그중 하나가 스레드와 프로세스였는데 이 둘은 확연히 다른 단어이며

해당 포스팅에서 다뤄볼 것이다.

 

 

1. Process(프로세스)

운영체제로부터 자원을 할당받은 작업의 단위이며,

각 작업에는 운영체제로부터 부여받은 프로세스 식별자(PID)를 가지고 있다.

 

한 개의 프로세스에는 하나 이상의 스레드를 가지고 있고,

프로세스 간에 통신을 하려면 IPC(Inter Process Communication)를 요구한다.

 

프로세스는 Code / Stack / Heap / Data의 4가지 영역으로 구분되어 있으며,

Code / Data를 정적 영역으로, Stack / Heap을 동적 영역으로 구분한다.

 

프로세스가 생성되는데 오버헤드(Overhead)가 크기 때문에,

Context-Switching 또한 오래 걸릴 수 있다.

 

Overhead : 작업에 걸리는 소요되는 시간 또는 메모리를 뜻함

 

Context-Switching : 멀티 프로세스 환경에서 차우선인 다른 프로세스가

     인터럽트 요청에 의하여 차우선의 프로세스 실행을 위해 기존 프로세스의

     상태를 저장하고 교체하는 작업을 칭함

 

운영체제 내 프로세스 사진

2. Thread(스레드)

프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이며,

스레드 또한 프로세스 내에서 실행 순서와 스케줄링을 위하여 스레드 식별자(TID)를 부여받는다.

 

스레드는 프로세스에서 사용하는 메모리와 시스템 자원을 공유하며,

한 프로세스 내에서 여러 개의 스레드를 통한 병렬적인 처리도 가능하다.

 

프로세스 내에서 스레드는 Stack을 따로 할당 받으며,

그 외의 Code / Heap / Data의 영역을 다른 스레드와 공유한다.

그로 인하여 스레드 한 개가 문제를 일으킨다면 영역을 공유하는

다른 스레드에게도 문제를 발생시킬 수 있다는 것이다.

 

프로세스 내 스레드 사진

반응형