Process와 Thread의 차이

Sun-do Kim
POCS
Published in
3 min readJul 8, 2019

프로세스와 스레드의 차이에 대해서 알아보자. 두개의 차이는 운영체제 수업에서도 아주 중요하게 다룬다. 또한, 개발자 면접에서도 자주 나오는 주제이다. 그래서 이 차이를 잘 공부해두면 좋을 것 같다.

1. Thread의 출현 배경

스레드의 출현 배경을 알면, Process의 차이를 더욱 명확하게 알 수 있다.

프로세스의 문제점

1. 프로세스 간 컨텍스트 스위치 오버헤드

CPU가 프로세스A를 실행하다가 B를 실행한다고 하자. 프로세스 A의 컨텍스트를 PCB에 저장하고 B의 컨텍스트를 레지스터에 저장해주어야 한다. 또한, 캐시와 MMU의 TLB도 flush해주어야 한다. 그리고 L1,L2캐시에는 프로세스B의 데이터로 채워준다. 상당히 Time consuming한 작업이다.

2. 프로세스 사이 통신의 어려움

프로세스들은 독립된 주소공간을 가지고 있기 때문에, 단순한 방법으로 서로의 메모리 공간을 접근 할 수 없다. 공유메모리, 소켓등을 이용해서 접근해야 한다.

프로세스의 문제점을 해결한 스레드

1. 빠른 컨텍스트 스위치

스케줄링 단위가 프로세스였던 시절, context switch가 일어날 때마다 캐쉬 flush, 그리고 캐쉬 복구등을 해야했다. 하지만, 스케줄링 단위가 Thread로 되면서 같은 프로세스 내의 Thread들을 context switch를 할 때는 TCB만 바꾸면 된다.

2. 스레드간 통신으로 멀티스레드 구현

프로세스끼리의 통신은 여전히 문제로 있다. 하지만 같은 프로세스내에서 스레드끼리의 통신을 더욱 쉽게 할 수 있도록 하였다. 그래서 멀티코어 환경에서 멀티 스레드를 이용해 더욱 빠른 실행을 할 수 있도록 한다. 기존 프로세스 단위의 실행은 단일 스레드 환경과 거의 같다.

더 빠르게 실행할 수 있고, 멀티코어의 등장으로 인해, 실행과 스케줄링의 단위가 프로세스에서 스레드로 바뀌었다.

2. 프로세스와 스레드 관계

프로세스는 스레드의 컨테이너이다. 스레드의 정보를 담고있는 것에 불과하다.

(사실 이 관계 자체가 차이점이다..)

PCB A는 A의 프로세스 전체 정보를 가지고 있다. 그 중에서 프로세스는 Thread들을 LinkedList형식으로 저장한다.

실행 단위에 따른 메모리 구조를 보면 더욱 잘 이해가 간다.

프로세스는 스레드 간의 공유환경을 제공할 뿐이다. 스레드의 컨테이너 역할을 한다. 프로세스는 스레드간의 공유변수를 제공한다.

예시를 들어보자.

기업에 3개의 부서가 있다. 서로 부서는 각각 다른 역할을 수행한다. 전체 회의에서 서로가 작업한 내용을 공유하고 필요한 내용을 전달한다.

회사는 이러한 부서를 관리하고 담아두는 컨테이너이다. 프로세스는 PCB로 비유할 수 있고, 각각의 부서는 TCB로 비유할 수 있다. 전체 회의는 전역 Data, Code가 된다.

결국 프로세스와 스레드의 차이는 실행단위의 크기이다. 실행단위를 스레드로 작게하고 멀티코어와 같은 하드웨어의 발전으로 Thread를 이용한 실행이 더욱 빨라졌다.

--

--