마이의 개발 블로그

[OS] 프로세스(process)와 쓰레드(thread) 본문

개발지식/OS

[OS] 프로세스(process)와 쓰레드(thread)

개발자마이 2022. 2. 13. 04:05
반응형

쓰레드와 프로세스는 각각 OS 교과서의 한 챕터씩을 차지할 정도로 다루어야할 내용이 많아 간단히 정리하기에는 어려운 면이 있다. 여기서는 일단 이 둘의 개념과 역할에 대해 간략하게 다루어보고자 한다.


프로그램(program)

- 컴퓨터에서 특정 작업을 수행하기 위한 명령어들의 집합 (코드의 모음)

- 보조기억장치에 저장되어있으나 메모리에는 올라가있지 않은 정적인 상태임

 

프로세스(process)

- 실행중인 프로그램(program in execution)을 말함

- 프로그램은 OS로부터 필요한 메모리(code, stack, heap, data)를 할당받아 프로세스가 됨 (동적인 상태)

- 하나의 프로세스에 문제가 발생하더라도 해당 프로세스만 종료된다는 특징이 있음

 

Process Control Block (PCB)

- OS에서 프로세스에 관한 정보를 저장해놓는 공간

  *PCB 주요 정보 : 프로세스 상태, PID, 레지스터 정보, 메모리 관리 정보, 포인터 등

- PCB는 프로세스 생성 시 생성되고, 종료 시 제거됨

- 멀티태스킹 환경에서 context switching을 위해 프로세스 상태와 정보에 대한 스냅샷을 저장하는데에 사용함

 

프로세스 상태

1) 생성(new) : 커널에 작업을 등록하고 PCB를 할당받아 프로세스가 생성되는 상태

2) 준비(ready) : 프로세스를 제외한 다른 자원들을 프로세스가 OS로부터 할당 받은 상태

3) 실행(run) : 프로세스가 프로세서를 할당받아 실행되는 상태로, 할당받은 시간이 종료되거나 실행 중 I/O 처리 시 대기상태로 전환됨

4) 대기(wait) : 프로세서 이외의 다른 자원(I/O 등)을 할당받기위해 대기 중인 상태

5) 종료(terminated) : 작업 종료 후 프로세서의 할당이 해제된 상태


쓰레드(thread)

- 프로세스 안에서 작업을 수행하는 단위를 말함

- 프로그램이 고도화되면서 프로세스보다 작은 단위, 저비용의 프로그램 실행 단위가 필요해짐에 따라 등장하게된 개념

- 하나의 프로세스는 최소한 하나 이상의 쓰레드를 가지며, 둘 이상을 가질 경우 이를 multi-threaded process라고 함

- 하나의 프로세스 안에 있는 1개 이상의 쓰레드들은 프로세스 내의 자원 중 code, heap, data를 공유함 (stack은 개별 할당)

 

멀티쓰레딩(multithreading)의 특징

장점

1) 응답성(responsiveness)

- 여러 작업을 동시에 수행하여 사용자에 대한 응답성이 향상됨 (예: 크롬에서 페이지를 탐색하며 파일 다운로드하기)

2) 자원공유(resource sharing)

- 쓰레드 생성 시부터 자동으로 자원공유(코드, 데이터)가 이루어져 보다 효율적인 자원의 사용이 가능함

3) 경제성(economy)

- 다중 작업을 수행할 때 프로세스를 생성하고 사용하는 것보다 쓰레드를 이용하는 방식이 자원을 덜 소모하여 더 경제적이라고 할 수 있음. 또한, context switching 시에도 쓰레드가 프로세스보다 유리함

4) 확장성(scalability)

- 멀티 프로세서 구조에서 보다 빠른 처리를 가능하게 함

 

주의할 점

- 프로세스 내에서 쓰레드들은 자원을 공유하기 때문에 실행순서나 메모리 접근에 대한 설계를 신경써야함 (동기화 문제, 교착상태 등)

- 문제발생시 하나만 종료되는 프로세스와는 달리 하나의 쓰레드에 문제가 발생할 경우 다른 쓰레드에도 영향을 미치게 됨


프로세스와 쓰레드

- OS -> 프로세스에 자원 할당, 프로세스 -> 쓰레드에 자원 할당

- 프로세스 간의 정보 교환에는 interprocess communication (IPC)가 필요하나 쓰레드는 자원을 공유하여 stack을 제외하고는 별도 처리가 필요 없어 프로세스에 비해 쓰레드가 상대적으로 시간과 비용 측면에서 유리함

- 흔히들 프로세스를 레시피 또는 식당에, 쓰레드를 요리에 비유함

- 문제 발생 시 프로세스는 다른 프로세스에 영향 없이 종료됨, 쓰레드는 다른 쓰레드에 영향을 줌

  *햄버거와 라면을 만드는 식당(프로세스)이 각각 요리를 할 때, 햄버거 재료 수급에 문제가 생겨도(프로세스 문제 발생) 라면 만드는 주방에는 문제가 없음. 그러나 라면을 만드는 주방 내에서 여러 명의 주방장(멀티쓰레드)이 라면을 만드는 과정 중에 라면 재고를 서로 착각할 경우, 경우에 따라 라면이 없는데도 물을 끓인다던지 혹은 라면을 더 끓여낼 수 있는 데도 재고가 없다고 생각해 물을 올리지도 않는 상황이 발생할 수 있음.

반응형
Comments